首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WSO2 EI JSONBuilder配置

WSO2 EI JSONBuilder配置
EN

Stack Overflow用户
提问于 2018-12-27 17:59:44
回答 3查看 679关注 0票数 0

我有一个需要处理并转换为JSON的xml:

代码语言:javascript
复制
<jsonObject>
    <number>1234</number>
    <emptyString/>
    <string>hello</string>
</jsonObject>

当它像这样在JsonStreamBuilder中运行时:

代码语言:javascript
复制
<property name="messageType" scope="axis2" type="STRING" value="application/json"/>

我得到的JSON是这样的:

代码语言:javascript
复制
{
  "number":1234,
  "emptyString": null,
  "string":"hello"
}

所以我想知道有没有什么方法可以将JsonStreamBuilder配置为将空标签视为空,而不是将其视为空字符串,此外,我还希望将数字视为字符串。

也许我可以修改默认的XML来满足我的需要?

顺便说一下,我使用的是WSO2 EI 6.1.1

EN

回答 3

Stack Overflow用户

发布于 2018-12-31 17:37:30

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

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

代码语言:javascript
复制
synapse.commons.json.output.autoPrimitive=false 

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

根据您的问题,您需要关闭String到Integer的转换。你可以通过在EI_HOME/conf/synapse.properties文件中添加下面的属性来解决这个问题。

代码语言:javascript
复制
synapse.commons.json.output.autoPrimitive=true

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

在这种情况下,auto基元仅对数字禁用。

备注:一旦启用了autoprimitive,就可以根据synapse.properties文件中定义的正则表达式将某些字段排除在自动原语功能之外。

由于

  • 和空标签不为空的问题,你可以在上面提到的博客帖子中解决。
票数 3
EN

Stack Overflow用户

发布于 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

票数 0
EN

Stack Overflow用户

发布于 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配置

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53943103

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档