2014-11-06 29 views
1

有: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. 

问题在哪里?

+0

对不起。有我的错:在我的xsd中是'xsd:restriction'而不是'xsd:extension'。 – 2014-11-06 13:37:29

+0

所以你解决了它?随意张贴您自己的答案。这将为其他用户提供解决方案中遇到的类似问题指导。 – lexicore 2014-11-06 14:04:14

回答

0

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

因此,在我的情况下,我不允许B类型中的任何A元素,直到我发现我使用了错误的标记。