Web services Mule CXF SOAP服务-根据XSD进行验证,并发送自定义响应,而不是SOAP错误

Web services Mule CXF SOAP服务-根据XSD进行验证,并发送自定义响应,而不是SOAP错误,web-services,soap,wsdl,mule,cxf,Web Services,Soap,Wsdl,Mule,Cxf,我有一个Mule流,其中我使用Mule的CXF入站端点公开了一个SOAP服务。我配置了validationEnabled=“true”以及wsdlLocation=“路径到\my\wsdl”。使用此CXF入站端点配置,它能够验证传入的SOAP请求,并在出现模式验证错误时抛出SOAP错误。到目前为止还不错 现在,我想在模式验证错误的情况下定制SOAP错误响应 我根本不想发送SOAP错误,相反,我想在响应体中发送如下内容 <errorCode>123</errorCode>

我有一个Mule流,其中我使用Mule的CXF入站端点公开了一个SOAP服务。我配置了
validationEnabled=“true”
以及
wsdlLocation=“路径到\my\wsdl”
。使用此CXF入站端点配置,它能够验证传入的SOAP请求,并在出现模式验证错误时抛出SOAP错误。到目前为止还不错

现在,我想在模式验证错误的情况下定制SOAP错误响应

我根本不想发送SOAP错误,相反,我想在响应体中发送如下内容

<errorCode>123</errorCode>
<errorDescription>some error description</errorDescription>
123
一些错误描述

有谁能告诉我如何实现这一点吗?

如果您要公开一个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>
123
一些错误描述
:-


因此,如果验证失败,那么它将路由到您的子流并显示您的自定义消息 注意,您可以使用set payload、Java类、XSLT或任何您想要的工具来创建自定义消息:)
有关
mulexml:schema validation filter
的更多参考信息,请参阅:-

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