Hi,
I'm using sardine-314 in our web project.
When I'm trying to upload file through our web application, I get the following exception: "java.lang.IllegalStateException: Invalid use of BasicClientConnManager: connection still allocated.
Make sure to release the connection before allocating another one."
This is the relevant part of my code:
public class WebDavManagerImpl implements WebDavManager {
private Logger logger;
private URLEncoder urlEncoder;
private Sardine sardine;
private String webdavUrl;
public String year;
public String pathPrefix;
public WebDavManagerImpl(Logger logger, URLEncoder urlEncoder, @Symbol(PROPERTY_WEBDAV_URL) String webdavUrl,
@Symbol(PROPERTY_WEBDAV_USER) String webdavUser, @Symbol(PROPERTY_WEBDAV_PASSWORD) String webdavPassword) {
this.logger = logger;
this.urlEncoder = urlEncoder;
this.webdavUrl = webdavUrl;
this.webdavUrl = webdavUrl;
this.webdavUrl = webdavUrl.trim();
if (!this.webdavUrl.endsWith("/"))
this.webdavUrl += "/";
Calendar cal = new GregorianCalendar();
year = "" + cal.get(Calendar.YEAR);
pathPrefix = ROOT_FOLDER + "/" + year + "/";
logger.info("Preparing sardine....");
AbstractHttpClient client = getHTTPClient();
sardine = new SardineImpl(client, webdavUser, webdavPassword);
logger.info(" * sardine: {}", sardine);
}
public String putFile(UploadedFile file) {
if (file == null)
return "";
String filePath = "";
try {
checkAndCreateFolders();
String fileName = prepareFileName(file.getFileName());
filePath = pathPrefix + fileName;
String fileUrl = webdavUrl + filePath;
logger.info("Putting file to: {}", fileUrl);
byte[] bytes = IOUtils.toByteArray(file.getStream());
sardine.put(fileUrl, bytes);
} catch (Exception e) {
logger.error("Error putting file", e);
}
return filePath;
}
@Override
public String putFile(WebDavFileType fileType, UploadedFile file) {
switch (fileType) {
case BACKGROUNDS:
pathPrefix = fileType.getValue() + "/";
break;
}
return putFile(file);
}
public InputStream getFile(String filePath) {
logger.info("reading image from webdav: " + webdavUrl + filePath);
InputStream is = null;
try {
is = sardine.get(webdavUrl + filePath);
} catch (IOException e) {
logger.error("Error reading file from webdav.", e);
}
return is;
}
private void checkAndCreateFolders() throws IOException {
String rootUrl = webdavUrl + ROOT_FOLDER;
logger.info("Checking root folder: {}", rootUrl);
if (!sardine.exists(rootUrl)) {
logger.info(" * creating");
sardine.createDirectory(rootUrl);
}
String targetUrl = rootUrl + "/" + year;
logger.info("Checking folder: {}", targetUrl);
if (!sardine.exists(targetUrl)) {
logger.info(" * creating");
sardine.createDirectory(targetUrl);
}
}
private String prepareFileName(String fileName) {
...
}
private String getTimeStamp() {
Format df = new SimpleDateFormat("DDHHmm");
return df.format(new Date());
}
private AbstractHttpClient getHTTPClient() {
AbstractHttpClient client = new DefaultHttpClient();
SSLSocketFactory sf = null;
try {
SSLContext sslcontext = SSLContext.getInstance("TLS");
sslcontext.init(null, new TrustManager[] { new DefaultTrustManager() }, null);
sf = new SSLSocketFactory(sslcontext, SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
} catch (Exception e) {
logger.error("SSL error", e);
}
Scheme sch = new Scheme("https", 443, sf);
client.getConnectionManager().getSchemeRegistry().register(sch);
return client;
}
private String normalizeString(String message) {
...
}
private static class DefaultTrustManager implements X509TrustManager {
@Override
public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {
}
@Override
public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return null;
}
}
}Why am I receiving this error message? Is there something wrong with my code?
File upload just stopped working.
I should probably restart the web server to make it work again. But this error will probably repeat, I will not resolve anything by just restarting the web server.
This is the full stack trace:
[09:20:47.928] ERROR [s.n.e.s.WebDavManagerImpl]: Error putting file
java.lang.IllegalStateException: Invalid use of BasicClientConnManager: connection still allocated.
Make sure to release the connection before allocating another one.
at org.apache.http.impl.conn.BasicClientConnectionManager.getConnection(BasicClientConnectionManager.java:162) ~[httpclient-4.2.3.jar:4.2.3]
at org.apache.http.impl.conn.BasicClientConnectionManager$1.getConnection(BasicClientConnectionManager.java:139) ~[httpclient-4.2.3.jar:4.2.3]
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:456) ~[httpclient-4.2.3.jar:4.2.3]
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:906) ~[httpclient-4.2.3.jar:4.2.3]
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:1066) ~[httpclient-4.2.3.jar:4.2.3]
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:1044) ~[httpclient-4.2.3.jar:4.2.3]
at com.googlecode.sardine.impl.SardineImpl.execute(SardineImpl.java:691) ~[sardine-314.jar:November 18 2011]
at com.googlecode.sardine.impl.SardineImpl.exists(SardineImpl.java:672) ~[sardine-314.jar:November 18 2011]
at si.najdi.edi.services.WebDavManagerImpl.checkAndCreateFolders(WebDavManagerImpl.java:130) [na:na]
at si.najdi.edi.services.WebDavManagerImpl.putFile(WebDavManagerImpl.java:80) [na:na]
at si.najdi.edi.services.WebDavManagerImpl.putFile(WebDavManagerImpl.java:105) [na:na]
at $WebDavManager_1ea1a8369ea393.putFile(Unknown Source) [na:na]
at $WebDavManager_1ea1a8369ea1b3.putFile(Unknown Source) [na:na]
at si.najdi.edi.pages.ModuleItems.itemImageUpload(ModuleItems.java:1049) [na:na]
at si.najdi.edi.pages.ModuleItems.dispatchComponentEvent(ModuleItems.java) [na:na]
at org.apache.tapestry5.internal.structure.ComponentPageElementImpl.dispatchEvent(ComponentPageElementImpl.java:932) [tapestry-core-5.3.7.jar:na]
at org.apache.tapestry5.internal.structure.ComponentPageElementImpl.processEventTriggering(ComponentPageElementImpl.java:1117) [tapestry-core-5.3.7.jar:na]
at org.apache.tapestry5.internal.structure.ComponentPageElementImpl.access$3100(ComponentPageElementImpl.java:61) [tapestry-core-5.3.7.jar:na]
at org.apache.tapestry5.internal.structure.ComponentPageElementImpl$5.invoke(ComponentPageElementImpl.java:1062) [tapestry-core-5.3.7.jar:na]
at org.apache.tapestry5.internal.structure.ComponentPageElementImpl$5.invoke(ComponentPageElementImpl.java:1059) [tapestry-core-5.3.7.jar:na]
at org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:74) [tapestry-ioc-5.3.7.jar:na]
at org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.invoke(PerThreadOperationTracker.java:87) [tapestry-ioc-5.3.7.jar:na]
at org.apache.tapestry5.ioc.internal.RegistryImpl.invoke(RegistryImpl.java:1124) [tapestry-ioc-5.3.7.jar:na]
at org.apache.tapestry5.internal.structure.ComponentPageElementResourcesImpl.invoke(ComponentPageElementResourcesImpl.java:146) [tapestry-core-5.3.7.jar:na]
at org.apache.tapestry5.internal.structure.ComponentPageElementImpl.triggerContextEvent(ComponentPageElementImpl.java:1058) [tapestry-core-5.3.7.jar:na]
at org.apache.tapestry5.internal.services.ComponentEventRequestHandlerImpl.handle(ComponentEventRequestHandlerImpl.java:81) [tapestry-core-5.3.7.jar:na]
at org.apache.tapestry5.internal.services.ImmediateActionRenderResponseFilter.handle(ImmediateActionRenderResponseFilter.java:42) [tapestry-core-5.3.7.jar:na]
at $ComponentEventRequestHandler_1ea1a8369ea16c.handle(Unknown Source) [na:na]
at org.apache.tapestry5.internal.services.AjaxFilter.handle(AjaxFilter.java:42) [tapestry-core-5.3.7.jar:na]
at $ComponentEventRequestHandler_1ea1a8369ea16c.handle(Unknown Source) [na:na]
at org.apache.tapestry5.upload.internal.services.UploadExceptionFilter.handle(UploadExceptionFilter.java:75) [tapestry-upload-5.3.7.jar:na]
at $ComponentEventRequestHandler_1ea1a8369ea16c.handle(Unknown Source) [na:na]
at org.apache.tapestry5.services.TapestryModule$41.handle(TapestryModule.java:2476) [tapestry-core-5.3.7.jar:na]
at $ComponentEventRequestHandler_1ea1a8369ea16c.handle(Unknown Source) [na:na]
at $ComponentEventRequestHandler_1ea1a8369ea0c9.handle(Unknown Source) [na:na]
at org.apache.tapestry5.internal.services.ComponentRequestHandlerTerminator.handleComponentEvent(ComponentRequestHandlerTerminator.java:43) [tapestry-core-5.3.7.jar:na]
at org.apache.tapestry5.services.InitializeActivePageName.handleComponentEvent(InitializeActivePageName.java:39) [tapestry-core-5.3.7.jar:na]
at $ComponentRequestHandler_1ea1a8369ea0cb.handleComponentEvent(Unknown Source) [na:na]
at org.tynamo.security.SecurityComponentRequestFilter.handleComponentEvent(SecurityComponentRequestFilter.java:41) [tapestry-security-0.5.1.jar:0.5.1]
at $ComponentRequestFilter_1ea1a8369ea0c8.handleComponentEvent(Unknown Source) [na:na]
at $ComponentRequestHandler_1ea1a8369ea0cb.handleComponentEvent(Unknown Source) [na:na]
at $ComponentRequestHandler_1ea1a8369ea09e.handleComponentEvent(Unknown Source) [na:na]
at org.apache.tapestry5.internal.services.ComponentEventDispatcher.dispatch(ComponentEventDispatcher.java:46) [tapestry-core-5.3.7.jar:na]
at $Dispatcher_1ea1a8369ea0a1.dispatch(Unknown Source) [na:na]
at $Dispatcher_1ea1a8369ea09b.dispatch(Unknown Source) [na:na]
at org.apache.tapestry5.services.TapestryModule$RequestHandlerTerminator.service(TapestryModule.java:302) [tapestry-core-5.3.7.jar:na]
at org.apache.tapestry5.internal.services.RequestErrorFilter.service(RequestErrorFilter.java:26) [tapestry-core-5.3.7.jar:na]
at $RequestHandler_1ea1a8369ea09c.service(Unknown Source) [na:na]
at org.apache.tapestry5.services.TapestryModule$3.service(TapestryModule.java:902) [tapestry-core-5.3.7.jar:na]
at $RequestHandler_1ea1a8369ea09c.service(Unknown Source) [na:na]
at org.apache.tapestry5.services.TapestryModule$2.service(TapestryModule.java:892) [tapestry-core-5.3.7.jar:na]
at $RequestHandler_1ea1a8369ea09c.service(Unknown Source) [na:na]
at org.apache.tapestry5.internal.services.StaticFilesFilter.service(StaticFilesFilter.java:90) [tapestry-core-5.3.7.jar:na]
at $RequestHandler_1ea1a8369ea09c.service(Unknown Source) [na:na]
at $RequestHandler_1ea1a8369ea07f.service(Unknown Source) [na:na]
at org.apache.tapestry5.services.TapestryModule$HttpServletRequestHandlerTerminator.service(TapestryModule.java:253) [tapestry-core-5.3.7.jar:na]
at org.apache.tapestry5.upload.internal.services.MultipartServletRequestFilter.service(MultipartServletRequestFilter.java:44) [tapestry-upload-5.3.7.jar:na]
at $HttpServletRequestHandler_1ea1a8369ea081.service(Unknown Source) [na:na]
at org.got5.tapestry5.jquery.services.AjaxUploadServletRequestFilter.service(AjaxUploadServletRequestFilter.java:27) [tapestry5-jquery-3.3.6.jar:na]
at $HttpServletRequestHandler_1ea1a8369ea081.service(Unknown Source) [na:na]
at org.apache.tapestry5.internal.services.IgnoredPathsFilter.service(IgnoredPathsFilter.java:62) [tapestry-core-5.3.7.jar:na]
at $HttpServletRequestFilter_1ea1a8369ea07b.service(Unknown Source) [na:na]
at $HttpServletRequestHandler_1ea1a8369ea081.service(Unknown Source) [na:na]
at org.tynamo.security.services.impl.SecurityConfiguration$1.call(SecurityConfiguration.java:59) [tapestry-security-0.5.1.jar:0.5.1]
at org.tynamo.security.services.impl.SecurityConfiguration$1.call(SecurityConfiguration.java:54) [tapestry-security-0.5.1.jar:0.5.1]
at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90) [shiro-core-1.2.0.jar:1.2.0]
at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83) [shiro-core-1.2.0.jar:1.2.0]
at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:380) [shiro-core-1.2.0.jar:1.2.0]
at org.tynamo.security.services.impl.SecurityConfiguration.service(SecurityConfiguration.java:54) [tapestry-security-0.5.1.jar:0.5.1]
at $HttpServletRequestFilter_1ea1a8369ea07a.service(Unknown Source) [na:na]
at $HttpServletRequestHandler_1ea1a8369ea081.service(Unknown Source) [na:na]
at org.apache.tapestry5.services.TapestryModule$1.service(TapestryModule.java:852) [tapestry-core-5.3.7.jar:na]
at $HttpServletRequestHandler_1ea1a8369ea081.service(Unknown Source) [na:na]
at $HttpServletRequestHandler_1ea1a8369ea079.service(Unknown Source) [na:na]
at org.apache.tapestry5.TapestryFilter.doFilter(TapestryFilter.java:171) [tapestry-core-5.3.7.jar:na]
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1419) [jetty-servlet-8.1.9.v20130131.jar:8.1.9.v20130131]
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:455) [jetty-servlet-8.1.9.v20130131.jar:8.1.9.v20130131]
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137) [jetty-server-8.1.9.v20130131.jar:8.1.9.v20130131]
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:557) [jetty-security-8.1.9.v20130131.jar:8.1.9.v20130131]
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231) [jetty-server-8.1.9.v20130131.jar:8.1.9.v20130131]
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1075) [jetty-server-8.1.9.v20130131.jar:8.1.9.v20130131]
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:384) [jetty-servlet-8.1.9.v20130131.jar:8.1.9.v20130131]
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193) [jetty-server-8.1.9.v20130131.jar:8.1.9.v20130131]
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1009) [jetty-server-8.1.9.v20130131.jar:8.1.9.v20130131]
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135) [jetty-server-8.1.9.v20130131.jar:8.1.9.v20130131]
at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:255) [jetty-server-8.1.9.v20130131.jar:8.1.9.v20130131]
at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:154) [jetty-server-8.1.9.v20130131.jar:8.1.9.v20130131]
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116) [jetty-server-8.1.9.v20130131.jar:8.1.9.v20130131]
at org.eclipse.jetty.server.handler.StatisticsHandler.handle(StatisticsHandler.java:126) [jetty-server-8.1.9.v20130131.jar:8.1.9.v20130131]
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116) [jetty-server-8.1.9.v20130131.jar:8.1.9.v20130131]
at org.eclipse.jetty.server.Server.handle(Server.java:368) [jetty-server-8.1.9.v20130131.jar:8.1.9.v20130131]
at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:488) [jetty-server-8.1.9.v20130131.jar:8.1.9.v20130131]
at org.eclipse.jetty.server.AbstractHttpConnection.content(AbstractHttpConnection.java:943) [jetty-server-8.1.9.v20130131.jar:8.1.9.v20130131]
at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.content(AbstractHttpConnection.java:1004) [jetty-server-8.1.9.v20130131.jar:8.1.9.v20130131]
at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:861) [jetty-http-8.1.9.v20130131.jar:8.1.9.v20130131]
at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:240) [jetty-http-8.1.9.v20130131.jar:8.1.9.v20130131]
at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82) [jetty-server-8.1.9.v20130131.jar:8.1.9.v20130131]
at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:628) [jetty-io-8.1.9.v20130131.jar:8.1.9.v20130131]
at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:52) [jetty-io-8.1.9.v20130131.jar:8.1.9.v20130131]
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608) [jetty-util-8.1.9.v20130131.jar:8.1.9.v20130131]
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543) [jetty-util-8.1.9.v20130131.jar:8.1.9.v20130131]
at java.lang.Thread.run(Thread.java:722) [na:1.7.0_03]
Regards,
Lidija