Преобразование одного объекта типа данных в другой объект типа данных в WSO2 Config Lang - PullRequest
0 голосов
/ 30 мая 2018

Я пытаюсь преобразовать одну полезную нагрузку json в другую, я пытался использовать DataMapper, но выходная полезная нагрузка не соответствует входной полезной нагрузке, поэтому я не могу сопоставить обе данные.

Я пытался с помощью enrichпосредник, но я не могу найти дорогу.

вход 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 голосов
/ 31 мая 2018

Сначала вы должны увидеть требование, есть ли один элемент или несколько.Если это один элемент, тогда лучше всего использовать посредник полезной нагрузки, как предлагалось ранее.Если вам нужно несколько элементов, выполните следующие шаги:

Шаг 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-посредник для преобразования в желаемую полезную нагрузку.

<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>
0 голосов
/ 31 мая 2018

Если это всего лишь один запрос BalanceEnquiryRequest, вы можете использовать посредник PayloadFactory .

<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>
...