jaxb - moxy:RuntimeTypeInfoSet 的等价物是什么

标签 jaxb eclipselink moxy

在 jaxb-impl 中,我可以获得一个 RuntimeTypeInfoSet 对象,该对象可用于从 xml 元数据映射到适当的 java 反射数据。 moxy 的等效项是什么。

更新:我的用例是查找映射到元素名称的属性。我当然可以使用java反射来实现,但是比较麻烦。

最佳答案

注意:我是EclipseLink JAXB (MOXy) JAXB 2 (JSR-222) 的领导者和成员专家组。

EclipseLink JAXB (MOXy) 没有与以下类直接等效的类:

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

该类的目的似乎是提供一种方法来内省(introspection)特定模型的 JAXB 映射元数据。我已提出以下增强请求,要求在 MOXy 中添加此功能。

MOXy 在底层保存着一组 native 对象(ProjectDescriptorMapping)来表示元数据。如果您可以扩展您的问题以表明您正在寻找什么,我可以帮助您找到它。


更新

UPDATE: my use case is finding a property that maps to an element name. I can of course do it by using java reflection, but it is cumbersome.

对于延迟回复,我深表歉意。我没有注意到您的问题已更新了更多信息:

客户

我们将使用该类并获取与 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

关于jaxb - moxy:RuntimeTypeInfoSet 的等价物是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9992419/

相关文章:

Jaxb EclipseLink/MOXy : Is it possible to specify the names of get/set methods

java - 如何配置 JAXB/Moxy 以针对 XML 中可能丢失的数据抛出错误

java - JAXB 父节点和子节点同名。子节点返回空值

java - @Version 不会在关系更改时增加

java - 删除的实体何时写入 eclipselink UnitOfWorkChangeSet?

maven - 使用Maven生成Eclipselink 2.5元模型

java - JAXB - 类集合的 PascalCase 包装器

java - 从命名空间读取 XML 时编码链接异常

java - XSD 导入问题

java - MOXy/JAXB "prototype pattern"- 接口(interface)继承