如何在 Open ESB 中传递 JSON
How to pass JSON in Open ESB
我正在创建一个简单的 OpenESB 应用程序。
在左边,我有一个休息呼入伙伴 link,在右边,我正在呼叫一个休息呼出伙伴 link。
我试图将 json 传递给服务,但 openESB 自动解析它并将其转换为 XML.
所以问题是如何阻止 open esb 将 json 字符串转换为 xml,因为该服务不接受 xml 输入。
您的开放式 ESB 应用程序似乎配置为 xml 格式,因此如果您调用 json 服务,它会转换为 xml。此 link 或许能够帮助您在 ESB https://docs.wso2.com/display/ESB403/ESB+and+JSON.
中实施 JSON
OpenESB 只能处理 XML。
对于 consume-types=[ "application/json" ]
JSON 输入会自动转换为 XML 以便进一步处理并在需要时调用任何外部合作伙伴链接。
对于produce-types=[ "application/json" ]
XML数据被OpenESB转换成JSON。
要达到同样的效果,您的 JSON 必须采用一种格式,当转换为 XML 时,生成有效的 XML。
例如,
{"name":äbc"}
看起来像
<name>abc</name>
转换为 XML。
JSON 输入喜欢,
{
"name1":äbc",
"name2":äbc"
}
看起来像
<name1>abc</name1>
<name2>abc</name2>
现在 name1 和 name2 XML 元素没有根元素,因此 OpenESB 无法处理它。
如果您将 JSON 输入为
{
"someRootElement":{
"name1":äbc",
"name2":äbc"
}
}
,转换后的 XML 就像,
<someRootElement>
<name1>abc</name1>
<name2>abc</name2>
</someRootElement>
这应该适用于您的情况。 :)
如果字符串中有 JSON,您可以通过将其值设置到变量的以下 属性 中来传递它。
<copy>
<from>'{"name" : "abc", "age" : "23"}'</from>
<to variable="RestOutboundIn" part = "part1"/>
</copy>
<copy>
<from variable="RestOutboundIn" part = "part1"/>
<to variable="RestOutboundIn" sxnmp:nmProperty="org.glassfish.openesb.rest.entity"/>
</copy>
注意:此 属性 在 OpenESB bpel 编辑器中不可用。您必须通过 XML 来源设置它的值。
您可以创建自己的组件,这将是处理 json 到 xml、xml 到 json 的最简单方法。如果需要更多详细信息,请告诉我。
我正在创建一个简单的 OpenESB 应用程序。 在左边,我有一个休息呼入伙伴 link,在右边,我正在呼叫一个休息呼出伙伴 link。 我试图将 json 传递给服务,但 openESB 自动解析它并将其转换为 XML.
所以问题是如何阻止 open esb 将 json 字符串转换为 xml,因为该服务不接受 xml 输入。
您的开放式 ESB 应用程序似乎配置为 xml 格式,因此如果您调用 json 服务,它会转换为 xml。此 link 或许能够帮助您在 ESB https://docs.wso2.com/display/ESB403/ESB+and+JSON.
中实施 JSONOpenESB 只能处理 XML。
对于 consume-types=[ "application/json" ]
JSON 输入会自动转换为 XML 以便进一步处理并在需要时调用任何外部合作伙伴链接。
对于produce-types=[ "application/json" ]
XML数据被OpenESB转换成JSON。
要达到同样的效果,您的 JSON 必须采用一种格式,当转换为 XML 时,生成有效的 XML。
例如,
{"name":äbc"}
看起来像
<name>abc</name>
转换为 XML。
JSON 输入喜欢,
{
"name1":äbc",
"name2":äbc"
}
看起来像
<name1>abc</name1>
<name2>abc</name2>
现在 name1 和 name2 XML 元素没有根元素,因此 OpenESB 无法处理它。
如果您将 JSON 输入为
{
"someRootElement":{
"name1":äbc",
"name2":äbc"
}
}
,转换后的 XML 就像,
<someRootElement>
<name1>abc</name1>
<name2>abc</name2>
</someRootElement>
这应该适用于您的情况。 :)
如果字符串中有 JSON,您可以通过将其值设置到变量的以下 属性 中来传递它。
<copy>
<from>'{"name" : "abc", "age" : "23"}'</from>
<to variable="RestOutboundIn" part = "part1"/>
</copy>
<copy>
<from variable="RestOutboundIn" part = "part1"/>
<to variable="RestOutboundIn" sxnmp:nmProperty="org.glassfish.openesb.rest.entity"/>
</copy>
注意:此 属性 在 OpenESB bpel 编辑器中不可用。您必须通过 XML 来源设置它的值。
您可以创建自己的组件,这将是处理 json 到 xml、xml 到 json 的最简单方法。如果需要更多详细信息,请告诉我。