Hi everyone,
occasionally, when processing a client request takes too long time, the client
runs into a timeout condition and closes the connection. When the Axis2 web
service later tries to send the request response, the following kind of
exception occurs on the server:
09:03:50,932 ERROR [AxisEngine]
org.apache.axis2.AxisFault
at org.apache.axis2.AxisFault.makeFault(AxisFault.java:430)
at
org.apache.axis2.transport.http.SOAPMessageFormatter.writeTo(SOAPMessageFormatter.java:83)
at
org.apache.axis2.transport.http.CommonsHTTPTransportSender.sendUsingOutputStream(CommonsHTTPTransportSender.java:358)
[snip]
at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:598)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:619)
Caused by: com.ctc.wstx.exc.WstxIOException: null
at com.ctc.wstx.sw.BaseStreamWriter.flush(BaseStreamWriter.java:313)
at
org.apache.axiom.om.impl.MTOMXMLStreamWriter.flush(MTOMXMLStreamWriter.java:168)
at
org.apache.axiom.om.impl.llom.OMNodeImpl.serializeAndConsume(OMNodeImpl.java:487)
at
org.apache.axis2.transport.http.SOAPMessageFormatter.writeTo(SOAPMessageFormatter.java:79)
... 30 more
Caused by: ClientAbortException: java.net.SocketException: Software caused
connection abort: socket write error
at
org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:348)
at org.apache.catalina.connector.OutputBuffer.flush(OutputBuffer.java:314)
at
org.apache.catalina.connector.CoyoteOutputStream.flush(CoyoteOutputStream.java:98)
at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:124)
at com.ctc.wstx.io.UTF8Writer.flush(UTF8Writer.java:99)
at com.ctc.wstx.sw.BufferingXmlWriter.flush(BufferingXmlWriter.java:214)
at com.ctc.wstx.sw.BaseStreamWriter.flush(BaseStreamWriter.java:311)
... 33 more
Caused by: java.net.SocketException: Software caused connection abort: socket
write error
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
at
org.apache.coyote.http11.InternalOutputBuffer.realWriteBytes(InternalOutputBuffer.java:724)
at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:449)
at
org.apache.coyote.http11.InternalOutputBuffer.flush(InternalOutputBuffer.java:299)
at
org.apache.coyote.http11.Http11Processor.action(Http11Processor.java:950)
at org.apache.coyote.Response.action(Response.java:186)
at
org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:343)
... 39 more
Unfortunately, this kind of exception does not provide any information about
which request was unable to complete in time.
In our web service we have some further information like a Request Context
which has info about request type, user, a context-Id, ip-address, etc., and we
would like to have that info printed somewhere in the logs so that we can
identify the requests or circumstances under which the service is prone to run
out of time. Now, that exception occurs about at the end of processing, at
least, beyond our web service implementation code, and also outside the
compiled Axis2-generated stub classes.
Is there an option of registering a particular handler that could print some
more log information at that very late point in processing? I have looked
through axis2.xml and into the phase definitions but I don't have an idea where
to add a handler or if this is possible at all.
I would appreciate any feedback and thoughts on this.
We are currently using Axis2 1.5.1 (Java) deployed in a JBoss 5.1.0 under
Windows 7 (but I don't think this matters).
Thanks,
-Rainer