Попытка отправить XML с CDATA с использованием узла мыла клиента без успеха - PullRequest
0 голосов
/ 04 ноября 2019

Я пытаюсь создать этот XML-файл как вывод для отправки на сервер:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/" xmlns:agil="http://schemas.datacontract.org/2004/07/Agillitas.Servico.ContratosDeServico">
   <soapenv:Header/>
   <soapenv:Body>
      <tem:Integrar>
         <tem:request>
            <agil:Cabecalho>
               <agil:Metodo>44</agil:Metodo> 
               <agil:PublicKey>PUBLIC_KEY</agil:PublicKey>
               <agil:Senha>PASSWORD</agil:Senha>
               <agil:Usuario>USER</agil:Usuario>
            </agil:Cabecalho>
            <agil:Corpo>
             <![CDATA[
                  <CartaoDisponivelTesouraria>
                      <Empresa>XXXX</Empresa>
                      <Produto>X</Produto>
                      <Moeda>XXX</Moeda>
                  </CartaoDisponivelTesouraria>
            ]]>
            </agil:Corpo>
         </tem:request>
      </tem:Integrar>
   </soapenv:Body>
</soapenv:Envelope>

Я создал класс, чтобы сделать это ...

const soap = require('soap')

module.exports = {
    async run_method_44() {
        // attempt 1
        var args = {
            $xml: "<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/"xmlns:agil="http://schemas.datacontract.org/2004/07/Agillitas.Servico.ContratosDeServico"><soapenv:Header/><soapenv:Body><tem:Integrar><tem:request><agil:Cabecalho><agil:Metodo>44</agil:Metodo><agil:PublicKey>PUBLIC_KEY</agil:PublicKey><agil:Senha>PASSWORD</agil:Senha><agil:Usuario>USER</agil:Usuario></agil:Cabecalho><agil:Corpo><![CDATA[<CartaoDisponivelTesouraria><Empresa>XXXX</Empresa><Produto>X</Produto><Moeda>XXX</Moeda></CartaoDisponivelTesouraria>]]></agil:Corpo></tem:request></tem:Integrar></soapenv:Body></soapenv:Envelope>"
        }

        // attempt 2
        var args2 = {
             _xml: {'soapenv:Envelope': {
                    attributes: {
                        'xmlns:soapenv': 'http://schemas.xmlsoap.org/soap/envelope/',
                        'xmlns:tem': 'http://tempuri.org/',
                        'xmlns:agil': 'http://schemas.datacontract.org/2004/07/Agillitas.Servico.ContratosDeServico',
                    },
                    'soapenv:Body': {
                        'tem:Integrar': {
                            'tem:request': {
                                'agil:Cabecalho': {
                                    'agil:Metodo': 44,
                                    'agil:PublicKey': "PUBLIC_KEY",
                                    'agil:Senha': "PASSWORD",
                                    'agil:Usuario': "USER"
                                },
                                'agil:Corpo': '<![CDATA[<CartaoDisponivelTesouraria><Empresa>XXXX</Empresa><Produto>X</Produto><Moeda>XXX</Moeda></CartaoDisponivelTesouraria>]]>'
                            }
                        }
                    }
                }}
        }

        // client
        client.Integrar(args, function(err, result, rawResponse, soapHeader, rawRequest) {
                console.log(result)
                console.log(rawResponse)
                console.log(soapHeader)
                console.log(rawRequest)
                console.log(err)
            }, {postProcess: function(_xml) {
                console.log(_xml)
                return _xml.replace('IAdminService_Integrar_InputMessage', 'Integrar')
            }})
    }
}

окончательный XML, который отправляется на сервер, отличается от того, что я ожидаю ... Outputed xml

Может кто-нибудь помочь мне выяснить, как предотвратить создание некоторых странных тегов при заключительном запросе?

Итак, проблема:

Мой выданный XML сильно отличается , тогда я ожидаю ... Я пробовал разные решения, но ничего не появляетсяработать ... Кто-нибудь сталкивался с подобным, чтобы дать подсказку, как это исправить?

1 Ответ

1 голос
/ 05 ноября 2019

Я использую xmlbuilder для создания строки xml

const builder = require('xmlbuilder')

const obj = {
    "soapenv:Envelope": {
      "@xmlns:soapenv": "http://schemas.xmlsoap.org/soap/envelope/",
      "@xmlns:tem": "http://tempuri.org/",
      "@xmlns:agil": "http://schemas.datacontract.org/2004/07/Agillitas.Servico.ContratosDeServico",
      "soapenv:Header": "",
      "soapenv:Body": {
        "tem:Integrar": {
          "tem:request": {
            "agil:Cabecalho": {
              "agil:Metodo": "44",
              "agil:PublicKey": "PUBLIC_KEY",
              "agil:Senha": "PASSWORD",
              "agil:Usuario": "USER"
            },
            "agil:Corpo": {
                '#cdata': "\n             \n                  <CartaoDisponivelTesouraria>\n                      <Empresa>XXXX</Empresa>\n                      <Produto>X</Produto>\n                      <Moeda>XXX</Moeda>\n                  </CartaoDisponivelTesouraria>\n            \n            "
            }
          }
        }
      }
    }
  }

const xml = builder.create(obj).end({pretty: true})
console.log(xml);

output

<?xml version="1.0"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/" xmlns:agil="http://schemas.datacontract.org/2004/07/Agillitas.Servico.ContratosDeServico">
  <soapenv:Header/>
  <soapenv:Body>
    <tem:Integrar>
      <tem:request>
        <agil:Cabecalho>
          <agil:Metodo>44</agil:Metodo>
          <agil:PublicKey>PUBLIC_KEY</agil:PublicKey>
          <agil:Senha>PASSWORD</agil:Senha>
          <agil:Usuario>USER</agil:Usuario>
        </agil:Cabecalho>
        <agil:Corpo>
          <![CDATA[

                  <CartaoDisponivelTesouraria>
                      <Empresa>XXXX</Empresa>
                      <Produto>X</Produto>
                      <Moeda>XXX</Moeda>
                  </CartaoDisponivelTesouraria>

            ]]>
        </agil:Corpo>
      </tem:request>
    </tem:Integrar>
  </soapenv:Body>
</soapenv:Envelope>
...