参考我以前的文章。我有以下代码,它正在从文件中读取XML。
logger.log(Level.INFO, "testSchemaChange");
JAXBContext jaxbContext = JAXBContext.newInstance("com.store.web.ws.v1.model");
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
JAXBElement<BookType> jeBookType = (JAXBElement<BookType>) unmarshaller.unmarshal(new File (BOOK_XML));
BookType bookType = jeBookType.getValue();
logger.log(Level.INFO, "Book recieved: " + bookType.getISBN());
我正在以Book
而不是BookList
作为根元素为XML种子。只要我在JAXBContext.newInstance
中保留包的完整路径,这个例子就可以正常工作。
我刚换了
JAXBContext jaxbContext = JAXBContext.newInstance("com.store.web.ws.v1.model");
至
JAXBContext jaxbContext = JAXBContext.newInstance(BookType.class);
我开始获得异常SEVERE: unexpected element (uri:"", local:"book"). Expected elements are (none)
有人能解释为什么会有这种行为吗?
第S页:为了方便起见,我的测试类和JAXB生成的类在同一个包中,即com.store.web.ws.v1.model
您看到的问题是因为JAXBContext
不知道您的ObjectFactory
类包含book
元素的@XmlElementDecl
注释。
当您在包名称上创建JAXBContext
时,它将自动拉入ObjectFactory
类。如果在类上创建JAXContext
,则需要显式包含带有@XmlRegistry
注释的类(在本例中为ObjectFactory
)。