【问题标题】:WSO2 Routing based on message using XPath基于消息的 WSO2 路由使用 XPath
【发布时间】:2014-11-14 02:26:08
【问题描述】:

我有一种情况,我想将传入请求路由到基于 XPath 的代理(如果消息中存在或不存在)。 例如:让我们考虑对一个代理的两个请求。 请求 1:

<PCSDetailProxyResponse>
   <MarketDefinitionsRequest>
       <![CDATA[Request elements TBD]]>
   </MarketDefinitionsRequest>
</PCSDetailProxyResponse>

请求 2:

<PCSDetailProxyRequest>
  <ReportParameterRequest>
        <![CDATA[Request elements TBD]]>
  </ReportParameterRequest>
</PCSDetailProxyRequest>
<endpoint xmlns="http://ws.apache.org/ns/synapse" name="ReportParameterRequestEP">
</endpoint>
<endpoint xmlns="http://ws.apache.org/ns/synapse" name="MarketDefinitionsRequest">
</endpoint>

我想根据请求的类型(MarketDefinitionsRequest 或 ReportParameterRequest)将这两个请求路由到 2 个不同的端点。

如果请求包含 ReportParameterRequest 那么我想发送到 ReportParameterRequestEP 如果请求包含 MarketDefinitionsRequest,那么我想发送到 MarketDefinitionsRequestEP。

我应该怎么做才能确定请求是否包含或元素,因为只有基于此我才需要做出路由决定?

【问题讨论】:

    标签: xpath wso2 wso2esb


    【解决方案1】:

    我建议为此使用过滤中介:

    <filter xpath="fn:exists($body/MarketDefinitionsRequest)">
     <sequence key="MarketDefnitionsSequence"/>
    </filter>
    <filter xpath="fn:exists($body/ReportParameterRequest)">
     <sequence key="ReportParameterSequence"/>
    </filter>
    

    然后您可以创建单独的序列来处理不同的场景。 如果您正在寻找节点内容的值,那么切换调解器会更容易。因为您正在过滤节点的名称,所以需要使用 exists 函数。

    【讨论】:

    • 感谢科林尔。我使用了你提到的过滤介质,它起作用了。
    • 我很高兴它成功了!介意将其标记为一个好的答案吗?我只是在这里建立我的代表......
    猜你喜欢
    • 2017-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-27
    相关资源
    最近更新 更多