Как я могу изменить порядок, в котором элементы xml запроса SOAP :: Lite генерируются в perl? - PullRequest
3 голосов
/ 20 августа 2011

Я пытаюсь сделать запрос к SOAP :: Lite серверу, и поставщик хочет, чтобы я отправил запрос, когда MessageSource предшествует MessageContent, но когда я передаю свой хэш SOAP :: Lite всегда наоборот.

Я пытался использовать Tie :: IxHash безрезультатно.

Я думаю о том, чтобы просто написать XML с помощью SOAP::Data->type('xml' => $xml_content), но это действительно похоже на обходной путь, который будет очень раздражать в поддержке.

1 Ответ

3 голосов
/ 20 августа 2011

Я лично обнаружил, что я предпочитаю использовать 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>

Примечание: Я понимаю, что добавление еще одной зависимости не может быть в карточках ... к сожалению, я так и не выяснил, как еще правильно сделать мои данные правильными.

...