我使用的是Java6、Eclipse2和SpringSource工具套件(和JaxB一样)。我编写了几个Java类,在这些类中我使用JaxB生成了一个XML schema。但是,我注意到,为了使用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?
发布于 2011-06-23 00:00:01
更新
这个问题可能指的是ObjectFactory在创建JAXBContext中的作用。如果您在上下文路径上引导JAXBContext,那么它将检查该位置中的ObjectFactory,以便确定该包中的类:
如果您没有ObjectFactory,但仍然希望在上下文路径上创建JAXBContext,则可以在列出要包含在JAXBContext中文件的包中包括一个名为jaxb.index的文件(引用的类将自动拉入):
或者,您可以在类的数组上引导JAXBContext,而不是在上下文路径上:
是ObjectFactory必需的
虽然即使从Java类开始,也有一些用例可以利用带有@XmlRegistry注释的类似类来使用@XmlElementDecl注释,但并不需要ObjectFactory。
创建JAXBElement实例
您始终可以直接创建JAXBElement:
final JAXBElement<WebLeads> webLeadsElement = new JAXBElement<WebLeads>(
new QName("root-element-name"),
WebLeads.class,
webLeadsJavaObj);JAXBElement的替代方案
或者,由于JAXBElement只是用来提供根元素信息,因此可以用@XmlRootElement注释WebLeads类
@XmlRootElement(name="root-element-name")
public class WebLeads {
...
}发布于 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
发布于 2011-06-22 23:24:29
你不“需要”一个工厂就能让JaxB编组程序正常工作。如果你向它传递一个带有list或map变量的对象,它实际上会正确地封送它。当然,只有当您正确地将JaxB编组程序初始化为要编组的对象类时,才会出现这种情况。
您可以创建一个工厂,该工厂可以创建一些专门的返回(假设您不希望它返回您的公共临时变量)。
https://stackoverflow.com/questions/6442312
复制相似问题