Dear all,

Found the following two or three solutions:

1. instantiate custom JAXB/CXF classes that parse the object to xml. The
only thing is that you have to wrap the object in a class containing
@XmlRootElement, which ends up in the exception, but since the classes write
to a org.w3c.dom.Element it (looks like) you can get its child element and
use that. Sample code (without removing root element from xml):

public void handleFault(Message message) {
        Fault fault = (Fault) message.getContent(Exception.class);
        binding = new
org.apache.cxf.jaxb.JAXBDataBinding(FoutberichtTypeHolder.class);
        org.apache.cxf.jaxb.io.DataWriterImpl writer = new
org.apache.cxf.jaxb.io.DataWriterImpl(binding);
        writer.write(new FoutberichtTypeHolder(foutberichtType), null,
fault.getOrCreateDetail());


2. Hacky: create a document from an xml file and use that:

public void handleFault(Message message) {
        Fault fault = (Fault) message.getContent(Exception.class);
        InputStream inputStream = new
ClassPathResource("fault-details.xml").getInputStream();
        Document document = DOMUtils.createDocumentBuilder().parse(inputStream);
        Node node = XPathAPI.selectSingleNode(document, xpath);
        node.setTextContent(text);
        fault.setDetail(document.getDocumentElement());

3. Don't know if this one works, but it may: create a Fault object as you
want by specifying it in the wsdl, and setting
it using message.setContent(Exception.class, fault).

Best wishes
Marc




--
View this message in context: 
http://cxf.547215.n5.nabble.com/Throwing-a-custom-SOAP-Fault-tp5595222p5597436.html
Sent from the cxf-user mailing list archive at Nabble.com.

Reply via email to