JAXB - 将@xmlvalue与令牌字段一起使用

时间:2017-09-12 23:03:07

标签: java xml jaxb

这似乎是一个基本问题,但我无法在其他地方找到答案。请原谅我,如果这是一个重复的帖子。

是否可以在标记为@XmlAccessorType(XmlAccessType.FIELD)的类上使用@XmlValue注释?

我正在尝试使用JAXB解析XML文件,虽然XML本身很大并且有其他字段,但问题是这个字段特有的:

<root>
  ...
  <holiday holidayId="9">Christmas</holiday>
  ...
</root>

映射是:

public class Holiday extends Model {
    @XmlAttribute(name="holidayId")
    private String holidayId;
    @XmlValue
    private String holiday;
}

该字段在XML中声明为令牌类型。

@XmlValue注释给我一个IllegalAnnotationException(如果我注释掉@XmlValue和假日字段,映射工作正常)。为什么这会失败?什么是解决方法?请指教。

1 个答案:

答案 0 :(得分:0)

是的,它应该没有问题。我用过这些课:

@XmlRootElement(name = "root")
@XmlAccessorType(XmlAccessType.FIELD)
public class Root {

    @XmlElement(name = "holiday")
    List<Holiday> holidays;
}

@XmlAccessorType(XmlAccessType.FIELD)
public class Holiday {

    @XmlAttribute(name="holidayId")
    private String holidayId;

    @XmlValue
    private String holiday;
}

对我而言,它运作良好。我将您的XML示例输入与此测试代码一起使用:

JAXBContext context = JAXBContext.newInstance(Root.class);
Unmarshaller unmarshaller = context.createUnmarshaller();
File file = new File("root.xml");
Root root = (Root) unmarshaller.unmarshal(file);

Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(root, System.out);