我正在使用Java 6,JaxB 2和SpringSource Tool Suite(与Eclipse相同)。我编写了两个Java类,并使用JaxB从中生成XML模式。但是,我注意到为了使用JaxB从Java对象生成XML文档的功能,我需要一个ObjectFactory。

final Marshaller marshaller = jaxbContext.createMarshaller();
// Here is where I don't have an ObjectFactory defined
final JAXBElement<WebLeads> webLeadsElement
         = (new ObjectFactory()).createWebLeads(webLeadsJavaObj);

我如何生成ObjectFactory而不丢掉我现在已经拥有的类?

最佳答案

更新

这个问题可能是指ObjectFactory在创建JAXBContext中的作用。如果在上下文路径上引导JAXBContext,则它将在该位置检查ObjectFactory以确定该包中的类:

  • http://bdoughan.blogspot.com/2010/09/processing-atom-feeds-with-jaxb.html

  • 如果您没有ObjectFactory,但仍然希望在上下文路径上创建JAXBContext,则可以在该软件包中包含一个名为jaxb.index的文件,列出要包含在JAXBContext中的文件(被引用的类将自动插入):
  • http://bdoughan.blogspot.com/2010/08/using-xmlanyelement-to-build-generic.html

  • 或者,您可以在类数组而不是上下文路径上引导JAXBContext:
  • http://bdoughan.blogspot.com/2010/11/jaxb-and-inheritance-using-xsitype.html


  • 是ObjectFactory必需的

    不需要ObjectFactory,尽管即使从Java类开始,在某些用例中,您也可以利用带 @XmlRegistry 注释的相似类来使用 @XmlElementDecl 注释。

    创建JAXBElement的实例

    您总是可以直接创建JAXBElement:
    final JAXBElement<WebLeads> webLeadsElement = new JAXBElement<WebLeads>(
        new QName("root-element-name"),
        WebLeads.class,
        webLeadsJavaObj);
    

    替代JAXBElement的

    或者因为JAXBElement仅用于提供根元素信息,所以可以用WebLeads注释@XmlRootElement类:
    @XmlRootElement(name="root-element-name")
    public class WebLeads {
       ...
    }
    

    09-30 23:06