I need help. I can't get the exception my web service is throwing and I don't know why.
I have created a simple route in camel and I want to catch fault messages from a web service as an exception with the explanation of the error.
The route is the following:
onException(Exception.class)
.handled(true)
.to("log:info")
.process(new FailureResponseProcessor())
.to("file:data/outbox?fileName=error.xml");
from("file:data/inbox?noop=true")
.process(loggerProcessor)
.to("cxf://http://localhost:8080/TestWebService?dataFormat=PAYLOAD"
+ "&properties.exceptionMessageCauseEnabled=true"
+ "&properties.faultStackTraceEnabled=true")
.to("file:data/outbox?fileName=response.xml");
In the context configuration I have this:
context.setHandleFault(true);
The web service that I created for testing is as simple as this:
@WebService
public class TestWebService {
@WebMethod
public double suma(double a, double b) throws Exception {
System.out.println("Webservice invocado!!!");
throw new Exception("Mi excepcion");
//return a + b;
}
}
But I'm not able to get the message from the exception "Mi excepcion".
I guess the problem comes from this line:
2015-04-28 13:05:15 DEBUG DefaultErrorHandler:71 - Failed delivery for (MessageId: ID-saqqara-40731-1430219108400-0-3 on ExchangeId: ID-saqqara-40731-1430219108400-0-2). On delivery attempt: 0 caught: org.apache.cxf.binding.soap.SoapFault: No se ha encontrado el método de distribución de {http://schemas.xmlsoap.org/soap/envelope/}Envelope
Because the caught exception is my exception policy is this one:
Error: No se ha encontrado el método de distribución de {http://schemas.xmlsoap.org/soap/envelope/}Envelope
EDIT:
I have changed a little bit the code to log more info. This what I've done:
onException(SoapFault.class)
.handled(true)
.log("Response ON ERROR: ${body}")
.log("Response ON FAULT: ${exception}")
.process(new FailureResponseProcessor())
.to("file:data/outbox?fileName=error.xml");
from("file:data/inbox?noop=true")
.id("miRuta")
.log("File content: ${body}")
.to("cxf://http://localhost:8080/TestWebService?dataFormat=PAYLOAD"
+ "&properties.exceptionMessageCauseEnabled=true"
+ "&properties.faultStackTraceEnabled=true")
.log("WS Response: ${body}");
What I found is that when the exception is caught, the message that is logged with the following line:
.log("Response ON ERROR: ${body}")
is this one:
2015-04-29 09:53:28 INFO route1:95 - Response ON ERROR:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:test="http://test_ws.testing.com/">
<soapenv:Header/>
<soapenv:Body>
<test:suma>
<arg0>?</arg0>
<arg1>?</arg1>
</test:suma>
</soapenv:Body>
</soapenv:Envelope>
When it should be the fault message, shouldn't it?.
EDIT 2
The XML reply is the following:
<?xml version='1.0' encoding='UTF-8'?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<S:Fault xmlns:ns4="http://www.w3.org/2003/05/soap-envelope">
<faultcode>S:Server</faultcode>
<faultstring>Mi excepcion</faultstring>
<detail>
<ns2:Exception xmlns:ns2="http://test_ws.testing.com/">
<message>Mi excepcion</message>
</ns2:Exception>
</detail>
</S:Fault>
</S:Body>
</S:Envelope>
Finally I found the problem.
The xml file that I was catching in:
from("file:data/inbox?noop=true")
Had the following content:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:test="http://test_ws.testing.com/">
<soapenv:Header/>
<soapenv:Body>
<test:suma>
<arg0>5</arg0>
<arg1>5</arg1>
</test:suma>
</soapenv:Body>
</soapenv:Envelope>
The fault was generated correctly by the testing web service but a different one saying that the method Envelope wasn't found, which is correct because the method Envelop doesn't exist in the web service. The method that exists is "suma".
So I changed the xml to the following:
<test:suma xmlns:test="http://test_ws.testing.com/">
<arg0>5</arg0>
<arg1>5</arg1>
</test:suma>
And I got the expected exception: "Mi excepcion".
Thanks for the help anyway!!
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.