gpt4 book ai didi

java - Camel 未使用 Camel-cxf 正确拦截 SoapFault

转载 作者:行者123 更新时间:2023-12-02 09:09:08 25 4
gpt4 key购买 nike

我需要帮助。我无法得到我的网络服务抛出的异常,而且我不知道为什么。

我在camel中创建了一个简单的路由,我想捕获来自Web服务的错误消息作为异常并附上错误的解释。

路线如下:

    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");

在上下文配置中我有这个:

context.setHandleFault(true);

我为测试创建的 Web 服务就像这样简单:

@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;
}
}

但是我无法从异常“Mi excepcion”中获取消息。

我猜问题出在这一行:

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

因为捕获的异常是我的异常策略是这个:

Error: No se ha encontrado el método de distribución de {http://schemas.xmlsoap.org/soap/envelope/}Envelope

编辑:

我对代码做了一些更改以记录更多信息。这就是我所做的:

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}");

我发现,当捕获异常时,会使用以下行记录消息:

.log("Response ON ERROR: ${body}")

是这个吗:

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>

什么时候应该是错误消息,不是吗?

编辑2

XML 回复如下:

<?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>

最佳答案

终于找到问题了

我捕获的 xml 文件:

from("file:data/inbox?noop=true")

有以下内容:

<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>

测试 Web 服务正确生成了该错误,但另一个错误表示未找到 Envelope 方法,这是正确的,因为 Web 服务中不存在 Envelop 方法。存在的方法是“suma”。

所以我将 xml 更改为以下内容:

<test:suma xmlns:test="http://test_ws.testing.com/">
<arg0>5</arg0>
<arg1>5</arg1>
</test:suma>

我得到了预期的异常:“Mi excepcion”。

无论如何,感谢您的帮助!!

关于java - Camel 未使用 Camel-cxf 正确拦截 SoapFault,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29918271/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com