我有一个使用Apache Axis 2实现的SOAP服务。它的类型Message
具有以下定义
<xs:complexType name="Message">
<xs:sequence>
<xs:element minOccurs="0" name="id" type="xs:int"/>
<xs:element minOccurs="0" name="caption" nillable="true" type="xs:string"/>
<xs:element minOccurs="0" name="text" nillable="true" type="xs:string"/>
<xs:element minOccurs="0" name="source" nillable="true" type="xs:string"/>
</xs:sequence>
</xs:complexType>
我必须使用对复杂类型source
的引用替换Source
元素。在避免破坏现有客户的同时,最好的方法是什么?
答案 0 :(得分:2)
Martin Fowler提供了一篇关于schema versioning and extension points的精彩文章。 Neverthess,因为你今天没有扩展点,所以这不适合你。业界大量使用的方法是在给定的时间点拥有多个版本的WSDL和XSD。因此,如果使用四个组件指定Web服务:
并且您需要引入非向后兼容的更改,您可以复制组件#1和#2并为它们定义另一个命名空间,例如: "http://www.example.org/abc_v2"
。您必须为新版本的服务(#3)生成提供程序,并且“以某种方式”将其与组件#4集成 - 毫无疑问,这是丑陋的部分。
这种方法很有效,但是复制很多想要维护的代码并不好。如果您遵循此方法,则应为仍使用服务版本1的所有客户端定义截止日期,以便稍后可以删除重复的代码。
总而言之,不是很好,而是一个选项。