Mule CXF SOAP服务 - 验证XSD并发送自定义响应而不是Soap错误

时间:2016-06-18 06:54:01

标签: web-services soap wsdl mule cxf

我有一个Mule流,我使用Mule的CXF入站端点公开了SOAP服务。我配置了validationEnabled="true"wsdlLocation="path-to\my\wsdl"。通过CXF入站端点的这种配置,它能够验证传入的SOAP请求,并在出现架构验证错误时抛出SOAP错误。到目前为止一切都很好。

现在我想在架构验证错误的情况下自定义SOAP Fault响应。

我根本不想发送SOAP Fault,而是想在响应正文中发送如下内容

<errorCode>123</errorCode>
<errorDescription>some error description</errorDescription>

任何人都可以告诉我如何实现这个目标吗?

1 个答案:

答案 0 :(得分:2)

如果您正在公开SOAP Web服务并希望根据模式验证传入的SOAP消息并放置自定义消息,那么最好的方法之一就是使用mulexml:schema-validation-filter

例如以下代码: -

<mulexml:schema-validation-filter name="Schema_Validation" schemaLocations="yourSchema.xsd" returnResult="true" doc:name="Schema Validation" />  

<flow name="ServiceFlow" >
  <http:listener config-ref="HTTP_Listener_Configuration" path="mainData" doc:name="HTTP Connector"/>
      <message-filter  onUnaccepted="ValidationFailFlow" doc:name="filter to validate xml against xsd" throwOnUnaccepted="true" >
        <filter ref="Schema_Validation"/>
     </message-filter> 
   <cxf:jaxws-service  serviceClass="com.test.services.schema.maindata.v1.MainData" validationEnabled="true" doc:name="SOAP"/>
   <component class="com.test.services.schema.maindata.v1.Impl.MainDataImpl" doc:name="JavaMain_ServiceImpl"/>
  </flow>

并创建一个子流程来创建自定义消息

<errorCode>123</errorCode>
<errorDescription>some error description</errorDescription>

: -

<sub-flow name="ValidationFailFlow" >
        <logger message="SOAP Request is not valid!!" level="INFO" doc:name="Logger"/>
        <set-payload value="&lt;errorCode&gt;123&lt;/errorCode&gt;&lt;errorDescription&gt;Soap Validation fail!!!/errorDescription&gt;" doc:name="Set Payload" mimeType="application/xml"/>
 </sub-flow>

现在,如果验证失败,那么它将路由到您的子流并显示您的自定义消息 请注意,您可以使用set payload或Java class或XSLT或任何您想要的内容创建自定义消息:) 有关mulexml:schema-validation-filter的更多参考,请参阅: - https://docs.mulesoft.com/mule-user-guide/v/3.7/schema-validation-filter