【发布时间】:2015-10-31 13:31:12
【问题描述】:
当我尝试在 wso2 中使用 XSLT 中介将 XML 转换为 Json 时,我收到“无法将有效负载写为 JSON”。错误。谁能帮我解决这个问题。
提前致谢
【问题讨论】:
-
如果您能提供更多信息,即您所做的配置会更好
-
@Rajeev 这是我完成的配置
标签: json xml xslt wso2 wso2esb
当我尝试在 wso2 中使用 XSLT 中介将 XML 转换为 Json 时,我收到“无法将有效负载写为 JSON”。错误。谁能帮我解决这个问题。
提前致谢
【问题讨论】:
标签: json xml xslt wso2 wso2esb
为什么不使用有效载荷工厂?这是将 xml 转换为 Json 的最佳方式。
例如:
<payloadFactory media-type="json">
<format>{ "error": "0", "message": "$1", "data": $2 }</format>
<args>
<arg evaluator="json" expression="$.USER.description"/>
<arg evaluator="json" expression="$.USER"/>
</args>
</payloadFactory>
<property name="ContentType" value="application/json" scope="axis2"/>
或使用此属性发送消息:
<property name="messageType" value="application/json" scope="axis2"/>
media-type 属性指定消息的格式是 XML 还是 JSON。 在这个例子中,我使用 JSON 来转换这个 xml:
<USER>
<description>some Notes</description>
<others></others>
</USER>
以及 ESB 结果:
{
"error" : "0",
"message" : "Some notes",
"data" : {
"description" : "Some notes",
"others" : ""
}
}
有关有效载荷工厂的更多信息,请参阅此链接: https://docs.wso2.com/display/ESB490/PayloadFactory+Mediator
更新:
您必须使用开关盒或过滤器中介。 例如,这是一个开关案例示例。你必须完成正则表达式:
<switch source="//body">
<case regex="">
<payloadFactory media-type="json">
</payloadFactory>
</case>
</switch>
或者你可以使用过滤器。在此示例中,过滤器匹配您给定的正则表达式或 XPath。如果此评估返回 true,它将发送 true json。如果评估返回 false,则返回空 json。
<filter (source="[XPath|json-eval(JSONPath)]" regex="string") | xpath="[XPath|json-eval(JSONPath)]">
<then>
<payloadFactory media-type="json">
<format>{josn:"body"}</format>
<args>your args<args/>
</payloadFactory>
</then>
<else>
<payloadFactory media-type="json">
<format>{}</format>
<args/>
</payloadFactory>
</else>
</filter>
此链接应该可以帮助您: https://docs.wso2.com/display/ESB490/Filter+Mediator
【讨论】:
如果您尝试将soap服务转换为rest,您可以通过将消息类型指定为(在rest api中)来实现:
<property name="messageType" value="application/json" scope="axis2"/>
【讨论】: