:( Am I all alone with this one?? thanks attilav
attilav wrote: > > Hi Everyone, > > I'm experimenting with servicemix(3.3)+camel(2.2)+cxf (rather new to them) > for implementing a WS client. > I have the following code: > > from("direct:remotesender") > //.handleFault() > .onException(SoapFault.class) > //org.apache.cxf.binding.soap.SoapFault > .maximumRedeliveries(0) > .process(new Processor() { > public void process(Exchange exchange) throws > Exception { > log1.info("INBODY > ----------------"+exchange.getIn().getBody(String.class)); > log1.info("INHEAD > ----------------"+exchange.getIn().getHeaders()); > log1.info("OUTBODY > ---------------"+exchange.getOut().getBody(String.class)); > log1.info("OUTHEAD > ---------------"+exchange.getOut().getHeaders()); > log1.info("EXC > -------------------"+exchange.getException()); > log1.info("FAIL > ------------------"+exchange.isFailed()); > log1.info("EXCP > ------------------"+exchange.getProperty(Exchange.EXCEPTION_CAUGHT, > Exception.class)); > SoapFault faultex = > exchange.getProperty(Exchange.EXCEPTION_CAUGHT, SoapFault.class); > log1.info("NODE > ------------------"+faultex.getNode()); > log1.info("REASON > ------------------"+faultex.getReason()); > log1.info("MSG > ------------------"+faultex.getMessage()); > log1.info("DETAIL > ------------------"+faultex.getDetail()); > } > }) > .end() > .process(new Processor() { > public void process(Exchange exchange) throws Exception { > List<Element> outElements = new ArrayList<Element>(); > > outElements.add(exchange.getIn().getBody(org.w3c.dom.Document.class).getDocumentElement()); > CxfPayload<SoapHeader> cxfPayload = new > CxfPayload<SoapHeader>(null, outElements); > exchange.getOut().setBody(cxfPayload); > log1.info("CFXP > VVVVVVVVVVVVVVV"+cxfPayload.toString()); > } > }) > .setHeader("SOAPAction", > constant("http://service.com/fault_ticket")) > .to("cxf:bean:serviceEndpoint") // PAYLOAD mode is set from > spring > .process(new Processor() { > public void process(Exchange exchange) throws Exception { > log1.info("CCFX VVVVVVVVVVVVVVV"); > CxfPayload<SoapHeader> requestPayload = > exchange.getIn().getBody(CxfPayload.class); > List<Element> inElements = requestPayload.getBody(); > exchange.getOut().setBody(inElements.get(0)); > log1.info("CFXE > VVVVVVVVVVVVVVV"+exchange.getOut().getBody(String.class)); > } > }) > ; > > > > 1. My primary concern is, that in the case the server returns a SOAPFault, > I can not extract the details of the fault. The SoapFault is thrown, and > the corresponding onException clause is triggered, but according to the > log below, the detail attribute is null. > > > 11:03:44,210 | INFO | INBODY > ----------------org.apache.camel.component.cxf.CxfPayload headers: > nullbody: [[REQUEST: null]] > 11:03:44,210 | INFO | INHEAD > ----------------{http://service.com/fault_ticket, > CamelRedeliveryCounter=0, CamelRedelivered=false} > 11:03:44,213 | INFO | OUTBODY ---------------null > 11:03:44,213 | INFO | OUTHEAD ---------------{} > 11:03:44,213 | INFO | EXC -------------------null > 11:03:44,213 | INFO | FAIL ------------------false > 11:03:44,214 | INFO | EXCP > ------------------org.apache.cxf.binding.soap.SoapFault: Server Error > 11:03:44,214 | INFO | NODE ------------------null > 11:03:44,214 | INFO | REASON ------------------Server Error > 11:03:44,214 | INFO | MSG ------------------Server Error > 11:03:44,214 | INFO | DETAIL ------------------[detail: null] > > > The actual soap response is: > > 500 Internal Server Error > Server: MX/WEBSERVICE 3.X > Cache-Control: private, pre-check=0, post-check=0, max-age=0 > Pragma: no-cache > Expires: 0 > Connection: close > Content-Length: 1551 > Content-Type: text/xml; charset=UTF-8 > > <?xml version="1.0" encoding="UTF-8"?> > <SOAP-ENV:Envelope > xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> > <SOAP-ENV:Body> > <SOAP-ENV:Fault> > <faultcode>SOAP-ENV:Server</faultcode> > <faultstring>Server Error</faultstring> > <detail> > <e:exception > xmlns:e="http://service.com/interfaces/mx_exception/"> > <code></code> > <message>"WORK_ORDER_ALREADY_EXISTS</message> > <callstack>"POISON_CALL_STACK" .... </callstack> > </e:exception> > </detail> > </SOAP-ENV:Fault> > </SOAP-ENV:Body> > </SOAP-ENV:Envelope> > > 2. A second remark is, that the handleFault() does not seem to have any > effect on the flow. The SoapFault is thrown regardless of it. I expected > it to work similar to jbi faults: when it is present throw the exception, > otherwise just set the EXCEPTION_CAUGHT property on the exchange, and let > the flow continue. > > 3. My third question, isn't there a simple way to send a SOAP message with > CXF? I mean I have the SOAPBody prepared (as string or > org.w3c.dom.Document), and I expect cxf to wrap it in an envelope, and > also return a SOAPBody. Do I really have to do the cumbersome payload > conversions prior and after the request? (I tried MESSAGE mode, but then I > have to take care of the SOAP envelope) > > > Thanks for your time, > attilav > -- View this message in context: http://old.nabble.com/How-to-extract-SOAPFault-details-from-CXF-tp28739489p28750623.html Sent from the Camel - Users mailing list archive at Nabble.com.