You can give this a try, but a caveat in that I've never tried this so I don't 
know what the resulting soap message looks like:

If you set a property on the endpoint like:
<jaxws:properties>
    <entry key="faultStackTraceEnabled" value="true" />
</jaxws:properties>

the the SOAP out interceptors will stick a stack trace into the fault.   Not 
exactly sure what that ends up looking like.

Dan



On Fri February 12 2010 5:58:05 pm kiffin wrote:
> That response message was from running a test using the CXF stack. The
> message below is from the Sun stack running the same test. We need to do
> some post-processing on service exception and need to know the root cause
> of that exception.
> 
> Thanks,
> Kiffin
> 
> <?xml version="1.0" standalone="no"?>
> <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/";>
>     <S:Body>
>         <ns2:Fault xmlns:ns2="http://schemas.xmlsoap.org/soap/envelope/";
> xmlns:ns3="http://www.w3.org/2003/05/soap-envelope";>
>             <faultcode>
>                 ns2:Server
>             </faultcode>
>             <faultstring>
>                 java.lang.RuntimeException: Mock up exception
>             </faultstring>
>             <detail>
>                 <ns2:exception xmlns:ns2="http://jax-ws.dev.java.net/";
> class="com.expd.arch.service.ServiceException" note="To disable this
> feature, set com.sun.xml.ws.fault.SOAPFaultBuilder.disableCaptureStackTrace
> system property to false">
>                     <message>
>                         java.lang.RuntimeException: Mock up exception
>                     </message>
>                     <ns2:stackTrace>
>                         <ns2:frame
> class="com.expd.arch.service.ServiceException" file="ServiceException.java"
> line="101" method="wrap"/>
>                         <ns2:frame
> class="com.expd.service.calculation.impl.CalculationService"
> file="CalculationService.java" line="134" method="throwExceptionInMethod"/>
>                         <ns2:frame
> class="sun.reflect.NativeMethodAccessorImpl"
> file="NativeMethodAccessorImpl.java" line="native" method="invoke0"/>
>                         <ns2:frame
> class="sun.reflect.NativeMethodAccessorImpl"
> file="NativeMethodAccessorImpl.java" line="39" method="invoke"/>
>                         <ns2:frame
> class="sun.reflect.DelegatingMethodAccessorImpl"
> file="DelegatingMethodAccessorImpl.java" line="25" method="invoke"/>
>                         <ns2:frame class="java.lang.reflect.Method"
> file="Method.java" line="597" method="invoke"/>
>                         <ns2:frame
> class="com.sun.xml.ws.api.server.InstanceResolver$1"
> file="InstanceResolver.java" line="246" method="invoke"/>
>                         <ns2:frame
> class="com.sun.xml.ws.server.InvokerTube$2" file="InvokerTube.java"
> line="146" method="invoke"/>
>                         <ns2:frame
> class="com.sun.xml.ws.server.sei.EndpointMethodHandler"
> file="EndpointMethodHandler.java" line="257" method="invoke"/>
>                         <ns2:frame
> class="com.sun.xml.ws.server.sei.SEIInvokerTube" file="SEIInvokerTube.java"
> line="93" method="processRequest"/>
>                         <ns2:frame class="com.sun.xml.ws.api.pipe.Fiber"
> file="Fiber.java" line="598" method="__doRun"/>
>                         <ns2:frame class="com.sun.xml.ws.api.pipe.Fiber"
> file="Fiber.java" line="557" method="_doRun"/>
>                         <ns2:frame class="com.sun.xml.ws.api.pipe.Fiber"
> file="Fiber.java" line="542" method="doRun"/>
>                         <ns2:frame class="com.sun.xml.ws.api.pipe.Fiber"
> file="Fiber.java" line="439" method="runSync"/>
>                         <ns2:frame
> class="com.sun.xml.ws.server.WSEndpointImpl$2" file="WSEndpointImpl.java"
> line="243" method="process"/>
>                         <ns2:frame
> class="com.sun.xml.ws.transport.http.HttpAdapter$HttpToolkit"
> file="HttpAdapter.java" line="444" method="handle"/>
>                         <ns2:frame
> class="com.sun.xml.ws.transport.http.HttpAdapter" file="HttpAdapter.java"
> line="244" method="handle"/>
>                         <ns2:frame
> class="com.sun.xml.ws.transport.http.server.WSHttpHandler"
> file="WSHttpHandler.java" line="106" method="handleExchange"/>
>                         <ns2:frame
> class="com.sun.xml.ws.transport.http.server.WSHttpHandler"
> file="WSHttpHandler.java" line="91" method="handle"/>
>                         <ns2:frame
> class="com.sun.net.httpserver.Filter$Chain" file="Filter.java" line="65"
> method="doFilter"/>
>                         <ns2:frame class="sun.net.httpserver.AuthFilter"
> file="AuthFilter.java" line="65" method="doFilter"/>
>                         <ns2:frame
> class="com.sun.net.httpserver.Filter$Chain" file="Filter.java" line="68"
> method="doFilter"/>
>                         <ns2:frame
> class="sun.net.httpserver.ServerImpl$Exchange$LinkHandler"
> file="ServerImpl.java" line="555" method="handle"/>
>                         <ns2:frame
> class="com.sun.net.httpserver.Filter$Chain" file="Filter.java" line="65"
> method="doFilter"/>
>                         <ns2:frame
> class="sun.net.httpserver.ServerImpl$Exchange" file="ServerImpl.java"
> line="527" method="run"/>
>                         <ns2:frame
> class="java.util.concurrent.ThreadPoolExecutor$Worker"
> file="ThreadPoolExecutor.java" line="886" method="runTask"/>
>                         <ns2:frame
> class="java.util.concurrent.ThreadPoolExecutor$Worker"
> file="ThreadPoolExecutor.java" line="908" method="run"/>
>                         <ns2:frame class="java.lang.Thread"
> file="Thread.java" line="619" method="run"/>
>                     </ns2:stackTrace>
>                     <ns2:cause class="java.lang.RuntimeException" note="To
> disable this feature, set
> com.sun.xml.ws.fault.SOAPFaultBuilder.disableCaptureStackTrace system
> property to false">
>                         <message>
>                             Mock up exception
>                         </message>
>                         <ns2:stackTrace>
>                             <ns2:frame
> class="com.expd.service.calculation.impl.CalculationService"
> file="CalculationService.java" line="126" method="throwRuntimeException"/>
>                             <ns2:frame
> class="com.expd.service.calculation.impl.CalculationService"
> file="CalculationService.java" line="132" method="throwExceptionInMethod"/>
>                             <ns2:frame
> class="sun.reflect.NativeMethodAccessorImpl"
> file="NativeMethodAccessorImpl.java" line="native" method="invoke0"/>
>                             <ns2:frame
> class="sun.reflect.NativeMethodAccessorImpl"
> file="NativeMethodAccessorImpl.java" line="39" method="invoke"/>
>                             <ns2:frame
> class="sun.reflect.DelegatingMethodAccessorImpl"
> file="DelegatingMethodAccessorImpl.java" line="25" method="invoke"/>
>                             <ns2:frame class="java.lang.reflect.Method"
> file="Method.java" line="597" method="invoke"/>
>                             <ns2:frame
> class="com.sun.xml.ws.api.server.InstanceResolver$1"
> file="InstanceResolver.java" line="246" method="invoke"/>
>                             <ns2:frame
> class="com.sun.xml.ws.server.InvokerTube$2" file="InvokerTube.java"
> line="146" method="invoke"/>
>                             <ns2:frame
> class="com.sun.xml.ws.server.sei.EndpointMethodHandler"
> file="EndpointMethodHandler.java" line="257" method="invoke"/>
>                             <ns2:frame
> class="com.sun.xml.ws.server.sei.SEIInvokerTube" file="SEIInvokerTube.java"
> line="93" method="processRequest"/>
>                             <ns2:frame
> class="com.sun.xml.ws.api.pipe.Fiber" file="Fiber.java" line="598"
> method="__doRun"/>
>                             <ns2:frame
> class="com.sun.xml.ws.api.pipe.Fiber" file="Fiber.java" line="557"
> method="_doRun"/>
>                             <ns2:frame
> class="com.sun.xml.ws.api.pipe.Fiber" file="Fiber.java" line="542"
> method="doRun"/>
>                             <ns2:frame
> class="com.sun.xml.ws.api.pipe.Fiber" file="Fiber.java" line="439"
> method="runSync"/>
>                             <ns2:frame
> class="com.sun.xml.ws.server.WSEndpointImpl$2" file="WSEndpointImpl.java"
> line="243" method="process"/>
>                             <ns2:frame
> class="com.sun.xml.ws.transport.http.HttpAdapter$HttpToolkit"
> file="HttpAdapter.java" line="444" method="handle"/>
>                             <ns2:frame
> class="com.sun.xml.ws.transport.http.HttpAdapter" file="HttpAdapter.java"
> line="244" method="handle"/>
>                             <ns2:frame
> class="com.sun.xml.ws.transport.http.server.WSHttpHandler"
> file="WSHttpHandler.java" line="106" method="handleExchange"/>
>                             <ns2:frame
> class="com.sun.xml.ws.transport.http.server.WSHttpHandler"
> file="WSHttpHandler.java" line="91" method="handle"/>
>                             <ns2:frame
> class="com.sun.net.httpserver.Filter$Chain" file="Filter.java" line="65"
> method="doFilter"/>
>                             <ns2:frame
> class="sun.net.httpserver.AuthFilter" file="AuthFilter.java" line="65"
> method="doFilter"/>
>                             <ns2:frame
> class="com.sun.net.httpserver.Filter$Chain" file="Filter.java" line="68"
> method="doFilter"/>
>                             <ns2:frame
> class="sun.net.httpserver.ServerImpl$Exchange$LinkHandler"
> file="ServerImpl.java" line="555" method="handle"/>
>                             <ns2:frame
> class="com.sun.net.httpserver.Filter$Chain" file="Filter.java" line="65"
> method="doFilter"/>
>                             <ns2:frame
> class="sun.net.httpserver.ServerImpl$Exchange" file="ServerImpl.java"
> line="527" method="run"/>
>                             <ns2:frame
> class="java.util.concurrent.ThreadPoolExecutor$Worker"
> file="ThreadPoolExecutor.java" line="886" method="runTask"/>
>                             <ns2:frame
> class="java.util.concurrent.ThreadPoolExecutor$Worker"
> file="ThreadPoolExecutor.java" line="908" method="run"/>
>                             <ns2:frame class="java.lang.Thread"
> file="Thread.java" line="619" method="run"/>
>                         </ns2:stackTrace>
>                     </ns2:cause>
>                 </ns2:exception>
>             </detail>
>         </ns2:Fault>
>     </S:Body>
> </S:Envelope>
> 
> dkulp wrote:
> > Per spec, the "faultstring" should be the result of
> > exception.getMessage().
> > Thus, we output whatever that returns.   Is there any way you can look at
> > the
> > sun generated exceptions or something to see if they are doing something
> > funky
> > with the getMessage() call?
> > 
> > Is the sample below from the CXF test or the Sun test?
> > 
> > Dan
> > 
> > On Fri February 12 2010 5:26:51 pm kiffin wrote:
> >> I have another question on soap fault. I could see the root cause
> >> returning
> >> from the soap fault from my Sun JAX-WS service,  but I am not seeing it
> >> in
> >> the CXF implementation. Is there a way for CXF to return the root cause
> >> of
> >> the soap fault to a client?  Here's the example response from my test.
> >> 
> >> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/";>
> >> 
> >>     <soap:Header/>
> >>     <soap:Body>
> >>     
> >>         <soap:Fault>
> >>         
> >>             <faultcode>
> >>             
> >>                 soap:Server
> >>             
> >>             </faultcode>
> >>             <faultstring>
> >>             
> >>                 java.lang.RuntimeException: Mock up exception
> >>             
> >>             </faultstring>
> >>             <detail>
> >>             
> >>                 <ns1:ServiceException
> >> 
> >> xmlns:ns1="urn:expd.com:service:calculation"/>
> >> 
> >>             </detail>
> >>         
> >>         </soap:Fault>
> >>     
> >>     </soap:Body>
> >> 
> >> </soap:Envelope>
> >> 
> >> Thanks,
> >> Kiffin
> >> 
> >> dkulp wrote:
> >> > On Fri February 12 2010 3:06:52 pm kiffin wrote:
> >> >> Hi. I am porting a Sun JAX-WS service to CXF. Sun has a system
> >> 
> >> property
> >> 
> >> >> - com.sun.xml.ws.transport.http.client.HttpTransportPipe.dum - which
> >> >> dumps the request/response message on the console. Does CXF have an
> >> >> equivalent property to dump the request/response message on the
> >> >> console?
> >> > 
> >> > OK.  Didn't know about that specific property.   Sun seems to have
> >> > several properties like that which CXF would respond to, but that one
> >> > isn't one. I'll add it.
> >> > 
> >> > With 2.2.6, you can chose one of:
> >> > 
> >> > Boolean.getBoolean("org.apache.cxf.logging.enabled");
> >> 
> >> Boolean.getBoolean("com.sun.xml.ws.transport.local.LocalTransportPipe.du
> >> m
> >> 
> >> > p");
> >> 
> >> Boolean.getBoolean("com.sun.xml.ws.util.pipe.StandaloneTubeAssembler.dum
> >> 
> >> > p");
> >> > Boolean.getBoolean("com.sun.xml.ws.transport.http.HttpAdapter.dump");
> >> > 
> >> > It wouldn't go to the console.  It would go the java.util.logging, but
> >> 
> >> by
> >> 
> >> > default, that would go to the console.

-- 
Daniel Kulp
[email protected]
http://www.dankulp.com/blog

Reply via email to