Аннотации JAXB для работы с одним и тем же именем элемента в разных пространствах имен - PullRequest
1 голос
/ 30 октября 2010

Проблема, которую я пытаюсь решить, состоит в том, что JAXB не может обрабатывать родительские и унаследованные объекты с одинаковыми именами в разных пространствах имен.

У меня есть две схемы:

schemaA.xsd

<xs:schema xmlns:A="...">
<xs:complexType name="mytype">
...

schemaB.xsd

<xs:schema xmlns:B="..." xmlns:A="...">
<xs:import namespace="..." schemaLocation="schemaA.xsd"/>
<xs:complexType name="mytype">
...

Здесь определение mytype отличается в схемаB .И нет, я не контролирую схемы, они поставляются крупными коммерческими сторонними организациями.Как люди справляются с этой ситуацией?Дело в том, что schemaB ссылается на schemaA и действительно использует множество элементов из schemaA .JAXB не может работать только на B, но он может работать и работает только на A.

И еще один момент, когда задействовано много элементов, он не может добавить настройку JAXB для всех них.Ну, это было бы много работы.

Ответы [ 2 ]

0 голосов
/ 23 июля 2014

В объявлении элемента необходимо указать другое имя свойства:

<xs:element ref="namespace1:foo">
    <xs:annotation>
        <xs:appinfo>
            <jaxb:property name="fooElement"/> // here you see changing the name
        </xs:appinfo>
    </xs:annotation>
</xs:element>

Это необходимо, когда у вас есть два элемента с именем "foo", и у одного из них есть объявление, а у одного из них нет.

Вы сгенерировали (с помощью xjc) объект со свойствами:

Foo foo;
Foo fooElement;

Так что конфликта не будет.

Подробнее о привязках можно прочитать на: http://docs.oracle.com/cd/E17802_01/webservices/webservices/docs/1.5/tutorial/doc/JAXBUsing4.html

0 голосов
/ 13 сентября 2011

Забавно, как вопросы JAXB почти не получают ответа.

@ jamh

Я предполагаю, что вы пытаетесь запустить xjc для создания заглушек Java для сторонних схем. Вы пытались указать разные имена пакетов для каждого пространства имен? Это можно сделать в пользовательском файле привязки или в командной строке с аргументом -p ...

xjc -p com.your.package.name / path / to / xsd

...