Java 使用JAXB时是否总是需要ObjectFactory类?

Java 使用JAXB时是否总是需要ObjectFactory类?,java,jaxb,Java,Jaxb,使用JAXB时是否总是需要ObjectFactory类 如果没有它,我会得到这个例外: javax.xml.bind.JAXBException: “com.a.b.c” 不包含ObjectFactory.class或 jaxb.index 我认为ObjectFactory有点过分了。但考虑到这个例外,我猜你需要它。。但不确定原因?当您使用JAXBContext.newInstance(String)factory方法时,会出现异常,在该方法中,您将包名作为参数传入。这确实需要ObjectFac

使用JAXB时是否总是需要ObjectFactory类

如果没有它,我会得到这个例外:

javax.xml.bind.JAXBException: “com.a.b.c” 不包含ObjectFactory.class或 jaxb.index


我认为ObjectFactory有点过分了。但考虑到这个例外,我猜你需要它。。但不确定原因?

当您使用
JAXBContext.newInstance(String)
factory方法时,会出现异常,在该方法中,您将包名作为参数传入。这确实需要
ObjectFactory
存在,否则,JAXB不知道要处理哪些类


如果没有
ObjectFactory
,则需要
JAXBContext.newInstance(Class…
,传入要添加到上下文中的注释类的显式列表。

而不是ObjectFactory,可以包含一个jaxb.index文件,该文件是一个文本文件,包含一个新的Java类行分隔列表

有关使用jaxb.index文件的示例,请参见:


我使用的是Spring,我不得不改变

Jaxb2Marshaller mlr = new Jaxb2Marshaller();
mlr.setContextPaths("","");


我们总是有相同的根元素。从根开始,我们有一个很大的类/xml元素层次结构。那么我们可以只做
JAXBContext.newInstance(OurRoot.class)
?或者我们需要传入所有类的列表吗?@Marcus:一般来说,您只需要传入根类,是的,除非您的注释中有多态关联,在这种情况下,您还需要传入这些关联。在
ObjectFactory
中生成的方法可能看起来有点奇怪,在大多数情况下,您根本不需要使用它们,只需直接实例化即可。它们对于创建
JAXBElement
wrapper最有用。
Jaxb2Marshaller mlr = new Jaxb2Marshaller();
mlr.setPackagesToScan("","");