3

SOAP :: Liteサーバーにリクエストを送信しようとしていますが、ベンダーは、MessageSourceがMessageContentの前にあるリクエストを送信することを望んでいますが、ハッシュをSOAP :: Liteに渡すと、常にその逆になります。

Tie::IxHashを使用してみましたが無駄になりました。

XMLをで手書きすることを考えていますがSOAP::Data->type('xml' => $xml_content)、サポートするのが非常に面倒になる回避策のように感じます。

4

1 に答える 1

3

私は個人的にSOAP::Data::Builder、SOAP::Dataを構築してSOAP::Liteに渡すために使用することを好むことに気づきました。

#!/usr/bin/perl
use 5.006;
use strict;
use warnings;
use SOAP::Lite +trace => [ 'debug' ];
use SOAP::Data::Builder;

my $req1 = SOAP::Lite->new(
    readable => 1,
    autotype => 0,
    proxy    => 'https://example.com/mysoapuri',
);


my $sb = SOAP::Data::Builder->new;
$sb->autotype(0);


$sb->add_elem(
    name  => 'clientLibrary',
    value => 'foo',
);

$sb->add_elem(
    name  => 'clientLibraryVersion',
    value => 'bar',
);

$sb->add_elem(
    name  => 'clientEnvironment',
    value => 'baz',
);

my $ret = $req1->requestMessage( $sb->to_soap_data );

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

<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" 
    xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <requestMessage>
      <clientLibrary>foo</clientLibrary>

      <clientLibraryVersion>bar</clientLibraryVersion>

      <clientEnvironment>baz</clientEnvironment>
    </requestMessage>
  </soap:Body>
</soap:Envelope>

注:別の依存関係を追加することはカードに含まれていない可能性があることを認識しています...残念ながら、データを正しく取得するための他の方法を実際に理解したことはありません。

于 2011-08-19T22:32:49.543 に答える