web-dev-qa-db-ja.com

node-soapで、生成されたXML SOAPリクエストを表示/デバッグするにはどうすればよいですか?

私はこのようなnode-soapモジュールを使おうとしています:

const soap = require('soap');

soap.createClient('some-wsdl-url', function(err, client) {
    const args = {
        'ValidateCustomerRequest': {
            'memberNumber': 12345
        }
    };

    client.ValidateCustomer(args, function(err, result) {
        console.log(result);
    });
});

これで、Webサービスから「無効な形式」の応答が返されます。これをデバッグするために、実際のXMLがWebサービスに送信される様子を確認したいと思います。

私はすでにこれを試しました:

require('request').debug = true

...これは 別のSO回答 で提案されました。

しかし、出力はそれほど役に立ちません。

[ERROR] REQUEST { uri:
  Url { ... },
  method: 'GET',
  headers:
   { 'User-Agent': 'node-soap/0.18.0',
     Accept: 'text/html,application/xhtml+xml,application/xml,text/xml;q=0.9,*/*;q=0.8',
     'Accept-Encoding': 'none',
     'Accept-Charset': 'utf-8',
     Connection: 'close',
     Host: 'xxx' },
  followAllRedirects: true,
  body: null,
  callback: [Function] }

そこに「ValidateCustomerRequest」が表示されず、本文がnullです。また、なぜメソッドがGETなのか疑問に思っていますが、POSTではないでしょうか。

それで、このデバッグ出力は正常に見えますか、および/または作成されたXML要求を確認する別の方法はありますか?

10
ush189

ドキュメント のこのビットを見落としました:

Client。lastRequest-クライアントロギングの最後の完全なSOAPリクエストを含むプロパティ

これは、Webサービス呼び出しのコールバック内でログに記録できます。したがって、上記のコードは次のようになります。

const soap = require('soap');

soap.createClient('some-wsdl-url', function(err, client) {
    const args = {
        'ValidateCustomerRequest': {
            'memberNumber': 12345
        }
    };

    client.ValidateCustomer(args, function(err, result) {
        console.log(result);
        console.log('last request: ', client.lastRequest) // <-- here
    });
});

これにより、生成されたXML要求が出力されます。

26
ush189