不知道這是否可行,但我會盡力解釋我能做到的最好。我遇到了一些代碼,其中一個開箱即用的WSDL和XSD正在被修改,主要是爲了讓一個自定義的XSD與<types>
分離並放置在他們自己的XSD中(而不是生活在<types>
中)。由於某些原因,對某些類進行了小的更改以改變輸入/輸出對象類型。多個XSD重寫類
未來,如果WSDL有任何更新,有人必須手動進入並重新設置XSD以符合我們的需求,並且從已更新的WSDL版本中獲取新項目。
在SO上狩獵後,似乎可以將多個模式導入到WSDL的<types>
定義中。我想知道這些XSD加載的順序,是否與它們在<types>
中的排序有關?是否有可能「重寫」兩個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>
ORIGINAL 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>
class在XSD中的位置?你能澄清嗎? – plkmthr
當我的構建關閉時,我想使用Override.XSD中的定義將'ComplexTypeA'創建爲POJO,對於這兩種元素類型使用'string'。原始的或基本的XSD具有用'base64Binary'定義的'ComplexTypeA'作爲對象類型。我試圖找到一種更簡潔的方式來更新/定製這些類型中的一些,而不會有太多的開銷。 – Walls