我正在尝试向SOAP::Lite服务器发出请求,供应商希望我发送 MessageSource 位于 MessageContent 之前的请求,但是当我将哈希传递给SOAP::Lite时,它总是反过来。
我试过使用Tie::IxHash无济于事。
我正在考虑只用 手写 XML SOAP::Data->type('xml' => $xml_content)
,但它真的感觉像是一种解决方法,支持起来真的很烦人。
我正在尝试向SOAP::Lite服务器发出请求,供应商希望我发送 MessageSource 位于 MessageContent 之前的请求,但是当我将哈希传递给SOAP::Lite时,它总是反过来。
我试过使用Tie::IxHash无济于事。
我正在考虑只用 手写 XML SOAP::Data->type('xml' => $xml_content)
,但它真的感觉像是一种解决方法,支持起来真的很烦人。
我个人发现我更喜欢用它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>
注意:我意识到添加另一个依赖项可能不会在卡片中......不幸的是,我从来没有真正弄清楚如何让我的数据正确。