Hello all,
After a lot of mailing lists/doc/source reading and many tests I can't figure
out how to implement Axis2 client, which uses REUSE_HTTP_CLIENT and
AUTO_RELEASE_CONNECTION.
I'm always getting following Exception "org.apache.axis2.AxisFault: Attempted
read on closed stream."
Here is my simple test case and Exception below. I'm building with Axis2 1.4
and Axis2 1.4.1 - no difference.
==========================================================
MultiThreadedHttpConnectionManager connectionManager = new
MultiThreadedHttpConnectionManager();
HttpConnectionManagerParams connectionManagerParams = new
HttpConnectionManagerParams();
connectionManagerParams.setDefaultMaxConnectionsPerHost(2);
connectionManagerParams.setTcpNoDelay(true);
connectionManagerParams.setStaleCheckingEnabled(true);
connectionManagerParams.setLinger(0);
connectionManager.setParams(connectionManagerParams);
MyHttpClient httpClient = new MyHttpClient(connectionManager);
ConfigurationContext configcontext =
ConfigurationContextFactory.createDefaultConfigurationContext();
configcontext.setThreadPool(new ThreadPool(1, 3));
configcontext.setProperty(HTTPConstants.REUSE_HTTP_CLIENT,
Boolean.TRUE);
configcontext.setProperty(HTTPConstants.CACHED_HTTP_CLIENT,
httpClient);
RPCServiceClient sender = null;
sender = new RPCServiceClient(configcontext, null);
Options options = sender.getOptions();
options.setTo(targetEPR);
options.setTimeOutInMilliSeconds(TIMEOUT);
options.setProperty(HTTPConstants.CHUNKED, Boolean.TRUE);
options.setProperty(HTTPConstants.SO_TIMEOUT, TIMEOUT);
options.setProperty(HTTPConstants.CONNECTION_TIMEOUT, TIMEOUT);
options.setProperty(HTTPConstants.REUSE_HTTP_CLIENT, Boolean.TRUE);
options.setProperty(HTTPConstants.AUTO_RELEASE_CONNECTION, Boolean.TRUE);
QName opName = new QName("http://um.axis2.es.iisd.com", "login");
Object[] args = new Object[] { "*", "*" };
sender.invokeNonBlocking(opName, args, callback);
//OMElement element = sender.invokeBlocking(opName, args);
==========================================================
I'm trying to execute blocking and non blocking requests - the same Exception
occures.
Exception:
org.apache.axis2.AxisFault: Attempted read on closed stream.
at org.apache.axis2.AxisFault.makeFault(AxisFault.java:430)
at org.apache.axis2.builder.SOAPBuilder.processDocument(SOAPBuilder.java:61)
at
org.apache.axis2.transport.TransportUtils.createDocumentElement(TransportUtils.java:164)
at
org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:112)
at
org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:88)
at
org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:353)
at
org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:416)
at
org.apache.axis2.description.OutInAxisOperationClient$NonBlockingInvocationWorker.run(OutInAxisOperation.java:441)
at
edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1061)
at
edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:575)
at java.lang.Thread.run(Unknown Source)
Caused by: java.io.IOException: Attempted read on closed stream.
at
org.apache.commons.httpclient.AutoCloseInputStream.isReadAllowed(AutoCloseInputStream.java:183)
at
org.apache.commons.httpclient.AutoCloseInputStream.read(AutoCloseInputStream.java:107)
at java.io.FilterInputStream.read(Unknown Source)
at java.io.PushbackInputStream.read(Unknown Source)
at org.apache.axis2.builder.BuilderUtil.getCharSetEncoding(BuilderUtil.java:281)
at org.apache.axis2.builder.SOAPBuilder.processDocument(SOAPBuilder.java:48)
.... 9 more
Thank for your help in advance
Paco