Search in sources :

Example 1 with ObjectFactory

use of org.w3._2003._05.soap_envelope.ObjectFactory in project camel by apache.

the class Soap12DataFormatAdapter method createFaultFromException.

/**
     * Creates a SOAP fault from the exception and populates the message as well
     * as the detail. The detail object is read from the method getFaultInfo of
     * the throwable if present
     * 
     * @param exception the cause exception
     * @return SOAP fault from given Throwable
     */
@SuppressWarnings("unchecked")
private JAXBElement<Fault> createFaultFromException(final Throwable exception) {
    WebFault webFault = exception.getClass().getAnnotation(WebFault.class);
    if (webFault == null || webFault.targetNamespace() == null) {
        throw new RuntimeException("The exception " + exception.getClass().getName() + " needs to have an WebFault annotation with name and targetNamespace", exception);
    }
    QName name = new QName(webFault.targetNamespace(), webFault.name());
    Object faultObject;
    try {
        Method method = exception.getClass().getMethod("getFaultInfo");
        faultObject = method.invoke(exception);
    } catch (Exception e) {
        throw new RuntimeCamelException("Exception while trying to get fault details", e);
    }
    Fault fault = new Fault();
    Faultcode code = new Faultcode();
    code.setValue(FAULT_CODE_SERVER);
    fault.setCode(code);
    Reasontext text = new Reasontext();
    text.setValue(exception.getMessage());
    text.setLang("en");
    fault.setReason(new Faultreason().withText(text));
    Detail detailEl = new ObjectFactory().createDetail();
    @SuppressWarnings("rawtypes") JAXBElement<?> faultDetailContent = new JAXBElement(name, faultObject.getClass(), faultObject);
    detailEl.getAny().add(faultDetailContent);
    fault.setDetail(detailEl);
    return new ObjectFactory().createFault(fault);
}
Also used : Reasontext(org.w3._2003._05.soap_envelope.Reasontext) QName(javax.xml.namespace.QName) Fault(org.w3._2003._05.soap_envelope.Fault) WebFault(javax.xml.ws.WebFault) Method(java.lang.reflect.Method) JAXBElement(javax.xml.bind.JAXBElement) SOAPException(javax.xml.soap.SOAPException) RuntimeCamelException(org.apache.camel.RuntimeCamelException) IOException(java.io.IOException) SOAPFaultException(javax.xml.ws.soap.SOAPFaultException) WebFault(javax.xml.ws.WebFault) Faultcode(org.w3._2003._05.soap_envelope.Faultcode) ObjectFactory(org.w3._2003._05.soap_envelope.ObjectFactory) RuntimeCamelException(org.apache.camel.RuntimeCamelException) Faultreason(org.w3._2003._05.soap_envelope.Faultreason) Detail(org.w3._2003._05.soap_envelope.Detail)

Aggregations

IOException (java.io.IOException)1 Method (java.lang.reflect.Method)1 JAXBElement (javax.xml.bind.JAXBElement)1 QName (javax.xml.namespace.QName)1 SOAPException (javax.xml.soap.SOAPException)1 WebFault (javax.xml.ws.WebFault)1 SOAPFaultException (javax.xml.ws.soap.SOAPFaultException)1 RuntimeCamelException (org.apache.camel.RuntimeCamelException)1 Detail (org.w3._2003._05.soap_envelope.Detail)1 Fault (org.w3._2003._05.soap_envelope.Fault)1 Faultcode (org.w3._2003._05.soap_envelope.Faultcode)1 Faultreason (org.w3._2003._05.soap_envelope.Faultreason)1 ObjectFactory (org.w3._2003._05.soap_envelope.ObjectFactory)1 Reasontext (org.w3._2003._05.soap_envelope.Reasontext)1