Axis2禁用严格验证(wsdl2java中的-Eosv)允许什么,以及如何使其更加严格?

时间:2012-08-13 12:13:38

标签: java axis2

我正在使用SOAP服务,该服务省略并重新排序xsd:sequence中的XML元素,就像它在xsd:any中一样。

我尝试了wsdl2java -Eosv,但生成的代码拒绝了org.apache.axis2.AxisFault: org.apache.axis2.databinding.ADBException: Unexpected subelement

的SOAP响应

-Eosv禁用了哪种类型的检查? 是否有可能使其更加严格?

2 个答案:

答案 0 :(得分:4)

在我与Axis 2 v1.4.1的交易中试图理解这一点后,我最终浏览了源代码。如WSDL2Java页面和用法文本中所述,-E选项被传递给数据绑定模块 - 在-Eosv的情况下,传递给的“osv”子选项是ADB模块。深入研究ADB的代码生成,我发现osv(OFF_STRICT_VALIDATION)选项仅用于确定minOccurs时。来自Axis 2 v1.4.1中的org.apache.axis2.schema.SchemaCompiler:

// if the strict validation off then we consider all elements have minOccurs zero on it
if (this.options.isOffStrictValidation()){
    metainfHolder.addMinOccurs(referencedQName, 0);
} else {
    metainfHolder.addMinOccurs(referencedQName, elt.getMinOccurs());
}

显然,依赖于预期行为的源代码是不明智的,因为实现将在不同版本之间发生变化,但到目前为止,我还没有找到关于-Eosv选项除了隐含声明之外的其他选项的“官方”文档“关闭严格的验证“。我还没有找到任何其他选择来降低它的严格程度。

答案 1 :(得分:1)

  

是否有可能使其更加严格?

https://axis.apache.org/axis2/java/core/docs/reference.html

-Eiu(对于ADB) - 忽略意外的元素而不是抛出ADBException。

使用最新的Axis2 1.7.4, -Eiu 会抑制异常,但客户端解析的Web服务响应并不包含所有元素。

如果您遇到类似的问题,使用JiBX绑定而不是ADB创建客户端是值得的。说明为here