Как мы можем настроить новое поле XML для запроса после медиатора Datamapper в рабочем процессе WSO2? - PullRequest
1 голос
/ 24 февраля 2020

введите описание изображения здесь Пользователь, запрашивающий 3 поля и формат запроса, находится в JSON. Я хочу преобразовать этот запрос в XML, используя медиатор отображения данных. Теперь после конвертации мой запрос конвертируется в XML. Теперь я хочу добавить новое поле XML к тому же запросу в XML. Может кто-нибудь предложить мне или направить меня, как мы можем достичь этого с помощью wso2 интеграции студии.

WSO2 Integration studio: - Версия 7.0.0 Интегратор: - 6.6.0

В ответе от пользователя я получаю 3-4 поля в формате JSON, имя поля - Account Число, NI C, RequestId. Эти поля я собираюсь преобразовать в xml. Теперь я хочу добавить схему stati c xml в genearted 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 запрос, поступающий от клиента) и поля в разделе заголовка выделены дата и время часового пояса (кого я могу обновить с последним временем)

Вся эта схема - мой запрос к моей конечной точке. Кроме того, как я могу сохранить поля stati c, поступающие в запросе (номер счета, Ni c), чтобы использовать его в блоке ответа?

Оригинал XML, как показано ниже

<FIXML xsi:schemaLocation="http://www.finacle.com/fixml executeFinacleScript.xsd" xmlns="http://www.finacle.com/fixml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <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>
        <EntityId></EntityId>
        <EntityType></EntityType>
        <ArmCorrelationId></ArmCorrelationId>
        <MessageDateTime>2019-03-28T11:00:45.880</MessageDateTime>
    </RequestMessageInfo>
      <Security>
        <Token>
          <PasswordToken>
          <UserId>11111</UserId>
          <Password></Password>
          </PasswordToken>
        </Token>
        <FICertToken></FICertToken>
        <RealUserLoginSessionId></RealUserLoginSessionId>
        <RealUser></RealUser>
        <RealUserPwd></RealUserPwd>
        <SSOTransferToken></SSOTransferToken>
      </Security>
    </RequestHeader>
  </Header>
  <Body>
    <executeFinacleScriptRequest>
      <ExecuteFinacleScriptInputVO>
        <requestId>validateAcct.scr</requestId>
      </ExecuteFinacleScriptInputVO>
      <executeFinacleScript_CustomData>
        <ACCT_NUM>01122507576</ACCT_NUM>
        <PHONE_NUM>59887834</PHONE_NUM>
        <NIC>G2105493001653</NIC>
      </executeFinacleScript_CustomData>
    </executeFinacleScriptRequest>
  </Body>
</FIXML>

JSON преобразование выше одного, как показано ниже

{
    "FIXML": {
        "Header": {
            "RequestHeader": {
                "MessageKey": {
                    "RequestUUID": "FEBA_1553756445880",
                    "ServiceRequestId": "executeFinacleScript",
                    "ServiceRequestVersion": "10.2",
                    "ChannelId": "COR"
                },
                "RequestMessageInfo": {
                    "BankId": "04",
                    "TimeZone": "GMT+05:00",
                    "EntityId": "",
                    "EntityType": "",
                    "ArmCorrelationId": "",
                    "MessageDateTime": "2019-03-28T11:00:45.880"
                },
                "Security": {
                    "Token": {
                        "PasswordToken": {
                            "UserId": "11111",
                            "Password": ""
                        }
                    },
                    "FICertToken": "",
                    "RealUserLoginSessionId": "",
                    "RealUser": "",
                    "RealUserPwd": "",
                    "SSOTransferToken": ""
                }
            }
        },
        "Body": {
            "executeFinacleScriptRequest": {
                "ExecuteFinacleScriptInputVO": {
                    "requestId": "validateAcct.scr"
                },
                "executeFinacleScript_CustomData": {
                    "ACCT_NUM": "01122507576",
                    "PHONE_NUM": "59887834",
                    "NIC": "G2105493001653"
                }
            }
        }
    }
}

Ответы [ 2 ]

2 голосов
/ 26 февраля 2020

Исходя из вашего варианта использования, я хотел бы предложить подход с использованием Payload Mediator, а не использовать 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>

Таким образом, вы можете определить внутреннюю полезную нагрузку stati c внутри 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>

ОБНОВЛЕНИЕ

Вы также можете использовать сам Datamapper для добавления константы в выходную полезную нагрузку. Пожалуйста, обратитесь к приведенному ниже примеру.

Integration Studio Datamapper

0 голосов
/ 28 февраля 2020

enter image description hereenter image description here Спасибо, Арунан, за вашу постоянную поддержку. Внедрите его с помощью посредника полезной нагрузки, как вы предлагаете.

Посредник полезной нагрузки: - 1. Вы можете использовать встроенную схему XML или JSON в соответствии с вашими требованиями. В моем случае я взял встроенный XML, который запрашивает мою конечную точку.

Как это работает? Предположим, вы запрашиваете некоторые поля JSON и хотите, чтобы некоторые поля stati c добавили в ту же схему и в дальнейшем хотели выводить в XML. Теперь вы можете определить схему XML (полную схему в соответствии с вашими требованиями в полезной нагрузке) и обновить значение элементов в этой встроенной схеме XML, используя выражение пути JSON. JSON Выражение пути, когда входной запрос находится в JSON, и вы хотите получить доступ к значению элемента того же выражения XPath для XML.

JSON Выражение пути: - $. (полный json запрос) Выражение Xpath: - / RootTag из XML (полное XML тело)

Выходные данные фабричного посредника полезной нагрузки: - Это SOAP XML

Почему не Datamapper? Одна из самых важных вещей, которую вы должны учитывать при использовании Data Mapper, - вам нужна правильная схема ввода и вывода. Если схема неверна, она не будет работать, могут повлиять небольшие изменения. Но это также один из самых эффективных способов сделать. Он напрямую отображает и преобразует ваш запрос в XML, JSON, CSV, а также дает некоторый расчетный подход для выполнения манипуляций с данными запроса.

...