gpt4 book ai didi

java - 多个 XSD 覆盖类

转载 作者:太空宇宙 更新时间:2023-11-04 07:07:39 25 4
gpt4 key购买 nike

不知道是否可能,但我会尽力解释。我遇到过一些代码,其中开箱即用的 WSDL 和 XSD 被修改,主要是为了拥有一个带有 <types> 的自定义 XSD。剥离并放置在自己的 XSD 中(而不是住在 <types> 中)。由于某种原因,对某些类进行了一些小的更改,以更改输入/输出对象类型。

将来,如果 WSDL 有任何更新,则必须有人手动修改 XSD 以满足我们的需求,并从更新的 WSDL 版本中获取新项目。

在寻找 SO 后,您似乎可以将多个模式导入到 WSDL 的 <types> 中。定义。我想知道这些 XSD 加载的顺序是否与 <types> 中它们的顺序有关?是否可以“覆盖”两个 XSD(原始 XSD 和修改后的 XSD)之间常见的类?

基本上,我想取出修改后的更改并将它们放入自己的、非常轻量级的 XSD 中,以减少占用空间。一旦它们位于自己的 XSD 中,任何新的 WSDL 更改(新版本等)都可以直接拉入“基础”XSD,同时在“mod”XSD 中拥有小的覆盖类列表。这些类将具有相同的命名空间和相同的类名。

做这样的事情的正确(是否可能)方法是什么:

WSDL 文件

<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
xmlns:tns="http://example.com/ExampleNamespace"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xmime="http://www.w3.org/2005/05/xmlmime"
name="ExampleService"
targetNamespace="http://example.com/ExampleNamespace">
<wsdl:types xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:schema>
<xsd:import schemaLocation="ORIGINAL.XSD"
namespace="http://example.com/ExampleNamespace" />
<xsd:import schemaLocation="OVERRIDE.XSD"
namespace="http://example.com/ExampleNamespace" />
</xsd:schema>
</wsdl:types>
.......
</wsdl:definitions>

原始 XSD

<xsd:schema xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tns="http://example.com/ExampleNamespace" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xmime="http://www.w3.org/2005/05/xmlmime"
targetNamespace="http://example.com/ExampleNamespace">
<xsd:complexType name="ComplexTypeA">
<xsd:sequence>
<xsd:element name="exampleElementOne" type="xsd:base64Binary" />
<xsd:element name="exampleElementTwo" type="xsd:base64Binary" />
</xsd:sequence>
</xsd:complexType>
...
<xsd:complexType name="ComplexTypeN">
...
</xsd:complexType>
</xsd:schema>

覆盖 XSD

<xsd:schema xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tns="http://example.com/ExampleNamespace" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xmime="http://www.w3.org/2005/05/xmlmime"
targetNamespace="http://example.com/ExampleNamespace">
<!-- Override only ComplexTypeA -->
<xsd:complexType name="ComplexTypeA">
<xsd:sequence>
<xsd:element name="exampleElementOne" type="xsd:string" />
<xsd:element name="exampleElementTwo" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
</xsd:schema>

最佳答案

您将无法导入具有相同命名空间的相同元素的两个架构。如果必须更改架构,则必须对现有架构进行更改。

关于java - 多个 XSD 覆盖类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21098936/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com