如何用apache camel spring-ws创建一个肥皂故障

时间:2017-10-12 13:03:09

标签: apache-camel spring-ws axiom

以下场景使用apache camel 2.14.0,spring-ws 1.5.9和axiom 1.2.9

方案 - 调用我们的soap服务时,它应该是可选的返回错误 - 此错误应该在响应中作为soap fault

问题检测

我已经检测到了这个问题: - Spring-WS的org.springframework.ws.soap.axiom.AxiomHandler(2.3.0)不创建SOAPFault对象 - org.apache.axiom.soap.impl.llom.SOAPBodyImpl(1.2.15)不再检查元素的本地名称

问题 有一种更好的方法来处理apache camel的肥皂故障吗?

  • 一种可能性是使用throwException,但是如果出现功能错误,我的日志将包含大量的堆栈跟踪

下面是驼峰配置的片段

<camel:from uri="spring-ws:uri:/contextPath/soapServices?endpointMapping=#endpointMapping"/>
<camel:to uri="bean:someBean" />
<camel:choice>
<camel:when>
<camel:xpath>//error</camel:xpath>
<camel:to uri="xslt:transform_event_response_to_soapfault.xslt?saxon=true" />
</camel:when>
</camel:choice>
</camel:from>

1 个答案:

答案 0 :(得分:0)

我们使用否的解决方案如下: 将原始邮件存储在标头中并抛出异常。 spring-ws组件会自动将其转换为soap故障。还要添加CamelFailuerHandled,以便错误消息不在日志文件中。

<camel:setHeader headerName="myErrorMessage">
  <camel:xpath>//error/text()</camel:xpath>
</camel:setHeader>                  

<camel:setProperty propertyName="CamelFailureHandled">
    <camel:constant>true</camel:constant>
</camel:setProperty>        

<camel:throwException exceptionType="java.lang.IllegalArgumentException" message="${header.myErrorMessage}"/>