【问题标题】:Do you always need an ObjectFactory class when using JAXB?使用 JAXB 时是否总是需要 ObjectFactory 类?
【发布时间】:2011-02-09 16:43:20
【问题描述】:

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

没有它我得到这个异常:

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

gather ObjectFactory 可能有点矫枉过正。但是考虑到这个例外,我猜你需要它..但不知道为什么?

【问题讨论】:

    标签: java jaxb


    【解决方案1】:

    我使用的是 Spring,我只需要更改

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

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

    【讨论】:

      【解决方案2】:

      您可以包含一个 jaxb.in​​dex 文件来代替 ObjectFactory,该文件是一个文本文件,其中包含 Java 类的换行符列表。

      有关使用 jaxb.in​​dex 文件的示例,请参阅:

      【讨论】:

        【解决方案3】:

        当您使用 JAXBContext.newInstance(String) 工厂方法时,您会得到该异常,您将包名称作为参数传递。这确实需要ObjectFactory,否则,JAXB 不知道要处理哪些类。

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

        【讨论】:

        • 我们总是有相同的根元素。从根开始,我们有一个很大的类/xml 元素层次结构。那么我们可以只做JAXBContext.newInstance(OurRoot.class) 吗?还是我们需要传入一个所有我们的类的列表?
        • @Marcus:通常你只需要传入根类,是的,除非你的注释中有多态关联,在这种情况下你也需要传入它们。 ObjectFactory 中生成的方法看起来有些奇怪,而且大多数情况下根本不需要使用,直接实例化即可。它们对于创建 JAXBElement 包装器最有用。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-05-26
        • 1970-01-01
        • 2013-03-08
        • 1970-01-01
        • 2018-02-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多