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