在 jaxb-impl 中,我可以获得一个 RuntimeTypeInfoSet 对象,该对象可用于从 xml 元数据映射到适当的 java 反射数据。moxy 的等价物是什么。
更新:我的用例是查找映射到元素名称的属性。我当然可以通过使用java反射来做到这一点,但它很麻烦。
在 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
该类的目的似乎是提供一种方法来自省特定模型的 JAXB 映射元数据。我已打开以下增强请求,以将此功能添加到 MOXy。
MOXy 在底层保留了一组原生对象(Project
、Descriptor
和)来表示元数据。Mapping
如果您可以扩展您的问题以表明您正在寻找什么,我可以帮助您找到它。
更新
更新:我的用例是查找映射到元素名称的属性。我当然可以通过使用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