1

我正在尝试根据存储为本地条目 (key=mapping_id_ep_v1.xml) 的 XML 片段中的信息来路由消息。用于查找正确端点的 id,它是消息正文的一部分。

这是用于将 id 映射到端点的 XML 片段:

<mappings>
    <mapping id="ep_1">http://localhost:8280/services/ep_1</mapping>
    <mapping id="ep_2">http://localhost:8280/services/ep_2</mapping>
    <mapping id="ep_3">http://localhost:8280/services/ep_3</mapping>
<mappings>

我使用以下语句从正文中检索 id 以查找端点:

<property name="LOOK-UP" expression="//controleFile/id" />

我可以按顺序使用以下条目将 XML 文件加载到属性文件中:

<property name="MAPPING" expression="get-property('mapping_id_ep_v1.xml')" />

我使用以下语句记录该属性:

<log level="custom">
    <property name="Look-up" expression="get-property('LOOK-UP')" />
    <property name="Mapping" expression="get-property('MAPPING')" />
</log>

到目前为止,一切都很好。我无法弄清楚如何从 MAPPING 属性中检索正确的端点。任何人都可以帮忙吗?

4

3 回答 3

2

我用不同的方法解决了我的问题。它与给定 bij fipris 的答案一致。

在代理中,我添加了以下内容:

 <property name="MAPPING" expression="get-property('mapping_id_ep_v1')" />
 <property name="LOOK_UP" expression="//controlFile/id" />
 <log level="custom">
    <property name="MAPPING" expression="get-property('MAPPING')" />
    <property name="LOOK_UP" expression="get-property('LOOK_UP')" />
 </log>
 <script language="js" key="testScript_2" function="getEndpointByID" />
 <log level="custom">
    <property name="EP" expression="get-property('EP')" />
 </log>

这是mapping_id_ep_v1的内容:

<mappings>
    <mapping id="ep_1">http://localhost:8280/services/ep_1</mapping>
    <mapping id="ep_2">http://localhost:8280/services/ep_2</mapping>
    <mapping id="ep_3">http://localhost:8280/services/ep_3</mapping>
<mappings>

这是 TestScript_2 中的代码:

<x>

  function getEndpointByID(mc) {
     var xml = new XML(mc.getProperty('MAPPING'));
     var look_up = new XML(mc.getProperty('LOOK_UP'));
     var ep = xml..mapping.(@id == look_up);
     mc.setProperty('EP', ep + '');
  }

</x>

代理将映射 xml 加载到属性中。此属性在 javascript 代码中转换为 XML,然后使用 LOOK_UP 检索正确的端点。

希望这对其他人有帮助。

问候,尼德基尔

于 2012-06-18T11:17:38.920 回答
0

是的,这是一个限制。实际上,这应该是丰富中介的功能。将创建一个功能请求,以便为下一个 ESB 版本修复此问题。

现在你可以这样做:

  • 保留当前的肥皂负载:使用丰富
  • 用属性的内容替换当前正文 - 丰富
  • 针对当前主体评估 xpath 并提取所需的内容。(将其用作 EP)- 属性
  • 使用保留的有效负载恢复消息正文 - 丰富

我知道......这是一个黑客:)

于 2012-06-16T08:13:47.760 回答
0

我也有类似的情况。问题似乎是您无法对属性内容执行 xpath 表达式。

在将 xml 加载到属性后,您可以使用 Javascript 脚本轻松地完成您需要的操作。Javascript+e4x 提供了一种通过 xpath 表达式访问变量的 XML 内容的简单方法。

于 2012-06-15T12:13:02.060 回答