JAXB Java и XSD сопоставление - PullRequest
3 голосов
/ 24 июля 2010

В одном из моих проектов я использую маршаллер JAXB2, имея веб-службу, работающую по контракту, и генерирую объекты из схемы XML.

Все работает просто отлично.Но у меня есть проблема с удобством использования кода.Позвольте привести пример.

Схема:

<xs:complexType name="personContractAlertListType">
    <xs:sequence>
        <xs:element ref="PersonContractAlert" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
</xs:complexType>


<xs:element name="PersonContractAlertsResponse">
    <xs:complexType>
        <xs:sequence>
            <xs:element ref="PersonContractAlertList"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>

Итак, чтобы получить доступ к списку PersonContractAlerts, мне нужно позвонить:

PersonContractAlertsResponse.getPersonContractAlertListType().getPersonContractAlert()

Что довольно длинно.

Мой вопрос: как мне избавиться от getPersonContractAlertListType() и перейти непосредственно к: PersonContractAlertsResponse.getPersonContractAlert()

Поскольку этот элемент-обертка действительнотолько для XSD, мне это не нужно в моем объекте Java.

Другими словами, есть:

<Element1>
<Wrapper>
<Element2/>
</Wrapper>
</Element1>

И я хочу, чтобы это в Java отображалось на: Element1.getElement2()

Может быть, использовать адаптеры JAXB.И помните, я не хочу касаться сгенерированных объектов.Это должно быть сделано либо в настройках маршаллера (adaptar, interceptor и т. Д.), Либо в XSD (возможно, есть некоторые настройки для манипуляции).

Большое спасибо!

ОБНОВЛЕНИЕ:

Я нашел учебник по некоторым операциям связывания:

https://jaxb.dev.java.net/guide/Using_different_datatypes.html

Я попытаюсь исследовать использование привязок JAXB.

Ответы [ 2 ]

0 голосов
/ 23 сентября 2010

Я не уверен в вашей конкретной ситуации, но в целом ввод дополнительных 30 символов, вероятно, не является достаточно большой стоимостью, чтобы оправдать даже поиск решения этой проблемы. Тем более что Eclipse автоматически завершит вызов этого метода.

0 голосов
/ 26 июля 2010

Чтобы получить нужную объектную модель, вы можете использовать расширение отображения на основе XPath в EclipseLink JAXB (MOXy) .

...