当我们为类使用接口时,如何使用JAXB将对象封送到XML文件中?我有以下简单的类:从实现与JAXB接口的类实例化封送Java对象
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>();
}
,当我试图从元帅的书店对象到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 class de.uni_paderborn.books.Book noch eine derzugehörigenSuperklassen ist diesem Kontext bekannt。]
对不起德国错误信息,但我的操作系统是德语。这意味着在这种情况下,Book类和其中的一个超类都是已知的!为什么我会得到这样的错误?
您可能会发现以下内容有用:http://blog.bdoughan.com/2011/05/jaxb-and-interface-fronted-models.html。另外,我很好奇为什么你在'books'字段上使用'@ XmlAnyElement'。 – 2014-12-05 15:42:13
因为没有它,我得到另一个错误,告诉我试图编组一个接口,因为书'HashSet'中的元素来自'IBook',而不是'Book'。谢谢! – Anas 2014-12-05 15:53:09
我已经添加了一个应该可以帮助的答案:http://stackoverflow.com/a/27319803/383861 – 2014-12-05 15:55:31