Я пытался это сделать в Linux / Java-land, и утилита командной строки xmllint, и задача Ant компилятора JAXB xjc более или менее жаловались на одно и то же сообщение. Как импорт, так и объявление префикса представляются необходимыми. Немного жутко, что MSDN ведет себя по-другому.
я есть две схемы, которые обрабатываются с помощью 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>
Схема б:
<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, поскольку он уже должен быть в файле эпизода.