Thanks, Daniel. I realized what's was wrong now. CXF indeed throw an WebServiceException, which my code correctly caught and processed. But then, CXF still printed out the strack trace even though my exception handling code didn't intend to print anything. It somehow confused me to think that the exception was not caught by my code at all.
Anyway, the main culprit to my confusion is the fact that the logging of CXF is separated from its exception handling. ________________________________ From: Daniel Kulp <[email protected]> To: [email protected] Cc: Hongyu Zhang <[email protected]> Sent: Friday, January 13, 2012 8:46 AM Subject: Re: Fw: Cannot catch the CXF exception That should definitely be throwing an exception. Any chance you can create a small testcase? What version of CXF? Also, what is the "caused by" exception? Dan On Thursday, January 12, 2012 5:27:10 PM Hongyu Zhang wrote: > Hi there, > > > > I am a newbie of CXF, and I just created a client using wsdl2java. It works > fine until I started to test its exception feature. I shortened the timeout > properties to extremely low (1 ms) to simulate the server time out scene. I > did succeed in getting the timeout exception, but I couldn't catch the > exception as exemplified in the code below > > // start of code > try { > myClient.queryServer(); // query web service > } catch (Exception e) { > System.out.println("Caught exception"); // this has never been run so far > for some reason } > // end of code > > In real life runs, my application always skips the catch section code > completely. It did print out exception message to the standard output, > something like: > > WARNING: Interceptor for > {http://mytestcom.com/}MyService#{http://mytesturl.com/}MyMethod has thrown > exception, unwinding now org.apache.cxf.interceptor.Fault: Could not send > Message. > at > org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInte > rceptor.handleMessage(MessageSenderInterceptor.java:64) at > org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChai > n.java:263) at > org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:533) at > org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:463) > at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:366) > at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:319) > at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:88) > at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:134) > at $Proxy25.MyMethod(Unknown Source) > at com.mytestcom.service....myMethod(MyClient.java:69) > at MyTest.main(MyTest.java:16) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:3 > 9) at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImp > l.java:25) at java.lang.reflect.Method.invoke(Method.java:597) > at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120) > > It seems that the CXF library stores exception in a variable and didn't > interrupt my code, and there was no exception to be caught by my own code. > > My question is whether I can change this behavior to activate a real > exception so my client code can handle it at my own will, e.g., displaying > an elegant message to my user saying that the web server is too slow to > respond. > > Thanks! > > Hongyu -- Daniel Kulp [email protected] - http://dankulp.com/blog Talend Community Coder - http://coders.talend.com
