java - JAXB 绑定(bind)父类(super class)型属性

标签 java jaxb

有:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name="A", propOrder={"k", "l"})
public class A {

    @XmlElement(name="kkk")
    protected K k;

    @XmlElement(name="lll")
    protected L l;
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name="B")
public class B extends A {
}

在 xsd 中它看起来像:

<xsd:complexType name="A">
    <xsd:sequence>
        <xsd:element name="kkk" type="K" minOccurs="0"/>
        <xsd:element name="lll" type="L" minOccurs="0"/>
    </xsd:sequence>
</xsd:complexType>

<xsd:complexType name="B">
    <xsd:complexContent>
        <xsd:extension base="A"/>
    </xsd:complexContent>
</xsd:complexType>

但是当我尝试解析 B 类型的元素时,例如:

...
  <b>
    <kkk>...</kkk>
    <lll>...</lll>
  </b>
...

我收到如下错误:

Caused by: org.xml.sax.SAXParseException; lineNumber: 27; columnNumber: 35; cvc-
complex-type.2.1: Element 'b' must have no character or element information item
 [children], because the type's content type is empty.

问题出在哪里?

最佳答案

给出的例子是完全正确的。问题是xsd:restriction使用标签代替 xsd:extension 。它们的区别在于,restriction 不允许基本类型允许的某些元素、属性或值,而 extension 允许出现其他属性和元素。 *

因此,就我而言,我不允许 B 类型中的任何 A 元素,直到我发现我使用了错误的标签。

关于java - JAXB 绑定(bind)父类(super class)型属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26774274/

相关文章:

java - 如何在 spring-kafka 中的每条 kafka 消息后提交?

java - 如何注入(inject)同一接口(interface)的多个模拟

java - 在 eclipse 中从 WSDL 生成 XSD

maven - 从复杂类生成 xsd 时,Jaxb2 maven 插件出错

java - 编码时如何将命名空间属性添加到 JAXB 中的元素?

java - Spring 工具套件在 maven-jaxb2-plugin 的 <execution> 上显示错误

java - 我应该让我的 REST 客户端 API 库异步(Java 8)

java - 服务器和客户端之间的多个套接字

java - 我的程序无法绘制/渲染它所需要的内容

java - 从未知的 JAXBContext (XML) 为 JSON 创建编码器