我已经设置了一个问题的最小工作示例。这些是JAXB
类。
moxytest / A.java
package moxytest;
@XmlRootElement
public class A {
@XmlElement(name = "b")
public List<B> bs;
@XmlElement(name = "c")
public List<C> cs;
}
moxytest / B.java
package moxytest;
public class B {
@XmlAttribute
@XmlID
public String id;
@XmlAttribute
public EnumD md;
}
moxytest / C.java
package moxytest;
public class C {
@XmlAttribute
@XmlIDREF
public B b;
}
moxytest / EnumD.java
package moxytest;
@XmlEnum
public enum EnumD {
VALUE1, VALUE2, VALUE3
}
示例输入:
<?xml version="1.0" encoding="UTF-8" ?>
<a>
<b id="b1" md="VALUE1"/>
<b id="b2" md="VALUE2"/>
<b id="b3" md="VALUE3"/>
<c b="b2"/>
<c b="b1"/>
<c b="b3"/>
</a>
因此,C
元素按ID引用B
元素,而B
元素具有Enum属性。
这行Java代码
JAXBContext context = JAXBContext.newInstance(A.class);
使用以下消息生成异常:
moxytest.C类型中的@XmlAttribute属性b必须引用映射到XML中的文本的类型。 moxytest.B无法映射到文本值。
我一直在调试和阅读一些MOXy
源代码行。这就是我能够设置这个最小的例子。 JDK
实现正常。
修改
我正在使用EclipseLink 2.6.0(感谢Santhosh Kumar Tekuri)
答案 0 :(得分:1)
我使用以下maven依赖项测试了您的代码:
p operator
我将jaxb.properties放在存在模型类的同一个包中。该文件包含:
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>eclipselink</artifactId>
<version>2.5.0</version>
</dependency>
它工作正常。下面是我的解组代码:
javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory
确保您使用的是我使用的相同的moxy版本。