繁体   English   中英

在WSO2中,ESB在进入api之前验证XML

[英]In WSO2 ESB is validate XML before coming to the api

有没有办法验证XMLWSO2 ESB API ,以便验证。

当错误的XML进入我的API时,我收到错误。 这是我在之前要验证的API时遇到的错误。

[2018-10-19 10:00:03,531]错误 - LogMediator无法构建完整的日志消息:com.ctc.wstx.exc.WstxParsingException:意外的关闭标记; 预期。

发送XML

<Request>
    <DeleteServiceRequest> 
       <ServiceLineId>12344455</ServiceLineId> 

</Request> 

API的标头

<?xml version="1.0" encoding="UTF-8"?>
<api context="/test" name="testAPI" xmlns="http://ws.apache.org/ns/synapse">
    <resource methods="POST">
        <inSequence>

问题是要验证消息,您需要先构建它。 您收到的消息不是格式良好的xml,因此API第一次尝试构建消息时它将失败。 但是,还需要验证消息的XML构建,因此xml验证介体也将失败。

所以不,当您收到的消息不正确时,您无法验证XML。 (从技术上讲,它不是XML)。 通常,这是您向客户端发回错误的时间。 由于他们在调用API时出现技术错误,因此您可以使用您获得的实际错误为他们服务,以便他们知道要修复的内容。

您可以使用以下属性获取有关错误的信息,然后使用此信息构造故障消息以发送回客户端。 例如,以下故障序列将记录错误详细信息并将简单的错误消息发送回客户端。

      <faultSequence>
         <log level="custom">
            <property name="text" value="An unexpected error occured"/>
            <property expression="get-property('ERROR_MESSAGE')" name="message"/>
            <property expression="get-property('ERROR_DETAIL')" name="detail"/>
            <property expression="get-property('ERROR_CODE')" name="code"/>
            <property expression="get-property('ERROR_DETAIL')" name="detail"/>
         </log>
         <payloadFactory media-type="xml">
            <format>
               <ERROR xmlns="">
                  <MESSAGE>You broke it</MESSAGE>
                  <DETAIL>$1</DETAIL>
               </ERROR>
            </format>
            <args>
               <arg evaluator="xml" expression="get-property('ERROR_MESSAGE')"/>
            </args>
         </payloadFactory>
         <respond/>
      </faultSequence>

您可能还希望在返回消息之前将http状态代码设置为正确的值,例如:

<property name="HTTP_SC" value="500" scope="axis2"/>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM