SOAP :: Lite在复杂类型“Array”上生成“溢出”

时间:2012-02-20 12:25:24

标签: perl soap wsdl asmx

我使用SOAP :: Lite与“SOAP”-Service-WSDL(ASMX resp)进行通信。 此服务需要一组参数,如下所示:

<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

请注意scriptParameters-Element中的 soapenc:arrayType ... -stuff。

现在的问题是,ASMX-Service无法识别scriptParameters数组(我想因为soapenc-stuff(不幸的是这不是可调试的)。有没有人知道我怎么能摆脱它其他数据?

谢谢:)

1 个答案:

答案 0 :(得分:0)

在不知道实际服务且无法尝试各种选项的情况下,这有点困难。但根据我的经验,使用“soapenc:arrayType”是SOAP :: Lite的症状,认为该服务是RPC /编码的SOAP服务,而不是document / literal或RPC / literal。因此,请检查您使用哪种方法来创建服务代理,'$ soap-&gt;服务($ WSDL)'方法假设为RPC / encoded,但'$ soap-&gt; proxy()'方法允许更多控制,一些额外的复杂性。

说服SOAP :: Lite生成正确的XML可能有点棘手。有关如何使用SOAP :: Lite构建特定数据结构的一些提示,请查看以下站点:

从后面开始,EB-eye网络服务的示例代码(ebeye_soaplite.pl)可能是最有用的,因为它使用了很多列表/数组。

根据您与SOAP :: Lite的关联程度,您可能希望了解备选方案。我发现XML :: Compile :: SOAP比使用复杂类型的文档/文字SOAP服务更容易使用。