Saya sedang membuat permintaan SOAP dalam Javascript. Saya belum pernah melakukan permintaan SOAP sebelumnya, dan penyedia layanan hanya memiliki kode sampel di Jawa.

Berikut kode sampel Java mereka:

    String applicationPath = "c:\\e-Notify\\";
    String inputDirectory = "inputs\\";
    String outputDirectory = "outputs\\";
    String url = "https://example.com/ENotifyService.svc";  
    String xml = "";
    String resp = "";
    String action = "";
    String inputFilePath = "";
    String outputFilePath = "";     
    try {
        //Encode the URL
        URL urlx = new URL(url);
        //Instance of connection object
        HTTPRequestPoster poster = new HTTPRequestPoster();         
        //Character stream
        Reader data = new StringReader("");

        //Get the XML from the input file
        inputFilePath = applicationPath + inputDirectory + "manage-consultant-list-input.xml";
        xml = FileReader(inputFilePath);
        data = new StringReader(xml);
        //Set operation
        action = "ManageConsultantListRequest";
        //Send request to server and get the response.
        poster = new HTTPRequestPoster();
        resp = poster.postData(data, urlx, action); <==NOTE `ACTION` VARIABLE
        //Write the response to the output file
        outputFilePath = applicationPath + outputDirectory + "manage-consultant-list-output.xml";
        FileWriter(outputFilePath, resp);           
    }
    catch (Exception ex) {
        System.out.println(ex.getMessage());
    }

Per kode sampel yang disediakan oleh pemilik SOAP API, saya perlu mengirim nilai berikut:

<?xml version="1.0"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Body>
    <ManageConsultantListRequest xmlns="http://com.example.services.ServiceModel/2012/eNotifyService">
      <Credentials xmlns:a="http://com.example.services.ServiceModel/2012/Credentials" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
        <a:Username>MyAPIUsername</a:Username>
        <a:Password>MyAPIPassword#1</a:Password>
      </Credentials>
      <Consultants xmlns:a="http://com.example.services.ServiceModel/2012/eNotify" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
        <a:Consultant>
          <a:SubmissionActionCode>A</a:SubmissionActionCode>
          <a:Jurisdiction>IL</a:Jurisdiction>
          <a:LicenseNumber>00000001</a:LicenseNumber>
        </a:Consultant>
      </Consultants>
      <TransactionID>12345</TransactionID>
    </ManageConsultantListRequest>
  </s:Body>
</s:Envelope>

Saya sedang melihat paket sabun npm< /a>.

import soap from 'soap'; //https://www.npmjs.com/package/soap

let url = 'https://example.com/ENotifyService.svc';
let args = {name: 'value'};
soap.createClient(url, function(err, client) {
    client.MyFunction(args, function(err, result) { <==WHERE TO PUT DATA FROM `ACTION` VARIABLE??
        console.log(result);
    });
});

Saya rasa saya mungkin mendapatkan data XML yang saya butuhkan ke dalam format JSON menggunakan sesuatu seperti teknik yang dijelaskan di https://davidwalsh.name/convert-xml-json.

Saya belum tahu:

  • Cara mendapatkan data yang terdapat dalam variabel Java action, ke dalam panggilan paket sabun npm. Sepertinya tidak ada tempat untuk itu. ???

Terima kasih banyak sebelumnya atas pemikiran/saran/info!

PEMBARUAN: Jika ada yang ingin menunjukkan cara melakukannya menggunakan paket sabun alternatif, itu akan menjadi jawaban yang diterima juga!

0
VikR 14 Agustus 2019, 04:52

1 menjawab

Jawaban Terbaik

Saya sebenarnya membayar seseorang di UpWork untuk membantu saya mengetahui hal ini! Tak satu pun dari kami dapat menemukan cara agar paket npm soap berfungsi di API ini. Namun, ia memberikan pendekatan alternatif ini, yang berhasil:

var request = require("request");
var rawXML = ''; //your xml goes here
var options = { method: 'POST',
    url: 'https://example.com/eNotifyService.svc',
    qs: { asmx: '' },
    headers:
        { 'cache-control': 'no-cache',
            Connection: 'keep-alive',
            'content-length': '1960',
            'Cache-Control': 'no-cache',
            Accept: '*/*',
            'User-Agent': 'PostmanRuntime/7.15.0',
            Host: 'example.com',
            SOAPAction: '"requestedAction"',
            'Accept-Encoding': 'gzip,deflate',
            'Content-Type': 'text/xml;charset=UTF-8' },
    body: rawXML };

request(options, function (error, response, body) {
    if (error) throw new Error(error);

    console.log(body);
});
0
VikR 24 Agustus 2019, 18:42