Не знаю, возможно ли это, но я попытаюсь объяснить все, что могу. Я столкнулся с каким-то кодом, в котором были изменены модификации WSDL и XSD, в первую очередь для создания пользовательского XSD с удалением и размещением в собственном XSD (вместо того, чтобы жить в <types>
). По некоторым причинам небольшие изменения были внесены в некоторые классы для изменения типов объектов ввода/вывода.Множество XSDs переопределяющих классов
В будущем, если есть какие-либо обновления для 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>
Где класс входит в XSD? Вы можете уточнить? – plkmthr
Когда моя сборка срабатывает, я хочу, чтобы «ComplexTypeA» создавался как POJO, используя определение в Override.XSD, используя «string» для двух типов элементов. Исходный или базовый XSD имеет 'ComplexTypeA', определенный как' base64Binary' как тип объекта. Я пытаюсь найти более чистый способ обновить/настроить некоторые из этих типов без лишних издержек. – Walls