WSO2 EI JSONBuilder配置

时间:2018-12-27 09:59:44

标签: json xml wso2 wso2ei

我有此xml,需要进行处理并将其转换为JSON:

<jsonObject>
    <number>1234</number>
    <emptyString/>
    <string>hello</string>
</jsonObject>

当它像这样通过JsonStreamBuilder运行时:

<property name="messageType" scope="axis2" type="STRING" value="application/json"/>

我得到这样的JSON:

{
  "number":1234,
  "emptyString": null,
  "string":"hello"
}

所以我想知道有什么方法可以配置JsonStreamBuilder将空标记不是空值,而是空字符串,此外,我还希望数字也被当作字符串。

也许我可以修改默认XML以适应我的需求?

顺便说一句,我正在使用WSO2 EI 6.1.1

3 个答案:

答案 0 :(得分:1)

JsonFormatter的默认行为是允许JSON输出中的原始类型。这意味着任何有效数字的内容都将在JSON消息中表示为数字。

作为此问题的解决方案,您可以在将以下属性添加到 EI_HOME / conf 目录的 synapse.properties 文件中之后,禁止将其转换为原始类型。< / p>

synapse.commons.json.output.autoPrimitive=false 

但是,此属性是全局属性,因此它将影响所有服务(代理服务和API)。因此,这意味着任何有效数字的字符串都不会转换为数字。

根据您的问题,您需要禁用将String转换为Integer的功能。您可以解决此问题,也可以在 EI_HOME / conf / synapse.properties 文件中添加以下属性。

synapse.commons.json.output.autoPrimitive=true

synapse.commons.json.output.disableAutoPrimitive.regex=^[1-9]*$

在这种情况下,自动原语仅对数字禁用。

注意:启用自动基本功能后,可以根据synapse.properties文件中定义的正则表达式从自动基本功能中排除某些字段。

  • 将空标记作为非null问题,您可以按照上述博客文章解决。

答案 1 :(得分:0)

这看起来像wso itlsef中的限制,文档指出这是所需的行为。 要克服问题,请尝试使用脚本调解器 WSO2ESB: Property setting not accepting empty value 甚至变得更低(更复杂) https://medium.com/@lashan/class-mediator-to-handle-null-values-in-json-payload-wso2-ei-34a43246f0f

答案 2 :(得分:0)

如果您使用的是更新的 WSO 版本,则有一个解决方案:https://docs.wso2.com/display/EI630/Working+with+Message+Payloads#WorkingwithMessagePayloads-EmptyXMLelementswiththe'nil'attribute

您可以借助 JSON Transform mediator

在本地设置突触配置