删除WSO2 ESB中XML文件中的少数节点

时间:2017-07-18 18:32:16

标签: xml xslt wso2 wso2esb

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

我的方法: 现在我正在调用返回XML记录的端点API。我将它作为REQUEST_PAYLOAD存储为Enrich Mediator。并将其发送到另一个端点进行验证。我已经将来自验证端点的结果再次存储在属性中。然后,当我通过$ ctx访问Request有效负载时:REQUEST_PAYLOAD我收到了XML文件。但我无法将此XML传递给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 个答案:

答案 0 :(得分:0)

您有2个属性类型=&#34; OM&#34; :REQUEST_PAYLOAD并说明验证API的结果保存在VALIDATION_PAYLOAD

使用enrich mediator设置REQUEST_PAYLOAD有当前消息。例如,如果您的属性包含soap Body:

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

使用rich mediator在当前消息中附加VALIDATION_PAYLOAD的内容,例如:

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

使用日志级别=&#34;完整&#34;仔细查看你得到的内容,然后使用xslt mediator

答案 1 :(得分:0)

我可以建议如下:从验证端点收到响应后,您应该将其保存为另一个属性validateResponse。接下来,您应该使用Enrich或PayloadFactory将您的$ body替换为REQUEST_PAYLOAD。然后你可以调用XSLT中介,它将用你的响应替换你的$ body。您现在可以根据需要使用三个有效负载。