xml - 如何使用 XML::Compile::WSDL11 添加任意字段(错误:标记 `param' 未使用...)

标签 xml perl

我正在尝试使用模块 XML::Compile::WSDL11在 wsdl 文件的基础上创建 SOAP 消息。 在 xsd 定义中有一个名为 UserArea 的参数,它应该包含任意字段(扩展):

<xsd:element name="UserArea" type="UserAreaType"/>
<xsd:complexType name="UserAreaType">
  <xsd:sequence>
    <xsd:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
  </xsd:sequence>
</xsd:complexType>

所以我可以手动创建一个有效的 xml,例如:

<ProcessAssessmentOrder>
  ...
  <DataArea>
   ...
   <AssessmentOrder>
     ...
     <UserArea xmlns:xxx="http://example.com">
        <xxx:someURL>http://someurl.example.com</xxx:someURL>
      </UserArea>
    </AssessmentOrder>
  </DataArea>
</ProcessAssessmentOrder>

这行得通并得到验证。 但是尝试使用 XML::Compile::WSDL11 我得到了错误:

mistake: tag `xxx:SomeURL' not used at {http://www.hr-xml.org/3}ProcessAssessmentOrder/DataArea/AssessmentOrder/CustomerParty/PartyReportingIDs/UserArea

并且该参数不在生成的xml中。

到目前为止,这是我的 Perl 代码:

use strict;
use warnings;

use DateTime;
use XML::Compile::Transport::SOAPHTTP;
use XML::Compile::SOAP11;
use XML::Compile::WSDL11;

my %args = (
  releaseID => '3.3',
  ApplicationArea => {
    CreationDateTime => DateTime->now,
  },
  DataArea => {
    Process => {},
    AssessmentOrder => {
      UserArea => {
        'xxx:SomeURL' => 'www.example.com',
      },
    },
  },
);


my $wsdl_path = '/home/david/HR-XML-3_3/Assessments/org_hr-xml/3_3/WebServices/WSDL/AssessmentOrder.wsdl';
my $wsdl  = XML::Compile::WSDL11->new($wsdl_path);
import_definitions($wsdl, '/home/david/HR-XML-3_3/Assessments/');
$wsdl->compileCalls(
  port     => 'AssessmentOrder_Port',
  endpoint => 'http://127.0.0.1/xxx',
);

my($response, $trace) = $wsdl->call('ProcessAssessmentOrder', %args);

sub import_definitions { 
  my($wsdl, $path) = @_;
  opendir (my $dh, $path);
  while (my $file = readdir($dh)) {
    next if ($file eq '.' || $file eq '..');
    if (-d "$path/$file") {
      import_definitions($wsdl, "$path/$file");
    }
    elsif ($file =~ m#\.xsd$#) {
      $wsdl->importDefinitions("$path/$file");
    }
  }
  closedir($dh);
};

如何让它工作以获取具有该行的 xml

<xxx:someURL>http://someurl.example.com</xxx:someURL>

¿·_·?

最佳答案

你可以尝试添加这个:

my $myns = 'http://example.com';
$wsdl->prefixes => { $myns  => [ uri => $myns, prefix => 'xxx' ] };

参见http://search.cpan.org/

关于xml - 如何使用 XML::Compile::WSDL11 添加任意字段(错误:标记 `param' 未使用...),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24161909/

相关文章:

perl - 我应该如何为新用户生成一个随机的字母数字初始密码?

perl - 在 perl 中使用 open3 写入之前从进程读取

string - 如何获取要在 Tkx 标签中使用的字符串的 "width"

xml - 解析领先的XML注释

java - 如何使用计数器创建不同的 xml 标签?

java - setContentView 上的另一个 Resources$NotFoundException

perl - NET::SSH::Expect 配置在 Windows 上工作

xml - <xsl :apply-templates/> and <xsl:apply-templates select ="."/> 有什么区别

java - 如何使用 Saxon java 库命令行工具执行 schematron 验证?

perl - 如何检查 Perl 中是否已创建对象?