3

我正在使用一个 SOAP 服务,xsd:sequence它在 a 中省略和重新排序 XML 元素,就像在xsd:any.

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

什么类型的检查被禁用-Eosv?有没有可能让它变得不那么严格?

4

2 回答 2

4

在与 Axis 2 v1.4.1 打交道时试图理解这一点后,我最终浏览了源代码。如 WSDL2Java 页面和用法文本中所述,-E 选项被传递给数据绑定模块 - 在 -Eosv 的情况下,传递给 ADB 模块的“osv”子选项。深入研究 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 选项意味着什么的“官方”文档验证”。我也没有找到任何其他选择来降低它的严格性。

于 2012-11-19T02:01:57.667 回答
1

有没有可能让它变得不那么严格?

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

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

在最新的 Axis2 1.7.4 中,-Eiu确实抑制了异常,但客户端解析的 Web 服务响应不包含所有元素。

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

于 2017-03-02T20:54:59.543 回答