java - 在 xsd 上使用 xjc 时缺少包装类

标签 java jaxb xsd xjc

我有以下 XSD:

<xsd:element name="products" >
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="product" type="foo:myProduct" maxOccurs="unbounded" />
      </xsd:sequence>
      </xsd:complexType>
</xsd:element>

现在,当我发出 XJC 时,它不会生成 Products.class 文件,而只会生成 Product.class。当然,我的 XML 看起来像这样:

<products>
   <product>...</product>
   <product>...</product>
</products>

所以最后,我没有带有 XmlRootElement 注释的类,这很奇怪。当然我无法让编码工作。

任何提示我的 XSD 可能有什么问题,或者我需要告诉 XJC 创建该类吗?在我看来,需要生成一个包装类!?

谢谢

最佳答案

选项:

  • 检查您的ObjectFactory对于像 createProducts(...) 这样的方法.
  • 使用JAXBElement<Products> .
  • 使用 <jaxb:class name="ProductsElement"/> 自定义您的元素- 你会得到一个ProductsElement@XmlRootElement .
  • 您还可以使用添加@XmlRootElement到您现有的Products类。

更新

这是我的一个项目中的一个小例子。我有一个像

的构造
<element name="Capabilities" type="wps:WPSCapabilitiesType">
</element>

ObjectFactory我有:

@XmlElementDecl(namespace = "http://www.opengis.net/wps/1.0.0", name = "Capabilities")
public JAXBElement<WPSCapabilitiesType> createCapabilities(WPSCapabilitiesType value) {
   return new JAXBElement<WPSCapabilitiesType>(_Capabilities_QNAME, WPSCapabilitiesType.class, null, value);
}

所以你应该得到像 createProducts(...) 这样的方法在你的ObjectFactory - 不是针对类型而是针对元素。这是关于选项 1 的。

选项 2 - 它并不神秘。您只需创建 JAXBElement 的实例提供元素的限定名称、值的类型和值:

new JAXBElement<WPSCapabilitiesType>(_Capabilities_QNAME, WPSCapabilitiesType.class, null, value);

在你的情况下将类似于 new JAXBElement<ProductsType>(new QName("products"), Products.class, null, products) .

最后你说你没有Products类但仅限 Product类(class)。嗯。这意味着您不会获得为 products 中声明的匿名复杂类型生成的类。元素。这并非不可能,但我不知何故怀疑这里是否存在这种情况。检查您的类(class)是否有类似 ProductsType 的类(class)或ProductsElement .

关于java - 在 xsd 上使用 xjc 时缺少包装类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27549171/

相关文章:

c# - 如何不在 nUnit 2.6.4 xml 结果中显示堆栈跟踪?

Java While 循环输入验证

java - 检查表达式语法的更有效解决方案?

java - JAXB读取XML文档

Java 11 + Spring Boot + HATEOAS + JAXBException : Class *** nor any of its super class is known to this context

c# - 从 XSD 生成的类不适用于 XmlSerializer

XML 架构验证 : Cannot find the declaration of element

java - 在 Java 中将 UTC 时间转换为 IST 时间在 LOCAL 中有效,但在 CLOUD SERVER 中无效

java - 如何让 Graphics2D 在鼠标悬停时绘制工具提示

java - 警告 : Provider com. 未找到 sun.xml.internal.bind.v2.ContextFactory