首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jaxb:如何生成ObjectFactory类?

Jaxb:如何生成ObjectFactory类?
EN

Stack Overflow用户
提问于 2011-06-22 23:19:59
回答 3查看 38K关注 0票数 7

我使用的是Java6、Eclipse2和SpringSource工具套件(和JaxB一样)。我编写了几个Java类,在这些类中我使用JaxB生成了一个XML schema。但是,我注意到,为了使用JaxB从Java对象生成XML文档的能力,我需要一个ObjectFactory。

代码语言:javascript
复制
final Marshaller marshaller = jaxbContext.createMarshaller();
// Here is where I don't have an ObjectFactory defined
final JAXBElement<WebLeads> webLeadsElement  
         = (new ObjectFactory()).createWebLeads(webLeadsJavaObj);

如何才能在不破坏已有类的情况下生成ObjectFactory?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-06-23 00:00:01

更新

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

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

如果您没有ObjectFactory,但仍然希望在上下文路径上创建JAXBContext,则可以在列出要包含在JAXBContext中文件的包中包括一个名为jaxb.index的文件(引用的类将自动拉入):

  • 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必需的

虽然即使从Java类开始,也有一些用例可以利用带有@XmlRegistry注释的类似类来使用@XmlElementDecl注释,但并不需要ObjectFactory

创建JAXBElement实例

您始终可以直接创建JAXBElement

代码语言:javascript
复制
final JAXBElement<WebLeads> webLeadsElement = new JAXBElement<WebLeads>(
    new QName("root-element-name"), 
    WebLeads.class, 
    webLeadsJavaObj);

JAXBElement的替代方案

或者,由于JAXBElement只是用来提供根元素信息,因此可以用@XmlRootElement注释WebLeads

代码语言:javascript
复制
@XmlRootElement(name="root-element-name")
public class WebLeads {
   ...
}
票数 11
EN

Stack Overflow用户

发布于 2011-06-22 23:23:41

我不认为你需要ObjectFactory。

它只是XJC生成的一个实用程序类,用于在某些情况下简化工作。

编辑:阅读您的问题,我猜您手动创建了带有JAXB注释的POJO。

考虑在“根”类上添加XmlRootElement:http://download.oracle.com/javase/6/docs/api/javax/xml/bind/annotation/XmlRootElement.html

这里有更多信息:No @XmlRootElement generated by JAXB

票数 2
EN

Stack Overflow用户

发布于 2011-06-22 23:24:29

你不“需要”一个工厂就能让JaxB编组程序正常工作。如果你向它传递一个带有list或map变量的对象,它实际上会正确地封送它。当然,只有当您正确地将JaxB编组程序初始化为要编组的对象类时,才会出现这种情况。

您可以创建一个工厂,该工厂可以创建一些专门的返回(假设您不希望它返回您的公共临时变量)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6442312

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档