2014-11-28 3 views
2

Это мой XML-модель:Как я могу tweek JAXB сгенерированной Java-модели получить код Java, который я хочу?

<train xmlns="http://www.example.org/train/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <routes> 
     <route>Route1</route> 
     <route>Route2</route> 
    </routes> 
</train> 

Я хотел бы создать XSD, который даст мне следующий Java:

Train train = new Train(); 
train.getRoutes().add(new Route()); 

Я пробовал различные конструкции, то есть жалюзи, русская кукла, салями Slice, но конечный результат всегда Java, как это:

Train train = new Train(); 
train.getRoutes().getRoute().add("Route1"); 

Вот XSD документы я пытался до сих пор:

Жалюзи

<?xml version="1.0"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://www.example.org/train/"> 
    <xs:element xmlns:tra="http://www.example.org/train/" name="train" type="tra:trainType"/> 
    <xs:complexType name="routesType"> 
    <xs:sequence> 
     <xs:element type="xs:string" name="route" maxOccurs="unbounded" minOccurs="0"/> 
    </xs:sequence> 
    </xs:complexType> 
    <xs:complexType name="trainType"> 
    <xs:sequence> 
     <xs:element xmlns:tra="http://www.example.org/train/" type="tra:routesType" name="routes"/> 
    </xs:sequence> 
    </xs:complexType> 
</xs:schema> 

Русский Doll

<?xml version="1.0"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://www.example.org/train/"> 
    <xs:element name="train"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="routes"> 
      <xs:complexType> 
      <xs:sequence> 
       <xs:element type="xs:string" name="route" maxOccurs="unbounded" minOccurs="0"/> 
      </xs:sequence> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

салями фрагмент

<?xml version="1.0"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://www.example.org/train/"> 
    <xs:element name="route" type="xs:string"/> 
    <xs:element name="routes"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element xmlns:tra="http://www.example.org/train/" ref="tra:route" maxOccurs="unbounded" minOccurs="0"/> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
    <xs:element name="train"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element xmlns:tra="http://www.example.org/train/" ref="tra:routes"/> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

Может кто-нибудь сказать мне, что я делаю неправильно?

ответ

2

Вы, скорее всего, нужно @XmlElementWrapper иметь что-то вроде

@XmlElementWrapper(name="routes") 
@XmlElement(name="route") 
List<Route> routes ...; 

Вы можете использовать jaxb-xew-plugin для этой цели.

Смотрите этот ответ:

How generate XMLElementWrapper annotation with xjc and customized binding

+0

Обертка элемента может работать, если я собирался с Явы в XSD, но я собираюсь из XSD в Java. – dasPing

+1

Пожалуйста, внимательно перечитайте мой ответ. Jaxb-xew-plugin - это плагин генерации кода, специально предназначенный для случая XSD -> Java, который у вас есть. – lexicore

+0

Вы правы, плагин выглядит так, будто это может быть решение. Интересно. – dasPing

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