Jaxb:我如何生成ObjectFactory类?

Dav*_*ave 7 java jaxb jaxb2

我正在使用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);
Run Code Online (Sandbox Code Playgroud)

如何在不吹走现有类的情况下生成ObjectFactory?

bdo*_*han 11

UPDATE

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

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

或者,您可以JAXBContext在类数组而不是上下文路径上引导您:


ObjectFactory是否必需

一个ObjectFactory不是必需的,虽然从Java类开始,即使有使用的情况下,你可以利用带注释的相似课程@XmlRegistry,以使用@XmlElementDecl注释.

创建JAXBElement实例

您可以随时JAXBElement直接创建:

final JAXBElement<WebLeads> webLeadsElement = new JAXBElement<WebLeads>(
    new QName("root-element-name"), 
    WebLeads.class, 
    webLeadsJavaObj);
Run Code Online (Sandbox Code Playgroud)

JAXBElement的替代品

或者由于JAXBElement仅用于提供根元素信息,因此您可以使用以下命令为您的WebLeads类添加注释@XmlRootElement:

@XmlRootElement(name="root-element-name")
public class WebLeads {
   ...
}
Run Code Online (Sandbox Code Playgroud)