对于该元素,没有带有@XmlElementDecl的ObjectFactory

时间:2015-01-06 14:17:20

标签: jaxb spring-ws xjc

我使用spring ws来实现我的Web服务。 我在Web服务中收到以下错误 “对于元素测试,没有带有@XmlElementDecl的ObjectFactory” test有一个@XmlElementRef。

在创建jaxb上下文时,我已将ContextPath设置为包名。

我做了以下事情:

  1. 使用xjc解析从WSDL转换为pojos。
  2. 我有多个WSDL,所以ObjectFactory被覆盖了。所以我只是用WSDL重命名了objectfactory前缀。 A.wsdl将有AObjectFactory等。所以我没有任何ObjectFactory类。
  3. 我认为在寻找@XmlElementDecl时,它会查找“ObjectFactory”类,然后它无法找到它,如果我将AObjectFactory重命名为ObjectFactory,则无法找到它。

    我的问题是:

    1. @XmlElementRef可以不引用我创建的重命名对象工厂吗?
    2. 可以以某种方式避免使用@XmlElementRef吗?
    3. 我们可以拥有多个ObjectFactories吗?
    4. 如果我们根本不创建ObjectFactories,@ xmlElementRef和@XmlElementDecl是如何工作的。
    5. 任何帮助都会很棒。

1 个答案:

答案 0 :(得分:0)

  

在创建jaxb上下文时,我使用了ContextPath设置为   包名。

当您通过上下文路径创建JAXBContext时,JAXB实现将查找名为ObjectFactory的类,该类使用@XmlRegistry进行注释。

  

我有多个WSDL,所以ObjectFactory被覆盖了。

通常每个命名空间/包应该有一个ObjectFactory。如果ObjectFactory变得越来越糟,也许你试图强迫一切都使用相同的包名。

  

所以我只是用WSDL重命名了objectfactory前缀。 A.wsdl将有   AObjectFactory等所以我没有任何ObjectFactory类。

当使用@XmlRegistry注释的类被称为ObjectFactory之外的其他内容时,您需要:

  1. 在与您的域模型相同的包中包含一个名为jaxb.index的文本文件,其中包含使用@XmlRegistry注释的所有类的简称。
  2. 引导用JAXBContext注释的生成类的@XmlRegistry