SOAP :: Lite генерирует «переполнение» для сложного типа «Массив» - PullRequest
1 голос
/ 20 февраля 2012

Я использую SOAP :: Lite для связи с "SOAP" -Service-WSDL (ASMX соответственно).Эта служба требует массив аргументов, например:

<scriptParameters>
  <string>string</string>
  <string2>string2</string2>
</scriptParameters>

В Perl я использую следующий код:

my @args;
my @params;
foreach (keys %{$self->{args}}) {
    push(@params, SOAP::Data->name($_ => $self->{args}->{$_})->type(""));
}
push(@data, SOAP::Data->name("scriptParameters" => SOAP::Data->value(\@params)->type(""))->type(""));

Но это создает следующий XML:

<scriptParameters soapenc:arrayType="xsd:anyType[11]" xsi:type="namesp20">
  <job_id xsi:type="xsd:int">18381</job_id>
  <dump xsi:type="xsd:int">0</dump>
</scriptParameters

Обратите внимание на soapenc: arrayType ... -материал в элементе scriptParameters-Element.

Проблема теперь в том, что ASMX-Service не распознает массив scriptParameters (я думаю, что из-за soapenc-вещи (к сожалению, это не отладка). У кого-нибудь есть идеи, как я могу получитьизбавиться от дополнительных данных?

Спасибо:)

1 Ответ

0 голосов
/ 25 февраля 2012

Не зная действительного сервиса и не имея возможности экспериментировать с различными вариантами, это немного сложно.Но по моему опыту использование "soapenc: arrayType" является симптомом SOAP :: Lite, полагая, что этот сервис является сервисом SOAP с кодировкой RPC, а не документом / литералом или RPC / литералом.Так что проверьте, какой метод вы используете для создания прокси службы, метод '$ soap-> service ($ WSDL)' предполагает RPC / кодированный, но метод $ soap-> proxy () обеспечивает больший контроль за счетнекоторые дополнительные сложности.

Убедить SOAP :: Lite в создании правильного XML может быть немного сложно.Посмотрите на следующие сайты некоторые советы о том, как с помощью SOAP :: Lite создавать конкретные структуры данных:

Из более позднего примера приведен пример кода для веб-службы EB-eye (ebeye_soaplite.pl)быть наиболее полезным, так как он часто использует списки / массивы.

В зависимости от того, насколько вы связаны с SOAP :: Lite, вы можете захотеть взглянуть на альтернативы.Я обнаружил, что XML :: Compile :: SOAP немного проще в использовании со службами документа / литерала SOAP, которые используют сложные типы.

...