当前位置: 首页 > 知识库问答 >
问题:

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

邓正真
2023-03-14

我有一个Mule流,其中我使用Mule的CXF入站endpoint公开了一个SOAP服务。我配置了validationEnabled=“true”wsdlLocation=“path to\my\wsdl”。通过这种CXF入站endpoint配置,它能够验证传入的SOAP请求,并在出现模式验证错误时抛出SOAP错误。到现在为止,一直都还不错。

现在,我想定制SOAP故障响应,以防模式验证错误。

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

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

有谁能告诉我如何做到这一点吗?

共有1个答案

濮阳唯
2023-03-14

如果您要公开一个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:模式验证过滤器

 类似资料:
  • 问题内容: 我正在生成一些XML模式,并希望确保我们的生成器正在创建有效的XML模式文档(不是XML)。我试图提出验证XML Schema文档的代码,但失败了。我不认为会这么复杂。 这段代码与我需要做的非常接近,但是出现以下错误。 我在调用setSchema(uri)时使用URL,以确保XMLSchema.dtd和datatypes.dtd是相对的,希望它们可用,但是我不确定如何进行检查。 我猜想

  • 使用https://www.freeformatter.com/xml-validator-xsd.html 如果我将soapenf完全从这里的响应和模式的混合中去掉,它工作得很好,但我希望两者都能做到。 (仅供参考,我想指出这个wsdl和xsd没有在endpoint上公开,CISCO提供了wsdl和xsd文件的zip文件)然后您可以根据wsdl/xsd向服务器发送请求,它会工作。但是wsdl和x

  • 我正在尝试使用SAX解析和验证SOAP请求。需要两个XSD,一个用于SOAP信封(http://schemas.xmlsoap.org/soap/envelope/),另一个用于我定义的。我找不到针对这两个XSD正确验证请求的方法。 下面是我用来解析请求并根据soapenv验证它的代码。xsd。它工作得很好。如果改为指定XSD,验证将失败,并显示“找不到元素‘soapenv:Envelope’的声

  • Apache可以让网站管理员自己自定义对一些错误和问题的响应。 自定义的响应可以定义为当服务器检测到错误或问题时才被激活。 如果一个脚本崩溃并产生"500 Server Error"响应,那么这个响应可以被更友好的提示替换或者干脆用重定向语句跳到其他的URL(本地的或外部的)。 行为 老式的行为 Apache1.3 会响应一些对于用户没有任何意义的错误或问题信息,而且不会将产生这些错误的原因写入日

  • 我有一个肥皂信封 肥皂xsd只是的本地版本http://schemas.xmlsoap.org/soap/envelope/保存到soap。xsd 当我尝试验证这一点时,它表示根据targetAction,架构目标不正确 所有试验和错误都指向xmlns: xsi标记给出错误 我想知道这是否与SOAP 1.0和1.1有关 (我已经能够用完全相同的方法验证soap中的xml)我很确定这可以在一个元素中

  • 我试图在Java验证XSD1.1中的XML。正如所讨论的,如何在Java根据XSD1.1验证XML? 我有个例外说: java.lang.IllegalArgumentException:无法加载实现http://www.w3.org/xml/xmlschema/v1.1指定的架构语言的SchemaFactory 然后我尝试,错误是: 无法从类型SchemaFactory对非静态方法setProp