【发布时间】:2011-02-09 16:43:20
【问题描述】:
在使用 JAXB 时是否总是需要 ObjectFactory 类?
没有它我得到这个异常:
javax.xml.bind.JAXBException: “com.a.b.c” 不包含 ObjectFactory.class 或 jaxb.index
我gather ObjectFactory 可能有点矫枉过正。但是考虑到这个例外,我猜你需要它..但不知道为什么?
【问题讨论】:
在使用 JAXB 时是否总是需要 ObjectFactory 类?
没有它我得到这个异常:
javax.xml.bind.JAXBException: “com.a.b.c” 不包含 ObjectFactory.class 或 jaxb.index
我gather ObjectFactory 可能有点矫枉过正。但是考虑到这个例外,我猜你需要它..但不知道为什么?
【问题讨论】:
我使用的是 Spring,我只需要更改
Jaxb2Marshaller mlr = new Jaxb2Marshaller();
mlr.setContextPaths("","");
到
Jaxb2Marshaller mlr = new Jaxb2Marshaller();
mlr.setPackagesToScan("","");
【讨论】:
您可以包含一个 jaxb.index 文件来代替 ObjectFactory,该文件是一个文本文件,其中包含 Java 类的换行符列表。
有关使用 jaxb.index 文件的示例,请参阅:
【讨论】:
当您使用 JAXBContext.newInstance(String) 工厂方法时,您会得到该异常,您将包名称作为参数传递。这确实需要ObjectFactory,否则,JAXB 不知道要处理哪些类。
如果您没有ObjectFactory,则需要改为JAXBContext.newInstance(Class...),传入带注释的类的显式列表以添加到上下文中。
【讨论】:
JAXBContext.newInstance(OurRoot.class) 吗?还是我们需要传入一个所有我们的类的列表?
ObjectFactory 中生成的方法看起来有些奇怪,而且大多数情况下根本不需要使用,直接实例化即可。它们对于创建 JAXBElement 包装器最有用。