3

我面临一种情况,我们不能使用模式来验证传入的请求(基本上模式存在,但它接受请求中的任何字符串,wsdl 设计人员有自己的理由这样做以接受来自不同来源和灵活性的请求)。但是当收到请求时,我验证请求包装器的子元素是我们所期望的(为此使用 XPath)。现在,如果子元素不是预期的,我想抛出代码Soap FaultClient并且可能包含模式验证失败的错误消息,请求不包含有效元素。

我正在使用 Mule 3.3 并XPath在元素中进行验证<choice>,我想在<otherwise>块中抛出异常。

  1. 有没有办法Soap Fault手动投入骡流和
  2. 如何添加自定义故障字符串。我不确定是否会解决这个目的,因为outInterceptor我没有使用.schemaValidation<cxf:proxyService>

这是我的流程的一部分

<http:inbound-endpoint address="${service.address}" exchange-pattern="request-response">
  <cxf:proxy-service wsdlLocation="classpath:service.wsdl" namespace="http://company.com/services/service" service="CompanyService" />
</http:inbound-endpoint>
<choice>
  <when>.....</when>
  <otherwise><!-- Here I want to throw Soap Fault ---></otherwise>
</choice>
<catch-exception-strategy>
  <flow-ref name="generateErrorResponse" />
</catch-exception-strategy>
4

1 回答 1

6

由于您使用的是 acxf:proxy-service您可以完全控制响应。例如,如果您在otherwise块中添加以下内容,您将能够创建您想要的任何 SOAP 错误:

<expression-component><![CDATA[
 message.payload = '<soap:Fault xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">'
                 + '<faultcode>A code</faultcode><faultstring>A string</faultstring>'
                 + '</soap:Fault>';
]]></expression-component>
于 2013-01-17T19:02:45.297 回答