要调用Web服务,我总是使用SOAP :: Schema并使用返回的参数,如下所示:
my $wsdl = "wsdl adres";
my $schema = SOAP::Schema->new( schema_url => $wsdl )->parse();
my $services = $schema->services();
my $first_key = undef;
foreach my $key (keys %$services) {
$first_key = $key unless ($first_key);
}
my $proxy = "$$services{$first_key}{$method}{endpoint}";
my $uri = "$$services{$first_key}{$method}{soapaction}";
my $ns = "$$services{$first_key}{$method}{namespace}";
my $parameters = $$services{$first_key}{$method}{parameters};
my $soap = SOAP::Lite
-> on_action( sub { join '/', @_ } )
-> readable(1)
-> uri($uri)
-> proxy($proxy)
-> ns("http://schemas.xmlsoap.org/soap/envelope/","soapenv")
-> ns($ns);
它总是有效,但现在我得到了一个新的wsdl地址的跟随错误:
第8行,第2列,第84行的标记不匹配/usr/lib/perl5/vendor_perl/5.8.5/i386-linux-thread-multi/XML/Parser.pm第187行
可能有什么问题? wsdl定义是正确的,因为它在我尝试使用SOAPUI时有效。
答案 0 :(得分:1)
道歉,这只是一个部分答案 - 因为您提供的的网址有效,但您遇到的错误特别是您提取的不是<的XML问题/ em>解析。
回到基础:
#!/usr/bin/env perl
use strict;
use warnings 'all';
use LWP::Simple;
use XML::Twig;
my $url = 'http://xperiaclub.com/Service/Service1.svc?singleWsdl';
my $content = get ( $url );
my $twig = XML::Twig -> parse ( $content );
$twig -> set_pretty_print ( 'indented_a');
$twig -> print;
如果内容是无效的XML,这将会出错 - 并且它不是,它可以正常工作。我知道,哪个问题没有回答你的问题。
所以这个XML不是问题所在。
答案 1 :(得分:0)
问题出在我的服务器上。我的服务器将URL重定向到错误的URL,找不到xml并且发生此错误