[ http://jira.codehaus.org/browse/XFIRE-337?page=comments#action_63796 ]
Dan Diephouse commented on XFIRE-337: ------------------------------------- Ralf - can you try this again with current SVN? I made it so the client can now work with soap 1.2. Just do: Foo client = (Foo) new XFireServiceFactory().create(soap12BindingQName, "url"); I think that also probably fixes (b) too. > Exception Handling of Client API > -------------------------------- > > Key: XFIRE-337 > URL: http://jira.codehaus.org/browse/XFIRE-337 > Project: XFire > Type: Bug > Versions: 1.1-beta-1 > Reporter: Ralf Schaeftlein > Assignee: Dan Diephouse > Fix For: 1.1 > Attachments: BadService.java, BadServiceTest.java, BaseTestCase.java, > IBadService.java, MyException.java, output_junit.txt, output_server.txt, > services.xml, tracelog_request_via_Client_API.txt, > tracelog_via_dynamic_client.txt > > > My Tests runs fine with my testsuite but their seems to be an issue regarding > the client side if custom exceptions are thrown. I throw in two service > methods special exception including messages. > public void badMethod() throws MyException{ > throw new MyException("bad bad"); > } > The messages are transported to the client side inside a > XFireRuntimeException including a XFireFault with the correct message. > [00:37:02] [ERROR] [test.BadServiceTest] > org.codehaus.xfire.XFireRuntimeException: Could not invoke service.. Nested > exception is org.codehaus.xfire.fault.XFireFault: bad bad > org.codehaus.xfire.fault.XFireFault: bad bad > at > org.codehaus.xfire.fault.Soap11FaultSerializer.readMessage(Soap11FaultSerializer.java:31) > at > org.codehaus.xfire.fault.SoapFaultSerializer.readMessage(SoapFaultSerializer.java:28) > at > org.codehaus.xfire.soap.handler.ReadHeadersHandler.checkForFault(ReadHeadersHandler.java:108) > at > org.codehaus.xfire.soap.handler.ReadHeadersHandler.invoke(ReadHeadersHandler.java:67) > at > org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:98) > at org.codehaus.xfire.client.Client.onReceive(Client.java:436) > [00:37:02] [DEBUG] [org.codehaus.xfire.transport.DefaultEndpoint] Received > message to /XFireTest/services/BadService [00:37:02] [DEBUG] > [org.codehaus.xfire.handler.HandlerPipeline] Invoking handler > org.codehaus.xfire.soap.handler.ReadHeadersHandler in phase parse [00:37:02] > [DEBUG] [org.codehaus.xfire.handler.HandlerPipeline] Invoking handler > org.codehaus.xfire.handler.LocateBindingHandler in phase dispatch [00:37:02] > [DEBUG] [org.codehaus.xfire.handler.HandlerPipeline] Invoking handler > org.codehaus.xfire.soap.handler.SoapBodyHandler in phase dispatch [00:37:02] > [DEBUG] [org.codehaus.xfire.handler.HandlerPipeline] Invoking handler > org.codehaus.xfire.soap.handler.SoapActionInHandler in phase dispatch > [00:37:02] [DEBUG] [org.codehaus.xfire.handler.HandlerPipeline] Invoking > handler org.codehaus.xfire.handler.DispatchServiceHandler in phase dispatch > [00:37:02] [DEBUG] [org.codehaus.xfire.handler.HandlerPipeline] Invoking > handler org.codehaus.xfire.xml.handler.ExceptionFaultDetailHandler in phase > user [00:37:02] [DEBUG] [org.codehaus.xfire.handler.HandlerPipeline] Invoking > handler org.codehaus.xfire.soap.handler.ValidateHeadersHandler in phase > pre-invoke [00:37:02] [DEBUG] [org.codehaus.xfire.handler.HandlerPipeline] > Invoking handler org.codehaus.xfire.service.binding.ServiceInvocationHandler > in phase service [00:37:02] [DEBUG] > [org.codehaus.xfire.handler.DefaultFaultHandler] Fault occurred! > org.codehaus.xfire.fault.XFireFault: bad bad > at > org.codehaus.xfire.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:68) > at > org.codehaus.xfire.service.invoker.ObjectInvoker.invoke(ObjectInvoker.java:45) > at > org.codehaus.xfire.service.binding.ServiceInvocationHandler.sendMessage(ServiceInvocationHandler.java:260) > at > org.codehaus.xfire.service.binding.ServiceInvocationHandler$1.run(ServiceInvocationHandler.java:85) > at > org.codehaus.xfire.service.binding.ServiceInvocationHandler.execute(ServiceInvocationHandler.java:132) > at > org.codehaus.xfire.service.binding.ServiceInvocationHandler.invoke(ServiceInvocationHandler.java:107) > at > org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:98) > at > org.codehaus.xfire.transport.DefaultEndpoint.onReceive(DefaultEndpoint.java:60) > at > org.codehaus.xfire.transport.AbstractChannel.receive(AbstractChannel.java:38) > at > org.codehaus.xfire.transport.http.XFireServletController.invoke(XFireServletController.java:287) > at > org.codehaus.xfire.transport.http.XFireServletController.doService(XFireServletController.java:146) > at > org.codehaus.xfire.transport.http.XFireServlet.doPost(XFireServlet.java:110) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:709) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) > at > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252) > at > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) > at > org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213) > at > org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178) > at > org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126) > at > org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105) > at > org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107) > at > org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148) > at > org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:868) > at > org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:663) > at > org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527) > at > org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80) > at > org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684) > at java.lang.Thread.run(Thread.java:595) > Caused by: test.MyException: bad bad > at test.BadService.badMethod(BadService.java:15) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) > at java.lang.reflect.Method.invoke(Method.java:585) > at > org.codehaus.xfire.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:52) > ... 27 more > [00:37:02] [DEBUG] [org.codehaus.xfire.handler.HandlerPipeline] Invoking > handler org.codehaus.xfire.soap.handler.FaultSoapSerializerHandler in phase > post-invoke [00:37:02] [DEBUG] [org.codehaus.xfire.handler.HandlerPipeline] > Invoking handler org.codehaus.xfire.handler.CustomFaultHandler in phase user > [00:37:02] [DEBUG] [org.codehaus.xfire.handler.HandlerPipeline] Invoking > handler > org.codehaus.xfire.transport.http.XFireServletController$FaultResponseCodeHandler > in phase transport [00:37:02] [DEBUG] > [org.codehaus.xfire.handler.HandlerPipeline] Invoking handler > org.codehaus.xfire.fault.FaultSender in phase send > What me wonders > is the last classes of the stacktrace: Soap11FaultSerializer. The services > had to use Soap 1.2 as defined in the services.xml > <service> > <!-- The service name --> > <name>BadService</name> > <!-- The default namespace for the service --> > <namespace>urn:BadService</namespace> > <bindings> > <!-- Adds a SOAP 1.2 bidning --> > <soap12Binding > transport="http://www.w3.org/2003/05/soap/bindings/HTTP/"/> > </bindings> > <!-- wrapped, document, or rpc. --> > <style>wrapped</style> > <!-- Document or RPC? --> > <use>literal</use> > <!-- The class for the service --> > <serviceClass>test.IBadService</serviceClass> > > <serviceFactory>org.codehaus.xfire.service.binding.ObjectServiceFactory</serviceFactory> > <implementationClass>test.BadService</implementationClass> > </service> > I sniffed the incoming messages which should every time be the same: > ----- using my own webservice client ------------- > <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" > xmlns:xsd="http://www.w3.org/2001/XMLSchema" > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> > <soap:Body> > <soap:Fault> > <soap:Code> > <soap:Value>soap:Sender</soap:Value> > </soap:Code> > <soap:Reason> > <soap:Text>bad bad</soap:Text> > </soap:Reason> > <soap:Detail> > <MyException xmlns="urn:BadService"/> > </soap:Detail> > </soap:Fault> > </soap:Body> > </soap:Envelope> > ------ using the xfire client --------- > <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" > xmlns:xsd="http://www.w3.org/2001/XMLSchema" > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> > <soap:Body> > <soap:Fault> > <faultcode>soap:Client</faultcode> > <faultstring>bad bad</faultstring> > <detail> > <MyException xmlns="urn:BadService"/> > </detail> > </soap:Fault> > </soap:Body> > </soap:Envelope> -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://jira.codehaus.org/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira