在 WSO2 ESB 中删除 XML 文件中的几个节点



我从 ESB 中的端点获取 XML 结果。我必须存储此结果 XML,并将其发送到 API 以验证内容。验证 API 返回一些无效项目,我必须从 XML 中删除这些无效项目,然后再次将 XML 发送到另一个端点。

我的方法: 现在我正在调用返回 XML 记录的端点 API。我将其存储为REQUEST_PAYLOAD丰富调解器。并将其发送到另一个端点进行验证。我已再次将验证终结点的结果存储在属性中。 然后,当我通过 $ctx:REQUEST_PAYLOAD 访问请求有效负载时,我正在获取 XML 文件。但是我无法将此 XML 传递给 XSLT,在该 XSLT 中,我必须根据第二个端点的结果删除一些项目。

我应该能够将此 XML 以及验证 API 的结果传递给 XSLT,以便可以从 XML 中删除少量项目并发送到另一个 API。

Example: 
1st XMl
'<Data>  
<User Name="XYZ">
<DETAILS>
<COURSE>IS</COURSE>
<YEAR>2016</YEAR>
<SUBJECT>COMPUTER SCIENCE<SUBJECT>         
</DETAILS>
</User>
<User Name="ABC">
<DETAILS>
<COURSE>IS</COURSE>
<YEAR>2015</YEAR>
<SUBJECT>INFO SCIENCE<SUBJECT>         
</DETAILS>
</User>
</Data>'
2nd XML :
'<message> ABC user is invalid </message>
<value>ABC</value>'
Result XML :
Remove ABC from the 1st XML
'<Data>  
<User Name="XYZ">
<DETAILS>
<COURSE>IS</COURSE>
<YEAR>2016</YEAR>
<SUBJECT>COMPUTER SCIENCE<SUBJECT>         
</DETAILS>
</User>
</Data> '

你有 2 个属性 type="OM" : REQUEST_PAYLOAD并说你的验证 API 的结果保存在VALIDATION_PAYLOAD

使用扩充调解器设置REQUEST_PAYLOAD具有当前消息。例如,如果您的财产包含肥皂 身体 :

<enrich>
<source type="property" property="REQUEST_PAYLOAD"/>
<target type="body"/>
</enrich>

使用扩充中介器将VALIDATION_PAYLOAD的内容追加到当前消息中,例如:

<enrich>
<source clone="true" xpath="get-property('VALIDATION_PAYLOAD')"/>
<target type="body" action="child"/>
</enrich>

使用log level="full"来准确查看你得到的内容,然后使用xslt调解器

我可以提出以下建议:收到来自验证终结点的响应后,应将其作为 validateResponse 保存到另一个属性中。 接下来,应使用"扩充"或"有效负载工厂"将$body替换为REQUEST_PAYLOAD。 然后,您可以调用 XSLT 中介程序,该中介程序将用其响应替换您的$body。 现在,您可以根据需要使用三个有效负载。

最新更新