wso2 中的 xml 到 json 转换

use*_*222 5 xml xslt json wso2 wso2-esb

当我尝试使用 wso2 中的 XSLT 中介器将 XML 转换为 Json 时,我收到“有效负载无法写为 JSON”。错误。谁能帮我解决这个问题。

提前致谢

Mil*_*ehr 7

为什么不使用有效负载工厂?这是将 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"/>
Run Code Online (Sandbox Code Playgroud)

或者使用此属性发送消息:

<property name="messageType" value="application/json" scope="axis2"/>
Run Code Online (Sandbox Code Playgroud)

media-type 属性指定是否将消息格式化为 XML 还是 JSON。在此示例中,我使用 JSON 来转换此 xml:

<USER>
    <description>some Notes</description>
    <others></others>
</USER>
Run Code Online (Sandbox Code Playgroud)

和 ESB 结果:

{
    "error" : "0",
    "message" : "Some notes",
    "data"  : {
        "description" : "Some notes",
        "others" : ""
    }
}
Run Code Online (Sandbox Code Playgroud)

有关有效负载工厂的更多信息,请参阅此链接: https ://docs.wso2.com/display/ESB490/PayloadFactory+Mediator

更新:

您必须使用 switch case 或过滤介体。例如,这是一个开关盒示例。您必须完成正则表达式:

 <switch source="//body">
        <case regex="">
           <payloadFactory media-type="json">

           </payloadFactory>
        </case>
 </switch>
Run Code Online (Sandbox Code Playgroud)

或者你可以使用过滤器。在此示例中,过滤器与给定的正则表达式或 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>
Run Code Online (Sandbox Code Playgroud)

此链接应该对您有帮助: https ://docs.wso2.com/display/ESB490/Filter+Mediator


小智 5

如果您尝试将 SOAP 服务转换为 REST 服务,可以通过将消息类型指定为(在 REST API 中)来实现:

 <property name="messageType" value="application/json" scope="axis2"/>
Run Code Online (Sandbox Code Playgroud)