Hi, 

You can just set it back to the exchange:

message.getExchange().set(Exception.class, soapFaultException);

Your interceptor should be registered somewhere on beginning of the outbound 
chain, before exception will be marshalled to SOAP fault.

Regards,
Andrei.

> -----Original Message-----
> From: Mandy Warren [mailto:[email protected]]
> Sent: Freitag, 20. September 2013 16:37
> To: [email protected]
> Subject: Re: How to handle exceptions from a SOAP webservice in a single
> point
> 
> Thanks Andrei,
> 
> just one thing, now I have the new fault how do I return it? The
> handleMessage(SoapMessage message) method returns a void so do I just
> throw the new SOAPFaultException or if not, how do I set the new fault in
> the message param?
> 
> Sent from a mobile device
> 
> On 20 Sep 2013, at 13:46, Andrei Shakirin <[email protected]> wrote:
> 
> > Hi,
> >
> > Regarding the first question you can do something like:
> >
> >            fault = (SOAPFactory.newInstance()).createFault();
> >            fault.setFaultString(BUSINESS_FAULT_STRING);
> >            String errorString = businessException.getMessage();
> >            try {
> >                // 2. Parse exception string and add it as SOAPFault Details
> >                Document faultDoc = builder.parse(new ByteArrayInputStream(
> >                        errorString.getBytes()));
> >                Detail detail = fault.addDetail();
> >                Document owner = detail.getOwnerDocument();
> >                Node details =
> owner.importNode(faultDoc.getDocumentElement(), true);
> >                detail.appendChild(details);
> >            } catch (SAXException e) {
> >                // 3. If exception string is not XML, set is as fault string
> >                fault.setFaultString(errorString);
> >            }
> >            return new SOAPFaultException(fault);
> >
> >
> > Regards,
> > Andrei.
> >
> >> -----Original Message-----
> >> From: Mandy Warren [mailto:[email protected]]
> >> Sent: Donnerstag, 19. September 2013 23:39
> >> To: [email protected]
> >> Subject: Re: How to handle exceptions from a SOAP webservice in a
> >> single point
> >>
> >> Many thanks again for such a fast reply! So I have written an
> >> AbstractSoapInterceptor and managed to retrieve the exception from
> >> the message via
> >>
> >> Exchange exchange = message.getExchange;
> >>
> >> exchange.get(Exception.class);
> >>
> >> Pls can you explain how I then create a Fault with the info I want
> >> and send it back?
> >>
> >> Also because I want to use local transport I was looking at using
> >> SOAPHandlers instead of in interceptors to pull out some header info
> >> I need, is there a way to get / change the exception info from the
> >> handler instead of via an interceptor?
> >>
> >> Many thanks
> >>
> >> Sent from a mobile device
> >>
> >> On 19 Sep 2013, at 22:01, Sergey Beryozkin <[email protected]>
> wrote:
> >>
> >>> Hi
> >>> On 19/09/13 21:56, Mandy Warren wrote:
> >>>> Hi,
> >>>>
> >>>> I would like to handle all exceptions thrown by my webservice in a
> >>>> single point so I can create Faults with specific codes / strings
> >>>> based on info in the exception. When using JAX-RS I can do this
> >>>> very neatly via an Exception Mapper (and then convert to a REST
> >>>> response) but there doesn't seem to be an equivalent for JAX-WS..
> >>>>
> >>>> Is there a way to handle the exceptions before they are turned into
> >>>> SOAP Faults?
> >>> See
> >>>
> >>> http://cxf.547215.n5.nabble.com/Implementing-smarter-
> >> RuntimeException-
> >>> handling-for-JAX-WS-service-tt5734264.html
> >>>
> >>> HTH
> >>> Sergey
> >>>> Many thanks
> >>>> Mandy
> >>>

Reply via email to