小编PPX*_*PPX的帖子

Perl soap :: lite和复杂数据

我使用perl soap :: lite来构建一个Web服务客户端.该实现适用于简单方法,例如需要单个标量参数.EG,以下工作正常.

#!/usr/bin/perl

use warnings;
use SOAP::Lite  +trace=>debug;
use strict;
use Data::Dumper;
$SOAP::Constants::PREFIX_ENV = 'SOAP-ENV';
my $base="https://XXXX:60001/GDBIncidentWebService/Config?wsdl&style=rpc";
my $user="XXXX";
my $pwd="XXXX";

my $lite = SOAP::Lite -> readable(1)
                  -> service($base) ;
my @res=$lite->readIncident("123456");
print Dumper(\@res);
exit;
sub SOAP::Transport::HTTP::Client::get_basic_credentials { return $user => $pwd ; }
Run Code Online (Sandbox Code Playgroud)

我需要调用一个需要更复杂的参数集的方法(一些标量加一个键值对数组).我想我应该使用SOAP :: Data模块正确地序列化我的数据但是无法使它工作.即使是"简单"的方法(如上所述)似乎也不起作用.EG(仅显示从上面的脚本更改的行):

my $arg= SOAP::Data->new()->type('xs:string')-> value("20054106");
my @res=$lite->readIncident($arg);
Run Code Online (Sandbox Code Playgroud)

产量:

String value expected instead of SOAP::Data reference
Run Code Online (Sandbox Code Playgroud)

有关如何解决此问题的任何想法?非常感谢 !这里参考的是我脚本中调用的方法的wsdl

 <wsdl:operation name="readIncident">
  <soap:operation soapAction=""/>
  <wsdl:input>
    <soap:body use="literal" namespace="urn:GDBIncidentWebServiceVi" parts="ticketID "/>
  </wsdl:input>
  <wsdl:output>
    <soap:body use="literal" namespace="urn:GDBIncidentWebServiceVi"/> …
Run Code Online (Sandbox Code Playgroud)

perl soap wsdl soaplite

5
推荐指数
1
解决办法
1239
查看次数

标签 统计

perl ×1

soap ×1

soaplite ×1

wsdl ×1