gpt4 book ai didi

java - MOXy JAXB 在 XmlIDREF 上中断为具有枚举属性的类型

转载 作者:行者123 更新时间:2023-11-30 11:00:44 26 4
gpt4 key购买 nike

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

产生异常并显示以下消息:

The @XmlAttribute property b in type moxytest.C must reference a type that maps to text in XML. moxytest.B cannot be mapped to a text value.

我一直在调试和阅读一些 MOXy 源代码。这就是我能够设置这个最小示例的方式。 JDK 实现工作正常。

编辑:

我正在使用 EclipseLink 2.6.0(感谢 Santhosh Kumar Tekuri)

最佳答案

我使用以下 Maven 依赖项测试了您的代码:

<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>eclipselink</artifactId>
<version>2.5.0</version>
</dependency>

我将 jaxb.properties 放在模型类存在的同一个包中。该文件包含:

javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory

而且效果很好。下面是我的解码代码:

public static void main(String[] args) throws Exception{
JAXBContext context = JAXBContext.newInstance(A.class);
Unmarshaller unmarshaller = context.createUnmarshaller();
Object obj = unmarshaller.unmarshal(new File("input.xml"));
System.out.println(obj);
}

确保您使用的是与我相同的 moxy 版本。

关于java - MOXy JAXB 在 XmlIDREF 上中断为具有枚举属性的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31415759/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com