JAXB: как определить, является ли класс маршальным без аннотаций - PullRequest
2 голосов
/ 05 августа 2010

У нас есть класс без контроля над источником, поэтому нет способа аннотировать его для JAXB.У нас также есть рамки для обеспечения маршалинга.Есть ли способ для этой структуры спросить этот класс, является ли он маршализуемым, когда нет аннотаций?

1 Ответ

2 голосов
/ 05 августа 2010

Стандартного механизма не существует, но я, кажется, люди достигают этого, пытаясь создать JAXBContext в классе:

public boolean isValidJAXBClass(Class aClass) {
    try {
        JAXBContext.newInstance(aClass);
    } catch(JAXBException e) {
        return false;
    }
    return true;
}

Вам не нужны аннотации для маршалинга объекта JAXB.Чтобы обойтись без наличия @XmlRootElement, оберните его в JAXBElement.

Если вы хотите использовать альтернативные средства для представления метаданных, EclipseLink JAXB (MOXy) имеет файл связывания с внешним доступомна основе метаданных JAXB

Пример файла выглядит примерно так:

<xml-bindings xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/oxm">
    <java-types>
        <java-type name="org.example.order.PurchaseOrder">
            <java-attributes>
                <xml-attribute java-attribute="id"/>
                <xml-element java-attribute="customer">
                    <xml-java-type-adapter value="org.example.order.CustomerAdapter"/>
                </xml-element>
                <xml-element java-attribute="lineItems" name="line-item"/>
            </java-attributes>
        </java-type>
    </java-types>
</xml-bindings>

Для получения дополнительной информации см .:

...