多次使用axis2调用webservice后,报连接超时错误

来源:互联网 发布:javascript 模块化 编辑:程序博客网 时间:2024/06/10 07:15

使用Axis2d的RPCServiceClient调用webservice,连续调用几次web服务后,后台报错,如下所示:

org.apache.commons.httpclient.ConnectionPoolTimeoutException: Timeout waiting for connectionat org.apache.commons.httpclient.MultiThreadedHttpConnectionManager.doGetConnection(MultiThreadedHttpConnectionManager.java:497)at org.apache.commons.httpclient.MultiThreadedHttpConnectionManager.getConnectionWithTimeout(MultiThreadedHttpConnectionManager.java:416)at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:153)at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397)at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:346)at org.apache.axis2.transport.http.AbstractHTTPSender.executeMethod(AbstractHTTPSender.java:542)at org.apache.axis2.transport.http.HTTPSender.sendViaPost(HTTPSender.java:199)at org.apache.axis2.transport.http.HTTPSender.send(HTTPSender.java:76)at org.apache.axis2.transport.http.CommonsHTTPTransportSender.writeMessageWithCommons(CommonsHTTPTransportSender.java:400)at org.apache.axis2.transport.http.CommonsHTTPTransportSender.invoke(CommonsHTTPTransportSender.java:225)at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:435)at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:402)at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:229)at org.apache.axis2.client.OperationClient.execute(OperationClient.java:165)at org.apache.axis2.client.ServiceClient.sendReceive(ServiceClient.java:540)at org.apache.axis2.client.ServiceClient.sendReceive(ServiceClient.java:521)at com.res.rc.client.RPCClient.callService(RPCClient.java:282)at com.res.rc.handlers.service.ServiceListHandler.doWebServiceAndReturn(ServiceListHandler.java:337)at com.res.rc.handlers.service.ServiceListHandler.process(ServiceListHandler.java:126)at com.res.framework.handler.OnlineHandler.handleRequest(Unknown Source)at com.res.framework.servlet.GenericFrameworkServlet.doService(Unknown Source)at com.res.framework.servlet.GenericFrameworkServlet.doPost(Unknown Source)at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)at com.res.portal.init.SetCharacterEncodingFilter.doFilter(Unknown Source)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)at java.lang.Thread.run(Thread.java:619)org.apache.axis2.AxisFault: Timeout waiting for connectionat org.apache.axis2.AxisFault.makeFault(AxisFault.java:430)at org.apache.axis2.transport.http.HTTPSender.sendViaPost(HTTPSender.java:203)at org.apache.axis2.transport.http.HTTPSender.send(HTTPSender.java:76)at org.apache.axis2.transport.http.CommonsHTTPTransportSender.writeMessageWithCommons(CommonsHTTPTransportSender.java:400)at org.apache.axis2.transport.http.CommonsHTTPTransportSender.invoke(CommonsHTTPTransportSender.java:225)at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:435)at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:402)at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:229)at org.apache.axis2.client.OperationClient.execute(OperationClient.java:165)at org.apache.axis2.client.ServiceClient.sendReceive(ServiceClient.java:540)at org.apache.axis2.client.ServiceClient.sendReceive(ServiceClient.java:521)at com.res.rc.client.RPCClient.callService(RPCClient.java:282)at com.res.rc.handlers.service.ServiceListHandler.doWebServiceAndReturn(ServiceListHandler.java:337)at com.res.rc.handlers.service.ServiceListHandler.process(ServiceListHandler.java:126)at com.res.framework.handler.OnlineHandler.handleRequest(Unknown Source)at com.res.framework.servlet.GenericFrameworkServlet.doService(Unknown Source)at com.res.framework.servlet.GenericFrameworkServlet.doPost(Unknown Source)at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)at com.res.portal.init.SetCharacterEncodingFilter.doFilter(Unknown Source)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)at java.lang.Thread.run(Thread.java:619)

解决办法:

try{    serviceClient = new RPCServiceClient ();    Options options = serviceClient.getOptions();    //  指定调用WebService的URL    EndpointReference targetEPR = new EndpointReference(wsURL);    options.setTo(targetEPR);    options.setManageSession(true);     options.setProperty(HTTPConstants.REUSE_HTTP_CLIENT,true);     //指定某调用方法的参数值     Object[] opAddEntryArgs = inParams;     Class[] classes = outParamClass;    //  指定要调用的getGreeting方法及WSDL文件的命名空间      QName opAddEntry = new QName(nameSpace, methodName);     Object[] result=serviceClient.invokeBlocking(opAddEntry, opAddEntryArgs, classes);     serviceClient.cleanupTransport(); } catch (AxisFault e) {    e.printStackTrace(); } catch (Exception e)  {    e.printStackTrace(); }


上述代码中的

options.setManageSession(true); options.setProperty(HTTPConstants.REUSE_HTTP_CLIENT,true); serviceClient.cleanupTransport();

可以解决多次调用webservice后的连接超时异常
该错误参照apache官网:

https://issues.apache.org/jira/browse/AXIS2-4797 

转载:http://www.itkeyword.com/doc/4295590002354076696/class-apache-object

0 0