WSDL2JAVA(使用 XMLBeans 绑定选项)通过 Axis2 1.5.4 生成的存根是线程安全的吗?
实际上,我已经为通过多个线程调用的 Web 服务创建了一个存根。我已经配置了我自己的MultiThreadedHttpConnectionmanager
并设置了,但是我在每次调用后都会HTTPConstants.REUSE_HTTP_CLIENT
看到一些 NullPointerExceptions 。stub._getServiceClient().cleanupTransport
有时线程也会挂起。
同时我注意到在Web Service操作方法中生成的Stub中,在finally块中已经调用了cleanup()。我以后不应该打电话给stub._getServiceClient().cleanupTransport
自己吗?
我的代码:
httpConnMgr = new MultiThreadedHttpConnectionManager();
HttpConnectionManagerParams params = httpConnMgr.getParams();
if (params == null) {
params = new HttpConnectionManagerParams();
}
params.setDefaultMaxConnectionsPerHost(numberOfThreads);
httpConnMgr.setParams(params);
HttpClient httpClient = new HttpClient(httpConnMgr);
service = new Service1Stub(this.endPointAddress);
service._getServiceClient().getOptions()
.setTimeOutInMilliSeconds(this.timeOut);
service._getServiceClient().getOptions()
.setProperty(HTTPConstants.REUSE_HTTP_CLIENT, Boolean.TRUE);
service._getServiceClient().getOptions()
.setProperty(HTTPConstants.AUTO_RELEASE_CONNECTION, Boolean.FALSE);
service._getServiceClient()
.getOptions()
.setProperty(HTTPConstants.SO_TIMEOUT, (int) (this.timeOut));
service._getServiceClient()
.getOptions()
.setProperty(HTTPConstants.CONNECTION_TIMEOUT,
(int) (this.timeOut));
service._getServiceClient().getServiceContext().getConfigurationContext()
.setProperty(HTTPConstants.CACHED_HTTP_CLIENT, httpClient);
同时在生成的存根中,我注意到 cleanUp 已经被调用:
finally {
_messageContext.getTransportOut().getSender().cleanup(_messageContext);
}
任何建议都会很有帮助。谢谢。