Mule CXF SOAP 服务 - 针对 XSD 进行验证并发送自定义响应而不是 Soap 错误
Mule CXF SOAP service - Validate against XSD and send custom response instead of Soap fault
我有一个 Mule 流,我在其中使用 Mule 的 CXF 入站端点公开了 SOAP 服务。我配置了 validationEnabled="true"
和 wsdlLocation="path-to\my\wsdl"
。使用 CXF 入站端点的这种配置,它能够验证传入的 SOAP 请求并在存在架构验证错误的情况下抛出 SOAP 错误。到目前为止一切顺利。
现在我想在模式验证错误的情况下自定义 SOAP 故障响应。
我根本不想发送 SOAP Fault,而是想在响应正文中发送如下内容
<errorCode>123</errorCode>
<errorDescription>some error description</errorDescription>
任何人都可以告诉我如何实现这一目标吗?
如果您公开 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="<errorCode>123</errorCode><errorDescription>Soap Validation fail!!!/errorDescription>" 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
我有一个 Mule 流,我在其中使用 Mule 的 CXF 入站端点公开了 SOAP 服务。我配置了 validationEnabled="true"
和 wsdlLocation="path-to\my\wsdl"
。使用 CXF 入站端点的这种配置,它能够验证传入的 SOAP 请求并在存在架构验证错误的情况下抛出 SOAP 错误。到目前为止一切顺利。
现在我想在模式验证错误的情况下自定义 SOAP 故障响应。
我根本不想发送 SOAP Fault,而是想在响应正文中发送如下内容
<errorCode>123</errorCode>
<errorDescription>some error description</errorDescription>
任何人都可以告诉我如何实现这一目标吗?
如果您公开 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="<errorCode>123</errorCode><errorDescription>Soap Validation fail!!!/errorDescription>" 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