我是Perl编程的新手。
为了学习访问soap服务,我尝试创建一个可以连接到this的soap客户端,我成功使用了该服务。
现在,我迁移了我的代码以连接到我公司的soap服务,但我遇到了一个问题。
“错误说他们没有port_type也没有操作。”
请参阅下面的代码段。
#!/usr/bin/perl
use 5.018;
use strict;
use warnings;
use Data::Dumper qw{Dumper};
use XML::Compile::SOAP11;
use XML::Compile::SOAP12;
use XML::Compile::WSDL11;
my $WsdlUrl;
my $WsdlXml;
my $SoapSrvc;
my (%SoapOps);
$WsdlUrl = "http://maxcavmes04/CamstarExternal/camstar.svc";
$WsdlXml = XML::LibXML->new->parse_file($WsdlUrl);
$SoapSrvc = XML::Compile::WSDL11->new($WsdlXml);
print Dumper(\$SoapSrvc);
foreach my $SoapOp ($SoapSrvc->operations())
{
# XML::Compile::SOAP 2.x
if ($XML::Compile::SOAP::VERSION > 1.99)
{
$SoapOps{$SoapOp->name}
= $SoapSrvc->compileClient(operation => $SoapOp->name,
port => SOAP_PORT_TYPE);
}
else # XML::Compile::SOAP 0.7x
{
$SoapOps{$SoapOp->{operation}}
= $SoapSrvc->compileClient(operation => $SoapOp->{operation},
port => SOAP_PORT_TYPE);
}
}
print "\n\n";
exit(0);
进一步调查它为什么不起作用,我使用名为.NET WebService Studio
的第三方软件。我从WebService Studio的返回中了解到,我公司的Soap服务通过WSDL
使用了两个WSDL:Import
文件。
我想问一下这个社区如何修改我的程序,以便使用WSDL11访问公司的soap服务。
我还通过print Dumper(\$SoapSrvc)
声明附加了soap服务连接的转储数据作为参考。
答案 0 :(得分:0)
原因可能是XML :: Compile :: WSDL11没有加载从wsdl文件引用的xsd。你必须下载你的wsdl文件。阅读它以查找对外部文件的引用。下载引用文件检查它们是否有参考资料......当你拥有所有东西时,你可以像这样使用它:
my $wsdl = XML::Compile::WSDL11->new();
$wsdl->importDefinitions("first.xsd");
$wsdl->importDefinitions("second.xsd");
$wsdl->addWSDL("my_service.wsdl");
如果发布wsdl文件,诊断问题会更容易。