как настроить и переопределить привязки jaxb

1

Я работаю с набором DTD от сторонней системы. Наша цель - сопоставить XML-запрос (который соответствует этим DTD в java, а затем отправить ответ XML в систему).

DTD написаны на камне (у меня нет никакого контроля при их изменении).

Таким образом, для сопоставления я преобразовал DTD в XML-схемы (xsd) с помощью XMLSpy, а затем создал Jaxb привязки классов с помощью XJC-компилятора. Я использую Java 7.

Проблема в том, что DTD на самом деле не имеют пространства имен.. и у меня есть 20 разных DTD. 10 для запроса и 10 для ответа. Когда я генерировал схемы, мне приходилось делать одно-одно отображение.. и создавали те же 10 запросов XSD и 10 XSD ответов.

Теперь компилятор jaxb xjc генерирует связанные классы. Но они далеки от практического использования. Нет наследования, поскольку эти схемы не связаны друг с другом (хотя они, похоже, имеют одинаковый контент - типы запросов и типы ответов).

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

Например, рассмотрим этот простой случай:

DTD:

<!ELEMENT FromDate (#PCDATA)>
<!ATTLIST FromDate
    year CDATA #REQUIRED
    month CDATA #REQUIRED
    day CDATA #REQUIRED
>

Схема, сгенерированная с помощью XMLSpy:

<xs:element name="FromDate">
    <xs:complexType mixed="true">
        <xs:attribute name="year" use="required"/>
        <xs:attribute name="month" use="required"/>
        <xs:attribute name="day" use="required"/>
    </xs:complexType>
</xs:element>

Классы привязки, созданные из компилятора XJC (java 1.7):

public class FromDate {

    @XmlValue
    protected String content;
    @XmlAttribute(name = "year", required = true)
    @XmlSchemaType(name = "anySimpleType")
    protected String year;
    @XmlAttribute(name = "month", required = true)
    @XmlSchemaType(name = "anySimpleType")
    protected String month;
    @XmlAttribute(name = "day", required = true)
    @XmlSchemaType(name = "anySimpleType")
    protected String day;
    ...
    ...

Если вы посмотрите на то, как fromDate, наконец, эволюционировали, не имеет никакого смысла "cus просто получить дату от этого запроса, мне нужно сделать

setMyDate(request.getFromDate().getMonth() + request.getFromDate().getDay() + request.getFromDate().getYear());

что, очевидно, не имеет смысла. Кроме того, типы уходят.

Как я могу настроить/переопределить привязки jaxb для достижения этих двух вещей: 1. наследование (некоторая абстракция для сокращения избыточности). 2. соответствующие типы

Пожалуйста помоги.

Теги:
jaxb
xsd

1 ответ

1

OMG пытается скомпилировать DTD в 2014 году. :)

Несколько ссылок для вас:

В качестве другого подхода я бы предложил преобразовать DTD в схемы схемы обработки. Будет лучше долгосрочный. Поддержка DTD довольно ограничена

  • 0
    Спасибо. Я посмотрю на них.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню