Willem,

here is the code for addSoapFault(exchange, new
CantTalkFault_Exception("Ups", cantTalkFault));

I am using it with cxf PAYLOAD data format.


    public static void addSoapFault(Exchange exchange, Exception
faultException) throws Exception {
        if (!faultException.getClass().isAnnotationPresent(WebFault.class))
{
            throw new IllegalArgumentException("Exception argument should
represent @WebFault");
        }

                Object faultInfo = null;

                try {
                        faultInfo = getFaultInfo(faultException);
                } catch (Exception e) {
            throw new IllegalArgumentException("Exception argument doesn't
have a getFaultInfo method");
                }

                SoapFault soapFault = new 
SoapFault(faultException.getMessage(), new
QName("http://schemas.xmlsoap.org/soap/envelope/";, "Server"));

                if (faultInfo != null) {
                        soapFault.setDetail(marshalDetails(faultException, 
faultInfo));
                }

        exchange.getOut().setBody(soapFault);
        exchange.getOut().setFault(true);
    }

        private static Element marshalDetails(Exception faultException, Object
faultInfo) throws Exception {
                WebFault webFault =
faultException.getClass().getAnnotation(WebFault.class);
                JAXBContext context = 
JAXBContext.newInstance(faultInfo.getClass());
                Element detail = DOMUtils.readXml(new
StringReader("<detail></detail>")).getDocumentElement();
                QName qname = new QName(webFault.targetNamespace(), 
webFault.name());
                JAXBElement jaxbElement = new JAXBElement(qname, 
faultInfo.getClass(),
getFaultInfo(faultException));
                context.createMarshaller().marshal(jaxbElement, detail);
                return detail;
        }

        private static Object getFaultInfo(Exception exception) throws 
Exception {
        Method method = exception.getClass().getMethod("getFaultInfo");
        return method.invoke(exception);
    }



--
View this message in context: 
http://camel.465427.n5.nabble.com/Help-with-nmr-cxf-endpoints-and-fault-handling-tp5719720p5720293.html
Sent from the Camel - Users mailing list archive at Nabble.com.

Reply via email to