2012-01-04 2 views
3

Вот выдержка из моего XML-схемы:JAXB генерироваться классы: Игнорировать промежуточные классы

<xsd:complexType name="MyType"> 
    <xsd:sequence> 
     <xsd:element name="Numbers"> 
      <xsd:complexType> 
       <xsd:sequence> 
        <xsd:element name="Number" minOccurs="1" maxOccurs="5" type="xsd:decimal"/> 
       </xsd:sequence> 
      </xsd:complexType> 
     </xsd:element> 
    </xsd:sequence> 
</xsd:complexType> 

JAXB создает мне следующий класс:

public class MyType { 
    protected MyType.Numbers numbers; 

    public static class Numbers { 
     protected List<BigDecimal> number; 
    } 
} 

Но я хотел бы, чтобы игнорировать этот промежуточный класс и имеют что-то вроде:

public class MyType { 
    protected List<BigDecimal> number; 
} 

Это возможно?

ответ

3

Да, это возможно с помощью JAXB только с помощью внешних плагинов, так как эта модификация фактически является изменением модели. Посмотрите на @XmlElementWrapper plugin.

Примечание: тот же вопрос уже задан на этом форуме (How generate XMLElementWrapper annotation, Dealing with JAXB Collections, JAXB List Tag creating inner class). Пожалуйста, сначала используйте поиск.

+0

Спасибо. Но это не работает для меня. 'numbers' теперь является списком, как ожидалось. Но получатель выглядит так: 'public Numbers getNumbers {return numbers; } 'Так что сгенерированные классы не будут компилироваться ... – Sebi

+0

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

+1

Проблема заключалась в том, что некоторые из моих XML-элементов содержат в нем имена повторений. Например, 'last_name'. По некоторым причинам мне пришлось включить' underscoreBinding = asCharInWord ". В результате переменная была названа' lastName' и getter 'getLast_name'. Поэтому плагин не смог сопоставить переменную с методами getter и setter. – Sebi

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