Perl WSDL11无法使用XML导入在WSDL上工作

时间:2015-04-10 06:24:46

标签: xml perl web-services soap wsdl

我是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服务连接的转储数据作为参考。

链接: Dumped_SoapSrvc Data

1 个答案:

答案 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文件,诊断问题会更容易。