web-services - Mule CXF SOAP 服务 - 针对 XSD 进行验证并发送自定义响应而不是 Soap 错误

标签 web-services soap wsdl mule cxf

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

现在我想自定义 SOAP 错误响应,以防架构验证错误。

我根本不想发送 SOAP 错误,而是想在响应正文中发送如下所示的内容

<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="&lt;errorCode&gt;123&lt;/errorCode&gt;&lt;errorDescription&gt;Soap Validation fail!!!/errorDescription&gt;" doc:name="Set Payload" mimeType="application/xml"/>
 </sub-flow>

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

关于web-services - Mule CXF SOAP 服务 - 针对 XSD 进行验证并发送自定义响应而不是 Soap 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37894169/

相关文章:

web-services - 我可以从 Salesforce 发布不需要身份验证的 Web 服务吗?

java - WSDL 中忽略的 JAX-B 全局绑定(bind)

java - 发送 SOAP 消息

java - 调用服务时将二进制值(字节数组)设置为 SOAP 元素

wsdl - org.apache.cxf.service.factory.ReflectionServiceFactoryBean 是否可以配置为缓存 WSDL?

json - 如何在ajax调用中压缩web服务响应json

asp.net - ASP.NET (.asmx) Web 服务中的客户端 IP 地址

web-services - 修复 SoapUI 中的 "Missing SOAP Operations in Project"错误

soap - 如何在 AXIS 1.x 中使用 Log4J SOAP 请求和响应进行登录?

java - Webservice-Client : Common approach with Spring WS, JAXB 和一个 WSDL 文件?