How to catch "Unable to sendViaPost to url"?

12,481

Looking at the stack trace, I don't think you can catch it. Catching it would require that you own code somewhere in the Thread where the exception is being thrown.

Looking at the lowest stack in the trace shows this:

at java.lang.Thread.run(Thread.java:724)

To me this says that the exception is occurring in a thread most likely started by Axis. Because of this you can't catch it and show an error message.

If this is expected behavior, the best you can do is to configure your logging framework not to show INFOs from Axis. Be aware that this may mean you'll also miss more useful error messages as well.

All in all, I would focus on how to solve the "Unable to sendViaPost" from happening rather than suppressing the logging statement.

To answer your comment question: As you can see from the stack trace, the exception is not caught by any client code but is bubbled up to Thread itself. This is the stopping point for an Exception and where it stops. If you were going to catch it you'd have to have code in its call stack (which you don't, since when the thread is created by Axis a new call stack is created for the new thread Axis starts).

Read more here. The only difference in your case is that since the exception is not thrown on the main thread the program doesn't exit, but the thread where the exception occurs is terminated.

To sum it up: You have no code in the call stack and therefore cannot catch the exception. The only other option is to turn of INFO statements for Axis.

Share:
12,481
Danijel
Author by

Danijel

Audio digital signal processing... and all the things around it.

Updated on June 04, 2022

Comments

  • Danijel
    Danijel almost 2 years

    I am running two axis2 services which communicate with each other. On every service startup I get this error:

    2014-02-24 13:02:31,258 [INFO ]           HTTPSender  - Unable to sendViaPost to url[http://127.0.0.1:8081/axis2/services/MYSERVICE1.MYSERVICE1HttpSoap12Endpoint/]
    java.net.ConnectException: Connection refused: connect
    at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:579)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.apache.commons.httpclient.protocol.ReflectionSocketFactory.createSocket(ReflectionSocketFactory.java:140)
    at org.apache.commons.httpclient.protocol.DefaultProtocolSocketFactory.createSocket(DefaultProtocolSocketFactory.java:125)
    at org.apache.commons.httpclient.HttpConnection.open(HttpConnection.java:707)
    at org.apache.commons.httpclient.MultiThreadedHttpConnectionManager$HttpConnectionAdapter.open(MultiThreadedHttpConnectionManager.java:1361)
    at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:387)
    at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171)
    at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397)
    at org.apache.axis2.transport.http.AbstractHTTPSender.executeMethod(AbstractHTTPSender.java:621)
    at org.apache.axis2.transport.http.HTTPSender.sendViaPost(HTTPSender.java:193)
    at org.apache.axis2.transport.http.HTTPSender.send(HTTPSender.java:75)
    at org.apache.axis2.transport.http.CommonsHTTPTransportSender.writeMessageWithCommons(CommonsHTTPTransportSender.java:404)
    at org.apache.axis2.transport.http.CommonsHTTPTransportSender.invoke(CommonsHTTPTransportSender.java:231)
    at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:443)
    at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:406)
    at org.apache.axis2.description.OutInAxisOperationClient$NonBlockingInvocationWorker.run(OutInAxisOperation.java:446)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:724)
    

    Since this error is not important, I would like to catch it and to print some better error message instead of the whole stack trace. Where do I catch this error?

  • Danijel
    Danijel about 10 years
    How do I do that? Have a look at Jason Nichols answer. Thanks.
  • Danijel
    Danijel about 10 years
    Yes, to me it also seems that this is a message thwrown by the Axis, and caught by who? Apache?
  • Jason Nichols
    Jason Nichols about 10 years
    See my response at the end of my answer.
  • Jason Nichols
    Jason Nichols about 10 years
    That will not work. You can't catch an exception unless you have code in the stack where the exception is thrown!
  • Danijel
    Danijel about 10 years
    OK, thanks Jason. Still not convinced 100%, but no more time to loose. Thanks.
  • Jason Nichols
    Jason Nichols about 10 years
    I hear you. If you've got time I invite you to try out the other methods if you want to see for yourself. Good luck!
  • user3374518
    user3374518 about 10 years
    Catching AxisFault is possible in every way. Since it is not the subclass of Exception, you are not able to see it in the stacktrace. The last logical point OutInAxiaOperation throws out AxisFault and moves on to logging the native thread path. Dont get confused between normal Exception & RemoteException.