Xsd 更改现有Web服务中的xs:complexType

Xsd 更改现有Web服务中的xs:complexType,xsd,wsdl,Xsd,Wsdl,我有一个complexType作为返回值的现有Web服务 <xs:complexType name="dummy"> <xs:sequence> <xs:element minOccurs="0" maxOccurs="1" name="A" type="xs:string" /> </xs:sequence> </xs:complexType> 稍后(在一些客户机投入生产之后),我想扩展我的Web服务。 具体而

我有一个complexType作为返回值的现有Web服务

<xs:complexType name="dummy">
  <xs:sequence>
    <xs:element minOccurs="0" maxOccurs="1" name="A" type="xs:string" /> 
  </xs:sequence>
</xs:complexType>

稍后(在一些客户机投入生产之后),我想扩展我的Web服务。 具体而言,我想添加复杂类型的新可选子元素:

<xs:complexType name="dummy">
  <xs:sequence>
    <xs:element minOccurs="0" maxOccurs="1" name="A" type="xs:string" /> 
    <xs:element minOccurs="0" maxOccurs="1" name="B" type="xs:string" /> 
  </xs:sequence>
</xs:complexType>


我在破坏现有客户吗?如果是,处理现有Web服务增强的正确/常用方法是什么?

如果你的问题是文学性的,答案是

Java客户机基于生成的代码,它们正在验证实际契约是否与生成客户机的契约匹配。我已经通过添加新方法打破了JAX WS生成的Java客户机的合同——理论上这不应该是一个问题。但我在初始化代码中设置了端点地址

一些未进行验证的客户端可以使用已更改的合同,只要它们不满足未知字段。在您的情况下,只要您的可选新元素不出现,他们就会使用消息,但当消息中存在此类元素时,他们会抛出一个错误(我们的客户机有hmmm…嗯..客户机,以这种方式运行,他们有旧的定义,但新字段几乎总是空的-并且在XML中不存在)

动态生成的客户机(如Python中的客户机)正在基于当前契约生成响应,因为在这种语言中,您可以向现有对象添加新字段,所以它们在您的情况下不会出现任何问题

因此,长期的答案是:这取决于客户使用您的合同的内容

如何管理这样的更改:这不是一个好方法,但是如果您对使用的客户端以及客户端何时更新没有影响,请保留旧的web服务,并在新URL下并行发布新版本