在WSO2 Config Lang中将一个数据类型对象转换为另一个数据类型对象

时间:2018-05-30 15:03:56

标签: wso2 wso2esb orchestration

我正在尝试将一个json有效负载转换为另一个,我尝试使用DataMapper,但输出有效负载与输入有效负载不匹配,因此我无法映射这两个数据。

我尝试过富裕的调解员,但我似乎无法找到自己的方式。

输入json

{
    "requestID": "10001",
    "requestMode": "mode34",
    "channelCode": "34",
    "agentBusinessName": "34",
    "agentNumber": "34",
    "agentInstitutionCode": "001",
    "agentAccountNumber": "098788"
}

输出json

{
    "BalanceEnquiryRequest": {

        "channel": null,
        "type": "mode34",
        "customerId": "098788",
        "customerIdType": null,
        "submissionTime": null,
        "reqTranId": "10001",
        "passcode": null
    }
}

2 个答案:

答案 0 :(得分:1)

如果它只是一个BalanceEnquiryRequest,您可以使用PayloadFactory mediator

<payloadFactory media-type="json">
    <format>
        {
            "BalanceEnquiryRequest": {
                "channel": null,
                "type": $1,
                "customerId": $2,
                ... etc
            }
        }
    </format>
    <args> 
        <arg evaluator="json" expression="$.requestMode"/>
        <arg evaluator="json" expression="$.agentAccountNumber"/>
        ... etc
    </args>
<payloadFactory>

答案 1 :(得分:0)

首先,您需要查看是否存在单个元素或多个元素的要求。 如果它是单个元素,那么最好的选择是使用前面建议的有效负载中介。 如果您需要多个元素,请按照以下步骤操作。

步骤1:请求进入序列后,使用属性介体将其转换为XML

 <property name="messageType" scope="axis2" type="STRING"
value="application/xml"/>
 <property name="ContentType" scope="axis2" type="STRING" value="application/xml"/>

这会将传入的json转换为XML。

步骤2:现在使用XSLT Mediator转换为所需的有效负载。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output omit-xml-declaration="yes" indent="yes"/>    
    <xsl:template match="/">          
        {
        "BalanceEnquiryRequest": {        
        <xsl:for-each select="//*[local-name()='root']">        
        "channel": null,
        "type": "<xsl:value-of select="requestMode"/>",
        "customerId": "<xsl:value-of select="agentAccountNumber"/>",
        "customerIdType": null,
        "submissionTime": null,
        "reqTranId": "<xsl:value-of select="requestID"/>",
        "passcode": null
        </xsl:for-each>
        }
        }        
    </xsl:template>
</xsl:stylesheet>