【问题标题】:Perl WSDL11 Can't Make it to Work on two WSDL filesPerl WSDL11 无法处理两个 WSDL 文件
【发布时间】:2015-06-11 00:26:06
【问题描述】:

这个问题与我在使用 XML::Compile::WSD11 Perl 模块的 Perl 程序中遇到的问题有关,其中我的公司 Webservice 使用多个带有 XML 导入的 WSDL。

可以找到描述此问题的原始帖子here。从那篇文章中,我尝试了imatveev13 的建议,以使用 XML::Compile::WSDL11 中的 addWSDL API,代码 sn-p 如下所示。

测试 Perl 程序中使用的两个 WSDL 文件是:WSDL0WSDL1

#!/usr/bin/perl

use 5.018;
use strict;
use warnings;

use Data::Dumper qw{Dumper};

use XML::Compile::SOAP11; # XML::Compile::SOAP 2.x
use XML::Compile::WSDL11;
use XML::Compile::Transport::SOAPHTTP;

my $WSDL0 = 'CamstarWebClient0.wsdl';
my $WSDL1 = 'CamstarWebClient1.wsdl';

# Create service proxy for web service
my $wsdlXml0 = XML::LibXML->new->parse_file($WSDL0);
my $wsdlXml1 = XML::LibXML->new->parse_file($WSDL1);

my $SoapSrv = XML::Compile::WSDL11->new();
$SoapSrv->addWSDL($wsdlXml0);
$SoapSrv->addWSDL($wsdlXml1);

print Dumper($SoapSrv);

# Compile all service methods
my (%SoapOps);
foreach my $SoapOp ($SoapSrv->operations)
{
    print Dumper($SoapOp);
    # XML::Compile::SOAP 2.x
    if ($XML::Compile::SOAP::VERSION > 1.99)
    {
        $SoapOps{$SoapOp->name}
            = $SoapSrv->compileClient(operation => $SoapOp->name, 
                                      port => "ICamstar");
    }
}

print "\n";
exit;

运行代码给了我一个错误:找不到端口“ICamstar”,请从 BasicHttpBinding_ICamstar 中选择

我也尝试不指定端口,因为该服务没有实现多个端口,但它给了我一个不同的错误。

无法在 /usr/local/share/perl5/XML/Compile/SOAP.pm 第 155 行通过包“XML::Compile::SOAP11::Client”定位对象方法“_writer_body_rpcenc_hook”强>。

感谢社区提供的任何帮助。谢谢。

【问题讨论】:

    标签: xml perl soap wsdl


    【解决方案1】:

    确保在脚本顶部使用模块 XML::Compile::SOAP11::Encoding

    use XML::Compile::SOAP11::Encoding;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-09
      • 1970-01-01
      • 1970-01-01
      • 2019-08-24
      • 1970-01-01
      • 2013-06-24
      • 1970-01-01
      相关资源
      最近更新 更多