1

SOAP::Lite を使用して外部サービスに接続しています。試行錯誤と他社とのやり取りの末、問題を発見しました。

私のコードは次のようになります。

$soap = new SOAP::Lite
    ->service($wsdl_link)
    ->uri($url_link)
    ->proxy($proxy_link)
    ->on_action(sub { sprintf '"%s%s"', shift, shift });
my $resp = $soap->call('CreateAssignment',SOAP::Data->type('xml'=>$xml),
                                SOAP::Header->type('xml'=>$headXML));

これにより、次の xml が生成されます。

<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope  xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"   >
<soap:Header>
...
</soap:Header>
<soap:Body>
<CreateAssignment xmlns="url_link">
...
</CreateAssignment></soap:Body></soap:Envelope>

(url_linkは有効な URL です)

追加の名前空間を定義する必要があります。->ns(namespace, prefix)私は自分のコードに追加することでこれを行いました。ただし、これにより、追加の名前空間が " envelope" タグに追加されます。CreateAssignment会社から、名前空間は " " タグ上にある必要があると通知されました。実際、適切な変更を加えて SOAP UI を使用して実行すると、見事に動作します。

CreateAssignment" " タグを xml に追加してcall()、メソッドなしで関数を実行しようとしました。SOAP::Lite は、xml を一般的なタグでラップします。

SOAP::Lite のドキュメントを読んだり、検索エンジンに尋ねたり、同僚に尋ねたりしましたが、誰も答えがありません。

SOAP::Lite に名前空間宣言を必要な場所に配置させる方法はありますか?

そうでない場合、使用するのに適したモジュールは何ですか?

4

1 に答える 1