Подтвердить что ты не робот

Множественные схемы JAXB с ссылкой на элемент

У меня есть две схемы, которые обрабатываются с помощью JAXB. Первая схема предварительно обработана, и информация об этом используется с использованием файла эпизода (после http://www.java.net/blog/2006/09/05/separate-compilation-jaxb-ri-21). Вторая схема импортирует первую и снова использует jaxb, обрабатывается. Все это работает как ожидается.

Но теперь у меня есть элемент в первой схеме, который используется во второй, используя ссылку.

Схема а:

<schema elementFormDefault="qualified" xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:test="http://www.example.org/Test/"
targetNamespace="http://www.example.org/Test/">
<element name="type" type="test:MyType"></element>

Схема b:

<schema elementFormDefault="qualified" 
xmlns="http://www.w3.org/2001/XMLSchema" 
xmlns:second="http://www.example.org/Second/"
xmlns:test="http://www.example.org/Test/"
targetNamespace="http://www.example.org/Second/">

<import namespace="http://www.example.org/Test/" />

<complexType name="SomeType">
    <sequence>
        <element ref="test:type" minOccurs="1" maxOccurs="unbounded" />
    </sequence>
</complexType>

Во время обработки ничего не происходит, но сгенерированный код для обеих схем обеспечивает тот же метод:

public JAXBElement<EventType> createType(TypeType value)

Во время выполнения это приводит к следующей ошибке:

com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 1 counts of 
    IllegalAnnotationExceptions
The element name {http://www.example.org/Type/}type has more than one mapping.

Как я могу запретить JAXB создавать повторяющиеся методы createType?

Спасибо заранее!

Обновление: я задал этот же вопрос в списке рассылки JAXB, в этом списке я также опубликовал рабочий пример. Нить и пример можно найти по адресу: http://java.net/projects/jaxb/lists/users/archive/2011-03/message/18

В этом списке мне предложено обходное решение, и теперь я могу использовать схемы так, как мне нравится. Но я все еще думаю, что JAXB не должен создавать дополнительный метод "create", поскольку он уже должен быть в файле эпизода.

4b9b3361

Ответ 1

В свое время я написал несколько определений схемы. Вы объявляете свой первый xsd во втором объявлении схемы, а затем импортируете его.

В соответствии с MSDN при импорте XSD вы не включаете его в Декларацию схемы. Это где-то в объявлении вашей схемы.

XMLNS: тест = "http://www.example.org/Test/"

Удалите это и просто выполните импорт... (<xs:import namespace="http://www.example.com/IPO" />)

см. http://msdn.microsoft.com/en-us/library/ms256480.aspx