Java 创建和使用池客户端存根时ServiceClient.cleanupTransport()的axis2 NullPointerException
我使用axis2 1.5.4生成存根客户端以发送soap消息,因为我知道axis2不是线程安全的,所以我使用一个池来存储存根实例。每个线程将在使用前从池中借用存根对象,并在使用后将其返回到池中。但是,当通信量很大(400个线程)时,总会有一些NPE异常,看起来虽然实例已经返回到池中,但它仍然被其他线程使用。异常stacktrace如下所示:Java 创建和使用池客户端存根时ServiceClient.cleanupTransport()的axis2 NullPointerException,java,multithreading,axis2,Java,Multithreading,Axis2,我使用axis2 1.5.4生成存根客户端以发送soap消息,因为我知道axis2不是线程安全的,所以我使用一个池来存储存根实例。每个线程将在使用前从池中借用存根对象,并在使用后将其返回到池中。但是,当通信量很大(400个线程)时,总会有一些NPE异常,看起来虽然实例已经返回到池中,但它仍然被其他线程使用。异常stacktrace如下所示: java.lang.NullPointerException: null at org.apache.axis2.client.Servic
java.lang.NullPointerException: null
at org.apache.axis2.client.ServiceClient.cleanupTransport(ServiceClient.java:824)
at com.cmcc.aus.msgadpter.soap.security.SecurityClient.checkToken(SecurityClient.java:355)
at com.cmcc.aus.service.esb.VerifyEaCallingTokenSvc.verifyEaCallingToken(VerifyEaCallingTokenSvc.java:81)
at com.cmcc.aus.msgadpter.rest.VerifyEaCallingTokenRestInterface.postVerifyEaCallingToken(VerifyEaCallingTokenRestInterface.java:38)
public SecurityStub(java.lang.String targetEndpoint) throws org.apache.axis2.AxisFault {
this(null,targetEndpoint);
Options options = this._getServiceClient().getOptions();
options.setTimeOutInMilliSeconds(60000);
options.setProperty(HTTPConstants.REUSE_HTTP_CLIENT, Boolean.TRUE);
MultiThreadedHttpConnectionManager conmgr = new MultiThreadedHttpConnectionManager();
conmgr.getParams().setDefaultMaxConnectionsPerHost(AusConstants.SECURITY_CLIENT_MAX_CONNECTION_NUM_PER_HOST);
conmgr.getParams().setMaxTotalConnections(AusConstants.SECURITY_CLIENT_MAX_CONNECTION_NUM);
HttpClient client = new HttpClient(conmgr);
options.setProperty(HTTPConstants.CACHED_HTTP_CLIENT, client);
}
我们在创建存根时也使用了缓存http连接,存根客户端代码如下:
java.lang.NullPointerException: null
at org.apache.axis2.client.ServiceClient.cleanupTransport(ServiceClient.java:824)
at com.cmcc.aus.msgadpter.soap.security.SecurityClient.checkToken(SecurityClient.java:355)
at com.cmcc.aus.service.esb.VerifyEaCallingTokenSvc.verifyEaCallingToken(VerifyEaCallingTokenSvc.java:81)
at com.cmcc.aus.msgadpter.rest.VerifyEaCallingTokenRestInterface.postVerifyEaCallingToken(VerifyEaCallingTokenRestInterface.java:38)
public SecurityStub(java.lang.String targetEndpoint) throws org.apache.axis2.AxisFault {
this(null,targetEndpoint);
Options options = this._getServiceClient().getOptions();
options.setTimeOutInMilliSeconds(60000);
options.setProperty(HTTPConstants.REUSE_HTTP_CLIENT, Boolean.TRUE);
MultiThreadedHttpConnectionManager conmgr = new MultiThreadedHttpConnectionManager();
conmgr.getParams().setDefaultMaxConnectionsPerHost(AusConstants.SECURITY_CLIENT_MAX_CONNECTION_NUM_PER_HOST);
conmgr.getParams().setMaxTotalConnections(AusConstants.SECURITY_CLIENT_MAX_CONNECTION_NUM);
HttpClient client = new HttpClient(conmgr);
options.setProperty(HTTPConstants.CACHED_HTTP_CLIENT, client);
}
谁能给我一个解决方案?提前谢谢 通过比较该分支和该类的分支,可以发现1.6版本说明了这一点。因此,一个可能的解决方案可能是升级