我正在尝试根据存储为本地条目(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属性中检索正确的端点。任何人都可以帮忙吗?
答案 0 :(得分:2)
我用不同的方法解决了我的问题。这符合bij fipries给出的答案。
在代理中我添加了以下内容:
<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检索正确的端点。
希望这有助于其他人。
问候,nidkil
答案 1 :(得分:0)
我有类似的情况。问题似乎是您无法对属性内容执行xpath表达式。
将xml加载到属性后,您可以使用Javascript脚本轻松完成所需操作。 Javascript + e4x提供了一种通过xpath表达式访问XML变量内容的简便方法。
希望这会对你有所帮助。
答案 2 :(得分:0)
是的,这是一个限制。实际上,这应该是丰富调解员的功能。将创建一个功能请求,以便为下一个ESB版本修复此问题。
现在你可以用:
来做到这一点我知道......这是一个黑客攻击:)