在 WSO ESB 中处理空 xml 后端响应

Handling an empty xml backend response in WSO ESB

在某些情况下,WSO2-ESB 服务正在接收来自端点的 'empty' XML 响应。

通常响应如下所示。它包含几个 results:

<?xml version='1.0' encoding='UTF-8'?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
    <S:Body>
        <ns2:results xmlns:ns2="http://the-endpoint.com/">
            <result>some result</result>
            <result>some other result</result>
            <result>some very different result</result>
        </ns2:results>
    </S:Body>
</S:Envelope>

然后转换为 result 的数组并由客户端使用。

{"results": ["some result", ...]}

但在极少数情况下,端点响应只是一个空的结果列表,它被 JAX-WS 翻译成一个空的 <ns2:results/> 标记。

<?xml version='1.0' encoding='UTF-8'?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
    <S:Body>
        <ns2:results xmlns:ns2="http://the-endpoint.com/"/>
    </S:Body>
</S:Envelope>

WSO2-ESB 然后将其转换为 null 对象,这引起了麻烦。

{"results": null}

现在如何使 WSO2-ESB Web 服务 return 成为空列表 {"results": []} 以防出现空响应?

您需要使用 XSLT 中介程序向外部元素添加 XML 处理指令。

添加处理指令可以参考这篇博客。 https://medium.com/@CKoutsoumpos/wso2-esb-handle-empty-or-single-item-arrays-during-json-transformation-with-xslt-c1d5a778a548