1

我从rabbitmq 入站收到一条XML 消息,我必须用restheart 将它发送到mongodb。我必须修改格式化程序生成的 Json 的内容,然后再将其发送到 mongo rest api,因为我必须修改一个 datetime 格式发送的字符串,为 mongodb 添加“ISOdate()”。

我的传入消息可能与其他消息不同。

例如,我从入站得到这个:

<CONTENT><CODE_USER>100</CODE_USER><DATE>2017-12-12</DATE></CONTENT>

我得到这个端点,

{"内容": {"CODE_USER":100","DATE":"2017-12-12"}}

所以我想在发送到端点修改日期字符串之前修改Json格式。

有没有办法触发 esb Json 格式化程序并在将结果发送到端点之前获取结果?

谢谢,尼古拉斯

4

2 回答 2

0

我找到了解决办法

我使用 json-eval($.*.) 函数和脚本调解器在发送到端点之前修改日期格式,如下所示:

 <property expression="json-eval($.*.)" name="location" scope="default" type="STRING"/>

<script language="js"><![CDATA[var message =  new String(mc.getProperty('location'));
  var reg = /\"((\d{4})-(\d\d)-(\d\d)T(\d\d):(\d\d):(\d\d)\.(\d{1,3})Z)\"/g;
  var mess=message.replace (reg,'{\"$date\" : \"\$1\"}');
  mess=mess.substring (1,mess.length-1);
  mc.setPayloadJSON(mess);]]></script>

<property name="ContentType" scope="axis2" type="STRING" value="application/json"/>
于 2018-11-09T17:22:22.647 回答
-1

是的,这是可能的。您可以将中介添加到顺序中,以便在将响应发布到 mongo-db 之前进行转换。

请检查可用的调解器,如果没有适合您要求的调解器,您可以通过扩展org.apache.synapse.mediators.AbstractMediator来编写自己的调解器

有关如何编写自定义调解器的详细信息,您可以参考博客:https ://medium.com/@nirothipanram/esb-few-tips-in-writing-a-custom-class-mediator-b9a322f4eaa8

于 2018-11-05T10:06:19.963 回答