我们如何配置新的XML字段以在WSO2工作流程中的Datamapper介体之后请求?

问题描述 投票:0回答:1

具有3个字段和请求格式的用户请求使用JSON。我要做的是使用数据映射器介体将请求转换为XML。现在,转换后,我的请求转换为XML。现在,我想向XML中的相同请求添加一个新的XML字段。任何人都可以向我建议或指导我如何使用wso2 Integration Studio实现它。

WSO2 Integration studio:-版本7.0.0积分器:-6.6.0

在来自用户的请求中,我收到3-4个JSON格式的字段,字段名称是帐号,NIC,RequestId。我将这些字段转换为xml。现在,我想将静态xml架构添加到通用XML,并且此完整的xml可以根据要求发送给我的api

下面是过程。请建议我如何实现这一目标。1.来自JSON的客户端请求。包含3-4个字段,如下所示。

{
  "FIXML":{
   "@schemaLocation": "http://www.finacle.com/fixml executeFinacleScript.xsd", 
 "Body": {
         "executeFinacleScript_CustomData": {
            "ACCT_NUM": "01122507576",
            "PHONE_NUM": "59887834",
            "NIC": "G2105493001653"
         }
      }
   }
}

2. My endpoint need XML as a response and I want to store static XML schema somewhere. My static schema as below. which also has TimeZone and DateTime fields which I also want to update before requesting to the endpoint.
<FIXML>
  <Header>
    <RequestHeader>
      <MessageKey>
        <RequestUUID>FEBA_1553756445880
        </RequestUUID>
        <ServiceRequestId>executeFinacleScript
        </ServiceRequestId>
        <ServiceRequestVersion>10.2
        </ServiceRequestVersion>
        <ChannelId>COR
        </ChannelId>
      </MessageKey>
      <RequestMessageInfo>
        <BankId>04
        </BankId>
        **<TimeZone>GMT+05:00
        </TimeZone>
        <MessageDateTime>2019-03-28T11:00:45.880
        </MessageDateTime>**
      </RequestMessageInfo>
      <Security>
        <Token>
          <PasswordToken>
            <UserId>11111.0
            </UserId>
          </PasswordToken>
        </Token>
      </Security>
    </RequestHeader>
  </Header>
  <Body>
    <executeFinacleScriptRequest>
      <ExecuteFinacleScriptInputVO>
        <requestId>validateAcct.scr
        </requestId>
      </ExecuteFinacleScriptInputVO>
      <executeFinacleScript_CustomData>
        **<ACCT_NUM>01122507576
        </ACCT_NUM>
        <PHONE_NUM>5.9887834E7
        </PHONE_NUM>
        <NIC>G2105493001653
        </NIC>**
      </executeFinacleScript_CustomData>
    </executeFinacleScriptRequest>
  </Body>
</FIXML>

XML模式主体部分突出显示的字段是我要根据客户端请求(来自客户端的JSON请求)进行更新的字段,而Header部分突出显示的字段是日期时间和时区(我可以使用最近时间)

整个架构是我对端点的请求。另外,如何存储请求中使用的静态字段(帐号,Nic)以在响应块中使用它?

wso2 wso2esb wso2ei
1个回答
1
投票

根据您的用例,我建议使用有效负载调解器方法,而不要使用Datamapper。请为PayloadMediator找到以下示例序列。

<payloadFactory media-type="xml">
        <format>
            <Person xmlns="">
                <AccountNumber>$1</AccountNumber>
                <NIC>$2</NIC>
                <RequestId>$3</RequestId>
                <static>Payload</static>
            </Person>
        </format>
        <args>
            <arg evaluator="json" expression="$.AccountNumber"/>
            <arg evaluator="json" expression="$.NIC"/>
            <arg evaluator="json" expression="$.RequestId"/>
        </args>
    </payloadFactory>

这样,您可以在xml中定义静态有效负载内联,并将json值作为参数传递。这种方法比使用Datamapper更简单,更有效。

但是如果您仍然想使用datamapper,则可以使用XSLT中介程序将新的XML字段添加到有效负载中。您可以在XSLT下面使用。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
   <!-- Identity transform -->
   <xsl:template match="/Person">
      <xsl:copy>
        <xsl:copy-of select="*"/>
        <static>Payload</static>
    </xsl:copy>
   </xsl:template>
</xsl:stylesheet>
© www.soinside.com 2019 - 2024. All rights reserved.