如何使用XML::Compile::WSDL11添加任意字段(错误:标记'param';不用于…)

如何使用XML::Compile::WSDL11添加任意字段(错误:标记'param';不用于…),xml,perl,Xml,Perl,我试图使用该模块在wsdl文件的基础上创建SOAP消息。 在xsd定义中,有一个名为UserArea的参数,该参数用于保存任意字段(扩展): 并且该参数不在生成的xml中 到目前为止,这是我的Perl代码: use strict; use warnings; use DateTime; use XML::Compile::Transport::SOAPHTTP; use XML::Compile::SOAP11; use XML::Compile::WSDL11; my %args = (

我试图使用该模块在wsdl文件的基础上创建SOAP消息。 在xsd定义中,有一个名为
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>
http://someurl.example.com

?···

您可以尝试添加以下内容:

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

所示,如果我在读对了,我认为XML::Compile不支持xsd:any元素。除此之外,我不能说,因为我自己也在努力解决类似的问题

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);
};
<xxx:someURL>http://someurl.example.com</xxx:someURL>
my $myns = 'http://example.com';
$wsdl->prefixes => { $myns  => [ uri => $myns, prefix => 'xxx' ] };