【问题标题】:Content type issue when translate xml to json using WSO2ESB使用 WSO2ESB 将 xml 转换为 json 时的内容类型问题
【发布时间】:2016-01-08 15:17:27
【问题描述】:

我发现将 xml 内容传输到 json 时可能会丢失一些消息。例如,一个 web 服务传递了一个值“80e5”,它可以正确地显示在 xml 响应中。但是,当我使用 "" 将响应从 xml 传输到 json 时,"80e5" 自动转换为 8000000,从 "STRING" 到 "INTEGER"。

我尝试的ESB版本是4.9.0和4.8.1,我尝试了在线文档中提到的JsonStreamFormatter和JsonFormatter,但没有成功。我想知道是否有节点或者属性可以用来定义节点的类型,因为INTEGER和STRING的不同显示会导致用户解析数据有困难。

【问题讨论】:

  • 可以在这里添加 synapse-config 吗?
  • 我只是简单地使用属性调解器进行转换。赞<property name="messageType" value="application/json" scope="axis2"/>
  • 据我了解,您尝试将<a>...<m>80e5</m>...</a> 类型 xml 转换为 json,如下所示,{a:{...{m:80e5}...}} 但 80e5 更改为 800000,它是十进制的吗?如果是这样,您可以尝试的另一种选择是首先通过将 xml 读取到新属性来存储值,然后稍后将其重新分配给 json 正文。
  • 是的,那肯定行得通,但困难在于,这个 80e5 值是在一个数组中,结构类似于<a>....<ID>80e5</ID><ID>30s3</ID>....</a>。我想我找不到 80e5 值在哪里。
  • 另外,这个值是后端webservice回复的,这意味着我无法预测这种值会在何时何地出现。

标签: wso2 wso2esb


【解决方案1】:

我使用 wso2 ESB 4.8.1 完成了一个示例场景,当启用 JsonFormatter 时,我得到了“80e5”的转换,如下所示:

  DEBUG - wire << "{"test":{"value":8.0E+6}}"

当在 axis2.xml 文件中启用 JSONMessageFormatter 时,我能够获得 80e5。 结果是:

 DEBUG - wire << "{"test":{"value":"80e5"}}[\r][\n]"

希望这会有所帮助..

【讨论】:

  • 感谢您的帮助,您能告诉我如何告诉 JsonFormatter 每个节点的类型吗?
  • 我尝试了 JSONMessageFormatter,它给了我 80e5 结果。但是,&lt;?xml-multiple?&gt; 函数被禁用,我用来告诉消息格式化程序这是一个数组。无论如何,谢谢你的帮助。
猜你喜欢
  • 1970-01-01
  • 2013-03-09
  • 1970-01-01
  • 1970-01-01
  • 2020-02-03
  • 2022-01-22
  • 1970-01-01
  • 1970-01-01
  • 2018-03-02
相关资源
最近更新 更多