Perl WSDL11 无法处理两个 WSDL 文件
Perl WSDL11 Can't Make it to Work on two WSDL files
这个问题与我在使用 XML::Compile::WSD11 Perl 模块的 Perl 程序中遇到的问题有关,在该模块中,我公司的 Web 服务使用多个 WSDL 和 XML 导入。
可以找到描述此问题的原始 post . From that post, I tried the suggestion of imatveev13 使用 XML::Compile::WSDL11 中的 addWSDL API 和代码片段如下所示。
测试Perl程序中使用的两个WSDL文件是:WSDL0 and WSDL1.
#!/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.
中选择
我也尝试过不指定端口,因为该服务没有实现多个端口,但它给了我一个不同的错误。
无法通过包 "XML::Compile::SOAP11::Client" 在 /usr/local/share/perl5/XML/Compile/SOAP.pm 行 155.[=13= 找到对象方法“_writer_body_rpcenc_hook” ]
感谢来自社区的任何帮助。谢谢
确保在您的脚本之上使用模块 XML::Compile::SOAP11::Encoding
:
use XML::Compile::SOAP11::Encoding;
这个问题与我在使用 XML::Compile::WSD11 Perl 模块的 Perl 程序中遇到的问题有关,在该模块中,我公司的 Web 服务使用多个 WSDL 和 XML 导入。
可以找到描述此问题的原始 post
测试Perl程序中使用的两个WSDL文件是:WSDL0 and WSDL1.
#!/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.
中选择我也尝试过不指定端口,因为该服务没有实现多个端口,但它给了我一个不同的错误。
无法通过包 "XML::Compile::SOAP11::Client" 在 /usr/local/share/perl5/XML/Compile/SOAP.pm 行 155.[=13= 找到对象方法“_writer_body_rpcenc_hook” ]
感谢来自社区的任何帮助。谢谢
确保在您的脚本之上使用模块 XML::Compile::SOAP11::Encoding
:
use XML::Compile::SOAP11::Encoding;