以下场景使用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的肥皂故障吗?
段 下面是驼峰配置的片段
<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>
答案 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}"/>