WSO2 EI преобразует входящий запрос Json в XML и отправляет его в конечную точку WSDL - PullRequest
0 голосов
/ 05 июля 2019

Когда я отправляю JSON в прокси-службу wso2, которая преобразует входящий запрос в XML с помощью Payload Mediator. это дает мне ошибку ниже:

{
    "Envelope": {
        "Body": {
            "Fault": {
                "faultcode": "S:Client",
                "faultstring": "Couldn't create SOAP message due to exception: unexpected XML tag. expected: {http://schemas.xmlsoap.org/soap/envelope/}Envelope but found: {http://fcubs.ofss.com/service/FCUBSCcyService}RATESMASTERQUERY_IOFS_REQ"
            }
        }
    }
}

Это мой отправляющий запрос:

{
    "Parameter": {
        "brncode": "CHO",
        "ccy1": "USD",
        "ccy2": "MNT"
    }
}

Это мой сервисный код прокси: Получение Json и отправка XML в конечную точку

      <inSequence>
         <log category="DEBUG" level="full" separator="&#xA;">
            <property name="Request" value="=============Request============"/>
            <property expression="json-eval($)" name="Request"/>
         </log>

это посредник полезной нагрузки, который преобразует Json в XML и отправляется на конечную точку

         <payloadFactory media-type="xml">
            <format>
               <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
                                 xmlns="http://fcubs.ofss.com/service/FCUBSCcyService">
                  <soapenv:Body>
                     <RATESMASTERQUERY_IOFS_REQ>
                        <FCUBS_HEADER>
                           <SOURCE>$1</SOURCE>
                           <UBSCOMP>$2</UBSCOMP>
                           <USERID>$3</USERID>
                           <BRANCH>$4</BRANCH>
                           <SERVICE>FCUBSCcyService</SERVICE>
                           <OPERATION>$5</OPERATION>
                        </FCUBS_HEADER>
                        <FCUBS_BODY>
                           <Rates-Master-IO>
                              <BRNCODE>$4</BRNCODE>
                              <CCY1>$6</CCY1>
                              <CCY2>$7</CCY2>
                           </Rates-Master-IO>
                        </FCUBS_BODY>
                     </RATESMASTERQUERY_IOFS_REQ>
                  </soapenv:Body>
               </soapenv:Envelope>
            </format>
enter code here
            <args>
               <arg evaluator="xml" expression="$trp:Source"/>
               <arg value="FCUBS"/>
               <arg evaluator="xml" expression="$trp:userid"/>
               <arg evaluator="xml" expression="ctx:brncode"/>
               <arg evaluator="xml" expression="$trp:function"/>
               <arg evaluator="xml" expression="ctx:ccy1"/>
               <arg evaluator="xml" expression="ctx:ccy2"/>
            </args>
         </payloadFactory>
         <header name="Accept" scope="transport" value="text/xml"/>
         <property name="messageType" scope="axis2" value="text/xml"/>
      </inSequence>

OutSequence:

 <outSequence>
             <log category="DEBUG" separator="&#xA;">
                <property name="Response" value="=============Response============"/>
                <property expression="json-eval($)" name="Response"/>
             </log>
             <property name="messageType" scope="axis2" value="application/json"/>
             <send/>
          </outSequence>

Как правильно работать? Спасибо

Ответы [ 2 ]

0 голосов
/ 14 июля 2019

За исключением небольшой ошибки, ваши конфигурации выглядят нормально

Ошибка 01: ctx следует изменить как $ ctx

Ошибка 02: Если вы выставляете REST API, вы должны создать REST API [1] не прокси.Прокси-сервисы должны предоставлять сервисы SOAP в WSO2 EI.

Ниже приведен рабочий образец для вашего требования:

<api xmlns="http://ws.apache.org/ns/synapse" name="API_Name" context="/APIBasePath" version="1.0.0" version-type="context">
   <resource methods="POST" url-mapping="/samplePath">
      <inSequence>
         <payloadFactory media-type="xml">
            <format>
               <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="http://fcubs.ofss.com/service/FCUBSCcyService">
                  <soapenv:Body>
                     <RATESMASTERQUERY_IOFS_REQ>
                        <FCUBS_HEADER>
                           <SOURCE>$1</SOURCE>
                           <UBSCOMP>$2</UBSCOMP>
                           <USERID>$3</USERID>
                           <BRANCH>$4</BRANCH>
                           <SERVICE>FCUBSCcyService</SERVICE>
                           <OPERATION>$5</OPERATION>
                        </FCUBS_HEADER>
                        <FCUBS_BODY>
                           <Rates-Master-IO>
                              <BRNCODE>$4</BRNCODE>
                              <CCY1>$6</CCY1>
                              <CCY2>$7</CCY2>
                           </Rates-Master-IO>
                        </FCUBS_BODY>
                     </RATESMASTERQUERY_IOFS_REQ>
                  </soapenv:Body>
               </soapenv:Envelope>
            </format>
            <args>
               <arg xmlns:ns="http://org.apache.synapse/xsd" evaluator="xml" expression="$trp:Source"/>
               <arg value="FCUBS"/>
               <arg xmlns:ns="http://org.apache.synapse/xsd" evaluator="xml" expression="$trp:userid"/>
               <arg xmlns:ns="http://org.apache.synapse/xsd" evaluator="xml" expression="$ctx:brncode"/>
               <arg xmlns:ns="http://org.apache.synapse/xsd" evaluator="xml" expression="$trp:function"/>
               <arg xmlns:ns="http://org.apache.synapse/xsd" evaluator="xml" expression="$ctx:ccy1"/>
               <arg xmlns:ns="http://org.apache.synapse/xsd" evaluator="xml" expression="$ctx:ccy2"/>
            </args>
         </payloadFactory>
         <property name="messageType" value="text/xml" scope="axis2"/>
         <log level="full"/>
         <send>
            <endpoint>
               <address uri="http://www.mocky.io/v2/5185415ba171ea3a00704eed" format="soap11"/>
            </endpoint>
         </send>
      </inSequence>
      <outSequence>
         <respond/>
      </outSequence>
   </resource>
</api>

[1] https://docs.wso2.com/display/EI650/Working+with+APIs

0 голосов
/ 08 июля 2019

payloadFactory работает на soap:Body, поэтому вы не должны создавать soap:Envelope и soap:Body внутри payloadFactory.Просто установите для Content-Type и messageType значение «text / xml», создайте запрос с помощью payloadFactory и отправьте.

...