如果我写这个SOAP::Data::Builder代码(其中 $sb
是一个 SOAP::Data::Builder 对象)
$sb->add_elem(
attributes => { run => 'true' },
name => 'ccAuthService',
# value => ' ', # hack to prevent cs side unparseable xml
);
它生成以下内容
<ccAuthService xsi:nil="true" run="true" />
这是 Not Acceptable ,因为 xsi:nil 会导致接收端出现问题。但是,如果我取消注释注释掉的行,我会得到
<ccAuthService run="true"> </ccAuthService>
从技术上讲这是可行的,因此这是一种解决方法。但我最终想要的是
<ccAuthService run="true" />
我知道这是可行的,但我不知道如何生成它。
最佳答案
这是解决 SOAP::Lite(SOAP::Data::Builder 使用的)这个问题的解决方案。
在您的代码中的某处定义以下内容:
sub SOAP::Serializer::as_nonil
{
my ($self, $value, $name, $type, $attr) = @_;
delete $attr->{'xsi:nil'};
return [ $name, $attr, $value ];
}
要使用这种类型:
SOAP::Data->new(
type => 'nonil',
name => 'ping',
prefix => '',
uri => 'http://myschema.domain/',
);
关于这方面的一些提示在 SOAP::Serializer 中.
关于xml - SOAP::Data::Builder,当没有提供值时删除 xsi:nil ="true",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7070553/