【问题标题】:wso2 Transform XML to Json inside sequencewso2 在序列中将 XML 转换为 Json
【发布时间】:2018-11-03 08:48:13
【问题描述】:

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

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

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

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

我得到了这个端点,

{"CONTENT" : {"CODE_USER":100","DATE":"2017-12-12"}}

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

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

谢谢, 尼古拉斯

【问题讨论】:

  • 为什么要触发格式化程序,然后更改日期字符串。修改日期然后以 JSON 格式发送消息可能会更容易
  • 是的,你是对的,但我必须向 mongodb 发送这样的日期:{ "DATE" : ISODate("2017-12-12")},所以我需要有json,然后在发送到mongodb之前修改它
  • 我认为这不是有效的 JSON。检查json.org
  • RESTHeart 上的日期具有以下格式 {"$date": epoch time_millis }。见restheart.org/learn/representation-format

标签: json xml mongodb wso2esb restheart


【解决方案1】:

我找到了解决办法,

我使用 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"/>

【讨论】:

    【解决方案2】:

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

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

    自定义中介器的具体编写方法可以参考博客:https://medium.com/@nirothipanram/esb-few-tips-in-writing-a-custom-class-mediator-b9a322f4eaa8

    【讨论】:

    • 从rabitmq到mongoDB的消息流只会看到inSequence。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多