gpt4 book ai didi

java - 无法让 JAXB 通过简单示例处理接口(interface)

转载 作者:数据小太阳 更新时间:2023-10-29 03:01:15 38 4
gpt4 key购买 nike

我正在尝试在 Unofficial JAXB Guide - Mapping interfaces — Project Kenai 中显示的 JAXB 接口(interface)的简单示例, 第 3.2.1 节,它对我不起作用。我在最新的 JDK 1.8_70 中并且没有使用任何特殊的库。为了完整起见,代码:

@XmlRootElement
class Zoo {
@XmlAnyElement
public List<Animal> animals;
}

interface Animal {
void sleep();
void eat();
...
}

@XmlRootElement
class Dog implements Animal { ... }

@XmlRootElement
class Lion implements Animal { ... }

有什么帮助吗?我得到的错误是:

[com.sun.istack.internal.SAXException2: class testjaxb.Cat nor any of its super class is known to this context.
javax.xml.bind.JAXBException: class testjaxb.Cat nor any of its super class is known to this context.]

编辑:发布 JAXBContext.newInstance 代码:

Zoo zoo = new Zoo();
zoo.animals = new ArrayList<Animal>();
zoo.animals.add( new Cat() );
zoo.animals.add( new Dog() );
zoo.animals.add( new Dog() );

JAXBContext ctx = JAXBContext.newInstance(Zoo.class);
Marshaller marshaller = ctx.createMarshaller();
marshaller.marshal(zoo, System.out);

最佳答案

尝试在您提供给 JAXBContext.newInstance() 的列表中指定其他类。

JAXBContext ctx = JAXBContext.newInstance(Zoo.class, Cat.class, Dog.class);

@XmlSeeAlso 注释应用于您的 Zoo 类也应该有效。

@XmlRootElement
@XmlSeeAlso({Cat.class, Dog.class})
class Zoo {
...
}

关于java - 无法让 JAXB 通过简单示例处理接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35184975/

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