是否有一种方法可以验证 XML 到 WSO2 ESB API 中,以便进行验证。
当我的 API 错误的 XML 出现错误。这是我之前要验证的 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>
答案 0 :(得分:3)
问题是要验证消息,您需要先构建它。您收到的消息不是格式正确的xml,因此API首次尝试构建消息时,它将失败。但是,还需要验证消息的XML构建,因此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"/>