2010-07-23 3 views
3

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

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

Схема:

<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 адаптеров. И помните, что я не хочу касаться сгенерированных объектов. Это должно быть сделано либо в настройках маршаллера (адаптация, перехватчик, и т. Д.), Либо в XSD (возможно, есть некоторые настройки для управления).

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

UPDATE:

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

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

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

+0

Эта ссылка сейчас https://jaxb.java.net/guide/Using_different_datatypes.html –

ответ

0

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

+0

Но вопрос в том, могу ли я сделать это, не меняя сгенерированный класс. –

+0

Чтобы пройти между XML и объектом, который вам нужен, вам понадобится XmlAdapter и настройка, чтобы использовать его. Изменение модели может быть более чистым. –

-1

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

+0

Вы пропустили суть вопроса –

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