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 回答