2

私の以前の投稿への参照。ファイルから 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の代わりにルート要素としてXML をシードしていますBookList。この例は、パッケージのフル パスを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)

誰かがこの動作の理由を説明できますか?

PS: 便宜上、テスト クラスと JAXB 生成クラスは同じパッケージに含まれています。com.store.web.ws.v1.model

4

1 に答える 1

3

表示されている問題は、要素の注釈を含むクラスを がJAXBContext認識していないためです。ObjectFactory@XmlElementDeclbook

パッケージ名でを作成するJAXBContextと、自動的にObjectFactoryクラスが取り込まれます。on クラスを作成する場合は、注釈付きJAXContextのクラスを明示的に含める必要があります(この場合)。@XmlRegistryObjectFactory

于 2012-07-25T20:51:52.340 に答える