2014-01-13 4 views
1

Не знаю, возможно ли это, но я попытаюсь объяснить все, что могу. Я столкнулся с каким-то кодом, в котором были изменены модификации 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> 
+0

Где класс входит в XSD? Вы можете уточнить? – plkmthr

+0

Когда моя сборка срабатывает, я хочу, чтобы «ComplexTypeA» создавался как POJO, используя определение в Override.XSD, используя «string» для двух типов элементов. Исходный или базовый XSD имеет 'ComplexTypeA', определенный как' base64Binary' как тип объекта. Я пытаюсь найти более чистый способ обновить/настроить некоторые из этих типов без лишних издержек. – Walls

ответ

1

Вы не сможете импортировать две схемы, которые имеют один и тот же элемент с тем же пространством имен. Если вам нужно изменить схему, вам придется внести изменения в существующую схему.

Смежные вопросы