2016-03-22 12 views
0

現在、ノードベースのアプリケーションでSOAPベースのサービスにリクエストしようとしています。私はノード・ソープ・モジュールを利用してこれを処理しています。 https://github.com/vpulim/node-soapSOAPを使用したWebサービスへの接続

は現在、私は私はあなたから見ることができるように、次の

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:doc="http://xxx.xxx.com"> 

    <soapenv:Header/> 

    <soapenv:Body> 

     <doc:getAllDocsisVideoInfo> 

     <appKey>"appKey"</appKey> 

     <mac>xxxxxxx</mac> 

     </doc:getAllDocsisVideoInfo> 

    </soapenv:Body> 

</soapenv:Envelope> 

として、XML形式のサンプル要求を持って、サービスの応答を次の実装

var soap = require('soap'); 
var url = 'http:/xxxx/xxxx/xxxx?WSDL'; 
var appKey = 'ABYRCEE'; 
var xml = { 
    appKey: appKey, 
    mac: 'xxxxxxxx' 
} 

soap.createClient(url, function(err, client){ 
    //console.log('Client:', client); 
    client.getAllDocsisVideoInfo(xml, function(err, result){ 
     if(err){ 
      console.log(err); 
     } 
    }); 
}); 

を持っています上記の私はのappKeyのMACの値を渡さなければなりません。これが成功すれば、これはsuccessfu lレスポンスを適切なレスポンスでxml形式で出力します。

私はクライアントオブジェクトは適切な関数で戻ら見ることができるけど、client.getAllDocsisVideoInfo(....)を呼び出すときに、私は次のエラーに

Sを見ているようですクライアント:{} getAllDocsisVideoInfoのディスパッチメソッドが見つかりません

私はその理由がわかりません。それはxmlオブジェクトを渡しているので、サンプルリクエストをどのように渡すのですか?

https://www.npmjs.com/package/soap

あなたは次のように関数を呼び出すために持っているように見えます:あなたはあなたのようにそれを呼び出したい場合は

client.getAllDocsisVideoInfo(xml, function(err, result, raw, soapHeader){ 

}) 

ノード・石鹸のAPIを見てみると

+1

a:console.log(client.describe());あなたがクライアントに関する情報を得るかどうかを知る(メソッドなど)。あなたは何か情報を取得していない場合、私はあなたのURLが何とか間違っているのだろうか? – cloaked

+0

私はそれが私に必要な機能を与えたことを試みました – RRP

答えて

0

これで時間を費やして頭を叩いた後、名前空間プレフィックスを無効にして名前空間プレフィックスを無効にすることで、成功した応答を得ることができました。例えば

var xml = { 
    ':appKey': appKey, 
    ':mac': 'xxxxxxxx' 
} 

代わり

var xml = { 
    appKey: appKey, 
    mac: 'xxxxxxxx' 
} 

ノード石鹸ドキュメントのこの部分として渡されるために必要な次のオブジェクト[https://github.com/vpulim/node-soap#overriding-the-namespace-prefix][1]問題を考え出すに役立ちました。

+0

それは本当にあなたの問題を解決すれば、あなた自身の答えを受け入れてください。 – Blogueira

0

あなたのコードでそれを持っていたら、次のコードを使用する必要があります:

APIからコピー&ペースト...

client.MyService.MyPort.MyFunction({name: 'value'}, function(err, result) { 
     // result is a javascript object 
    }) 
+0

これは、同僚の助けを借りて問題を把握し、関数に引数を渡すときに名前空間の接頭辞を無効にすることでした – RRP

関連する問題