moxy: что эквивалентно RuntimeTypeInfoSet - PullRequest
2 голосов
/ 03 апреля 2012

В jaxb-impl я могу получить объект RuntimeTypeInfoSet, который можно использовать для сопоставления метаданных xml с соответствующими данными отражения java. Что эквивалентно для moxy.

ОБНОВЛЕНИЕ: мой вариант использования находит свойство, которое отображается на имя элемента. Конечно, я могу сделать это, используя java-отражение, но это громоздко.

1 Ответ

2 голосов
/ 03 апреля 2012

Примечание: Я EclipseLink JAXB (MOXy) и являюсь членом JAXB 2 (JSR-222 ) экспертная группа.

EclipseLink JAXB (MOXy) не имеет прямого эквивалента следующему классу:

  • com.sun.xml.bind.v2.model.runtime.RuntimeTypeInfoSet

Похоже, целью этого класса является предоставление средства для анализа метаданных отображения JAXB для конкретной модели. Я открыл следующий запрос на добавление этой функции в MOXy.

Существует набор нативных объектов (Project, Descriptor и Mapping), которые MOXy держит под крышками для представления метаданных. Если вы можете расширить свой вопрос, чтобы указать, что вы ищете, я могу помочь вам найти его.

<Ч />

UPDATE

ОБНОВЛЕНИЕ: мой вариант использования находит свойство, которое отображается на элемент название. Я, конечно, могу сделать это с помощью отражения Java, но это громоздкий.

Прошу прощения за задержку с ответом. Я не заметил, что ваш вопрос был обновлен с дополнительной информацией:

Клиент

Мы будем использовать класс и получим имя свойства, соответствующее элементу last-name.

package forum9992419;

import javax.xml.bind.annotation.*;

@XmlRootElement
public class Customer {

    private String firstName;
    private String lastName;

    @XmlElement(name="first-name")
    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    @XmlElement(name="last-name")
    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

}

Демо

package forum9992419;

import javax.xml.bind.JAXBContext;

import org.eclipse.persistence.descriptors.ClassDescriptor;
import org.eclipse.persistence.internal.sessions.AbstractSession;
import org.eclipse.persistence.jaxb.JAXBHelper;
import org.eclipse.persistence.mappings.DatabaseMapping;
import org.eclipse.persistence.oxm.XMLField;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(Customer.class);

        AbstractSession session = JAXBHelper.getJAXBContext(jc).getXMLContext().getSession(Customer.class);
        ClassDescriptor descriptor = session.getClassDescriptor(Customer.class);
        XMLField xmlField = new XMLField("last-name/text()");
        DatabaseMapping mapping = descriptor.getObjectBuilder().getMappingForField(xmlField);
        System.out.println(mapping.getAttributeName());
    }

}

выход

lastName
...