我有一个需要处理并转换为JSON的xml:
<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
发布于 2018-12-31 17:37:30
JsonFormatter的默认行为是允许在JSON输出中使用原语类型。这意味着任何有效数字的内容都将在JSON消息中表示为数字。
作为此问题的解决方案,您可以在将以下属性添加到EI_HOME/conf目录的synapse.properties文件后禁用到原语类型的转换。
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]*$在这种情况下,auto基元仅对数字禁用。
备注:一旦启用了autoprimitive,就可以根据synapse.properties文件中定义的正则表达式将某些字段排除在自动原语功能之外。
由于
发布于 2018-12-29 17:41:22
这看起来像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
发布于 2021-06-09 22:46:25
如果您使用的是更新的WSO版本,有一个解决方案:https://docs.wso2.com/display/EI630/Working+with+Message+Payloads#WorkingwithMessagePayloads-EmptyXMLelementswiththe'nil'attribute
您可以在JSON Transform mediator的帮助下在本地设置synapse配置
https://stackoverflow.com/questions/53943103
复制相似问题