axis-java-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Ivan (JIRA)" <j...@apache.org>
Subject [jira] [Updated] (AXIS2-5062) Connection is not released while using JAXWS client API
Date Mon, 06 Jun 2011 15:18:59 GMT

     [ https://issues.apache.org/jira/browse/AXIS2-5062?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Ivan updated AXIS2-5062:
------------------------

    Attachment: AXIS2-5062-Port.patch
                AXIS2-5062-Dispatch.patch

Attach two patch files.

> Connection is not released while using JAXWS client API
> -------------------------------------------------------
>
>                 Key: AXIS2-5062
>                 URL: https://issues.apache.org/jira/browse/AXIS2-5062
>             Project: Axis2
>          Issue Type: Bug
>          Components: jaxws, transports
>    Affects Versions: 1.7.0
>            Reporter: Ivan
>         Attachments: AXIS2-5062-Dispatch.patch, AXIS2-5062-Port.patch
>
>
> 1. Using Dispatch API
> A bit more description for my case, the server side is a simple web service, for the
client side, the codes are something like :
> --->
> Service service = new HelloService();
> Dispatch dispatchJaxb = service.createDispatch(PORT_QNAME, JAXBContext.newInstance(org.test.ObjectFactory.class),
> javax.xml.ws.Service.Mode.PAYLOAD);
> dispatchJaxb.invokeOneWay(new HelloRequest());
> <---
> After adding some code fragments in the finally block of BaseDispatch.invokeOneWay method,
it looks to me work fine.
> --->
> try {
>                 if (requestMsgCtx != null && requestMsgCtx.getAxisMessageContext()
!= null) {
>                     org.apache.axis2.context.MessageContext axisMsgCtx = requestMsgCtx.getAxisMessageContext();
>                     if (axisMsgCtx.getTransportOut() != null && axisMsgCtx.getTransportOut().getSender()
!= null) {
>                         axisMsgCtx.getTransportOut().getSender().cleanup(axisMsgCtx);
>                     }
>                 }
>             } catch (Exception ignore) {
>             }
> <---
> I also googled this issue, and do found a lot of information for the same timeout exception,
also read some related codes
> a. In the HttpSender, there is a method named cleanup, which is used to release the connection,
but it has the precondition to configure the AUTO_RELEASE_CONNECTION. And actually I did not
see other setting configurations in the Axis2 codes, and think that it should be configured
by the users in the Options ? 
> b. Some posts in the mail list recommended to call the getTransport().cleanup() in the
Axis2 specific client codes. And in the testing scenario above, since the standard JAX-WS
API is used, suppose that Axis2 should do this ?
> And very appreciated with any comment ? Thanks.
> 2. I might find another connection leak while using JAXWS API on client side. In the
scenario below :
> For the server side, it requires basic authentication.
> The client codes are something like :
> HelloPort helloPort = (HelloPort)service.getPort(HelloPort.class);
> helloPort.echo("hello");
> The client codes did not set the user name and password by the BindingProvider interface,
so the server return a 404 to the client side, then the method HttpSender.handleResponse will
enter the fourth block :
> private void handleResponse(MessageContext msgContext,
>                                 HttpMethodBase method) throws IOException {
>         int statusCode = method.getStatusCode();
>         log.trace("Handling response - " + statusCode);
>         if (statusCode == HttpStatus.SC_OK) {
>             // Save the HttpMethod so that we can release the connection when cleaning
up
>             msgContext.setProperty(HTTPConstants.HTTP_METHOD, method);
>             processResponse(method, msgContext);
>         } else if (statusCode == HttpStatus.SC_ACCEPTED) {
>         	/* When an HTTP 202 Accepted code has been received, this will be the case of
an execution
>         	 * of an in-only operation. In such a scenario, the HTTP response headers should
be returned,
>         	 * i.e. session cookies. */
>         	obtainHTTPHeaderInformation(method, msgContext);
>         	// Since we don't expect any content with a 202 response, we must release the
connection
>         	method.releaseConnection();
>         } else if (statusCode == HttpStatus.SC_INTERNAL_SERVER_ERROR ||
>                 statusCode == HttpStatus.SC_BAD_REQUEST) {
>             // Save the HttpMethod so that we can release the connection when cleaning
up
>             msgContext.setProperty(HTTPConstants.HTTP_METHOD, method);
>             Header contenttypeHeader =
>                     method.getResponseHeader(HTTPConstants.HEADER_CONTENT_TYPE);
>             String value = null;
>             if (contenttypeHeader != null) {
>                 value = contenttypeHeader.getValue();
>             }
>              OperationContext opContext = msgContext.getOperationContext();
>             if(opContext!=null){
>                 MessageContext inMessageContext =
>                         opContext.getMessageContext(WSDLConstants.MESSAGE_LABEL_IN_VALUE);
>                 if(inMessageContext!=null){
>                     inMessageContext.setProcessingFault(true);
>                 }
>             }
>             if (value != null) {
>                 processResponse(method, msgContext);
>             }
>             if (org.apache.axis2.util.Utils.isClientThreadNonBlockingPropertySet(msgContext))
{
>             	 throw new AxisFault(Messages.getMessage("transportError",
>                          String.valueOf(statusCode),
>                          method.getStatusText()));
>             }
>         } else {
>             throw new AxisFault(Messages.getMessage("transportError",   <--- Running
here
>                                                     String.valueOf(statusCode),
>                                                     method.getStatusText()));
>         }
>     }
> The stack trace is :
> org.apache.axis2.AxisFault: Transport error: 403 Error: Forbidden
> 	at org.apache.axis2.transport.http.HTTPSender.handleResponse(HTTPSender.java:309)
> 	at org.apache.axis2.transport.http.HTTPSender.sendViaPost(HTTPSender.java:194)
> 	at org.apache.axis2.transport.http.HTTPSender.send(HTTPSender.java:75)
> 	at org.apache.axis2.transport.http.CommonsHTTPTransportSender.writeMessageWithCommons(CommonsHTTPTransportSender.java:404)
> 	at org.apache.axis2.transport.http.CommonsHTTPTransportSender.invoke(CommonsHTTPTransportSender.java:231)
> 	at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:443)
> 	at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:406)
> 	at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:229)
> 	at org.apache.axis2.client.OperationClient.execute(OperationClient.java:165)
> 	at org.apache.axis2.jaxws.core.controller.impl.AxisInvocationController.execute(AxisInvocationController.java:578)
> 	at org.apache.axis2.jaxws.core.controller.impl.AxisInvocationController.doInvoke(AxisInvocationController.java:127)
> 	at org.apache.axis2.jaxws.core.controller.impl.InvocationControllerImpl.invoke(InvocationControllerImpl.java:93)
> 	at org.apache.axis2.jaxws.client.proxy.JAXWSProxyHandler.invokeSEIMethod(JAXWSProxyHandler.java:377)
> 	at org.apache.axis2.jaxws.client.proxy.JAXWSProxyHandler.invoke(JAXWSProxyHandler.java:174)
> 	at $Proxy89.helloPort(Unknown Source)
> 	at org.test.HelloServlet.doPost(HelloServlet.java:113)
> 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:595)
> 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:668)
> 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:306)
> 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
> 	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
> 	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161)
> 	at org.apache.geronimo.tomcat.security.SecurityValve.invoke(SecurityValve.java:87)
> 	at org.apache.geronimo.tomcat.security.jacc.JACCSecurityValve.invoke(JACCSecurityValve.java:54)
> 	at org.apache.geronimo.tomcat.GeronimoStandardContext$SystemMethodValve.invoke(GeronimoStandardContext.java:700)
> 	at org.apache.geronimo.tomcat.valve.GeronimoBeforeAfterValve.invoke(GeronimoBeforeAfterValve.java:48)
> 	at org.apache.geronimo.tomcat.valve.ProtectedTargetValve.invoke(ProtectedTargetValve.java:53)
> 	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
> 	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
> 	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:550)
> 	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
> 	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:380)
> 	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:243)
> 	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188)
> 	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:166)
> 	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:288)
> 	at org.apache.geronimo.pool.ThreadPool$1.run(ThreadPool.java:243)
> 	at org.apache.geronimo.pool.ThreadPool$ContextClassLoaderRunnable.run(ThreadPool.java:373)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
> 	at java.lang.Thread.run(Thread.java:662)
> Thanks.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

---------------------------------------------------------------------
To unsubscribe, e-mail: java-dev-unsubscribe@axis.apache.org
For additional commands, e-mail: java-dev-help@axis.apache.org


Mime
View raw message