如何在Node.js中以XML格式显示SOAP信封?

时间:2018-11-14 16:57:59

标签: node.js xml soap

我有一个使用Node.js的简单SOAP服务,但是在弄清楚如何构建项目所需的正确信封结构时遇到了麻烦。

有没有一种方法可以显示发送到服务器的XML格式的SOAP信封?

我也尝试了forceSoap12Headers:true`,但是它没有在服务器中调用v12方法。这里的任何提示都会很棒。

服务器

    "use strict";
    var soap = require('soap');
    var http = require('http');
    var myService = {
          ACME: {
            ACMESoap: {
              CalcFee: function(args, callback) {
                      callback({
                          "ns1:barcodeReceive": args.cardNumber,
                          "ns1:requestId": args.requestId,
                          "ns1:calculatedFee": 0.15
                      });
                  },
              LoadCard: function(args, callback) {
                      callback({
                          "ns1:barcodeReceived": args.cardNumber,
                          "ns1:requestId": args.requestId,
                          "ns1:transactionAmount": '100.00',
                          "ns1:currency": 'EUR'
                      });
                  }
            },
            ACMESoap12: {
              CalcFee: function(args, callback) {
                      callback({
                          "ns1:barcodeReceived": args.cardNumber,
                          "ns1:calculatedFee": 0.15
                      });
                  },
              LoadCard: function(args, callback) {
                      callback({
                          "ns1:barcodeReceived": args.cardNumber,
                          "ns1:transactionAmount": '100.00',
                          "ns1:currency": 'EUR'
                      });
                  }
            }
          }
        };
    var port = 7777;
    var xml = require('fs').readFileSync('ACMEService.wsdl','utf8');
    var server = http.createServer(function(request,response) {  
      response.end("404: Not Found: " + request.url);
    });
    console.log('Started server on port ' + port);
    server.listen(port);

    soap.listen(server,'/wsdl',myService, xml);

客户

    "use strict";
    console.log('Started Client...');
    const util = require('util')
    var soap = require('soap');
    var url = 'http://ACME.net:7777/wsdl?wsdl';
    var args = {
      requestId: '2833007',
      cardNumber: '3452345234'
    };
    var args2 = {
      requestId: '2833008',
      cardNumber: '56345634563'
    };
    var options = {
        forceSoap12Headers: true
    };
    soap.createClient(url, options, function(err,client) {
      client.CalcFee(args,function(err, result, rawResponse) {
        console.log(rawResponse);
        // console.log(client.describe());
      });
      client.LoadCard(args2,function(err,result, rawResponse) {
        console.log(rawResponse);
      });
    });

1 个答案:

答案 0 :(得分:0)

我发现我可以将请求发送回客户端以进行显示。

服务器

...
callback({
    "tns:RECEIVED_ENVELOPE": args
});
...