我有一个 .NET WCF 服务和一个使用 Axis2 生成服务存根的 Java 应用程序。当我将可选属性添加到 WCF 中的数据协定并在属性列表的末尾对其进行排序(这应该是向后兼容的更改)时,它会导致Java 应用程序中出现意外的子元素错误。修复它的唯一方法是在 Axis2 中重新生成存根并重新部署 Java 应用程序——在我的情况下,这不是可接受的方法。
需要明确的是,我没有更改属性的顺序并且 WSDL 是有效的。这是之前(Java 应用程序工作时)和之后(导致“意外子元素”错误)的 WSDL 类型的示例:
<!-- BEFORE -->
<xs:complexType name="MyObject">
<xs:sequence>
<xs:element minOccurs="0" name="Name" nillable="true" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<!-- AFTER -->
<xs:complexType name="MyObject">
<xs:sequence>
<xs:element minOccurs="0" name="Name" nillable="true" type="xs:string"/>
<xs:element minOccurs="0" name="MyNewProperty" nillable="true" type="xs:string"/>
</xs:sequence>
</xs:complexType>
AFTER 版本导致此错误:org.apache.axis2.AxisFault: org.apache.axis2.databinding.ADBException: Unexpected subelement {http://mycompany.com/services/}MyNewProperty
我们可以用 Axis2 做些什么来防止这种情况发生吗?如果没有,我们应该在 WSDL 或 WCF 方面做些什么不同的事情?