我有一个 .NET WCF 服务和一个使用 Axis2 生成服务存根的 Java 应用程序。当我添加一个optionalWCF 中数据合约的属性以及将其排序在属性列表的末尾(这应该是向后兼容的更改)它会导致意外的子元素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:意外的子元素{http://mycompany.com/services/}MyNewProperty
我们可以对 Axis2 做些什么来防止这种情况发生吗?如果不是,我们应该在 WSDL 或 WCF 方面做一些不同的事情吗?
从 XML 模式的角度来看,这似乎不是向后兼容的更改。如果我要求 XSV 验证消息
<MyObject>
<Name>Primus Secundus</Name>
<MyNewProperty>Addita notitia</MyNewProperty>
</MyObject>
针对您的 架构,我收到一条错误,指示 MyNewProperty 无效:
根据 cvc-complex-type.1.2.4 无效:元素 {None}:MyNewProperty 不
元素 {None}:MyObject 中允许此处 (2),期望 [$]:
我在 XML Schema 文档中找不到任何内容(http://www.w3.org/TR/xmlschema-1/ http://www.w3.org/TR/xmlschema-1/) 或任一 SOAP 版本 (http://www.w3.org/TR/soap/ http://www.w3.org/TR/soap/)这表明应允许使用新元素扩展序列以获得新属性。
我使用 XSV 在http://www.w3.org/2001/03/webdata/xsv http://www.w3.org/2001/03/webdata/xsv,并将数据上传到以下包装器中:
<?xml version="1.0"?>
<wrapper xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="#mySchema">
<xs:schema id="mySchema" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="wrapper">
<xs:complexType>
<xs:sequence>
<xs:any/>
<xs:element name="MyObject" type="MyObject"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- BEFORE -->
<xs:complexType name="MyObject">
<xs:sequence>
<xs:element minOccurs="0" name="Name" nillable="true" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
<MyObject>
<Name>Primus Secundus</Name>
<MyNewProperty>Addita notitia</MyNewProperty>
</MyObject>
</wrapper>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)