Invalid use of BasicClientConnManager: connection still allocated

676 views
Skip to first unread message

lidijaldo

unread,
Apr 7, 2014, 4:30:46 AM4/7/14
to sardi...@googlegroups.com
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

Jon Stevens

unread,
Apr 8, 2014, 2:00:20 AM4/8/14
to sardi...@googlegroups.com

On Mon, Apr 7, 2014 at 1:30 AM, lidijaldo <lidij...@gmail.com> wrote:
I'm using sardine-314 in our web project.

Upgrade. Sorry, can't support old versions. Too much work. Latest released version is 5.1.

jon

lidijaldo

unread,
Apr 8, 2014, 4:44:56 AM4/8/14
to sardi...@googlegroups.com


On Tuesday, April 8, 2014 8:00:20 AM UTC+2, Jon Stevens wrote:

Upgrade. Sorry, can't support old versions. Too much work. Latest released version is 5.1.

jon


I understand. I looked into it. It seems I can't do the sardine upgrade right now because it also means upgrading httpclient and that's a major code upgrade.

Thank you anyway.

Regards,
Lidija

Jon Stevens

unread,
Apr 8, 2014, 12:23:09 PM4/8/14
to sardi...@googlegroups.com
Ok, then you're going to have to figure that one out on your own. I'd love to know what the results are when you're done for the mailing list records.

thanks!

jon



--
You received this message because you are subscribed to the Google Groups "sardine" group.
To unsubscribe from this group and stop receiving emails from it, send an email to sardine-dav...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply all
Reply to author
Forward
0 new messages