camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From tnk <jus...@gmail.com>
Subject Re: Help with nmr, cxf endpoints and fault handling
Date Mon, 01 Oct 2012 06:44:04 GMT
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.

Mime
View raw message