当我们为类使用接口时,如何使用JAXB将对象编组为XML文件?我有以下简单的类:
public interface IBook {
public abstract String getName();
public abstract void setName(String name);
}
@XmlRootElement
public class Book implements IBook {
private String name;
@Override
@XmlElement(name ="BookTitle")
public String getName() {
return name;
}
@Override
public void setName(String name) {
this.name = name;
}
}
@XmlRootElement
public class BookStore {
@XmlElement(name ="BookStoreName")
public String name;
@XmlElementWrapper(name ="bookList")
@XmlAnyElement
public HashSet<IBook> books= new HashSet<IBook>();
}
当我尝试将对象从BookStore编组为XML文件时,出现以下错误:
[com.sun.istack.internal.SAXException2: Weder class de.uni_paderborn.books.Book noch eine der zugehörigen Superklassen ist diesem Kontext bekannt.
javax.xml.bind.JAXBException:Weder类de.uni_paderborn.books.本书名册Eine derZugehörigenSuperklassen istdiesem Kontext bekannt.
抱歉,德语错误消息,但我的操作系统是德语.这意味着在这种情况下都不知道Book类或其超类之一!为什么会出现这样的错误?
解决方法:
通常,要映射作为接口类型的字段/属性,请使用@XmlElement批注上的类型设置.
@XmlElementWrapper(name ="bookList")
@XmlElement(type=Book.class, name="book")
public HashSet<IBook> books= new HashSet<IBook>();