MOXy JAXB在XmlIDREF上打破了具有枚举属性的类型

时间:2015-07-14 19:36:07

标签: java xml jaxb moxy

我已经设置了一个问题的最小工作示例。这些是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)

1 个答案:

答案 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版本。