XSD 到 jaxb 注释类给出了无法解析 xml 元素错误

Posted

技术标签:

【中文标题】XSD 到 jaxb 注释类给出了无法解析 xml 元素错误【英文标题】:XSD to jaxb annotated classes gives cannot resolve xml element error 【发布时间】:2013-08-01 17:34:23 【问题描述】:

我有无错误的 xsd。下面是我的xsd。我只是指主要元素。 Jaxb 转换的类在 @XmlRootElement(name = "principal") 上给出错误:“无法在此上下文中使用命名空间 '' 和名称 'principal' 解析 XML 元素声明”。有人可以帮忙吗?

这是我的 xsd:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="authorization"><xs:complexType>           <xs:sequence><xs:element name="group" maxOccurs="unbounded" minOccurs="1"><xs:complexType><xs:sequence><xs:element ref="principal" maxOccurs="unbounded" minOccurs="1" /></xs:sequence>
<xs:attribute name="name" type="xs:string"></xs:attribute>
</xs:complexType></xs:element>  <xs:element name="principal" ><xs:complexType><xs:simpleContent><xs:extension base="xs:string"><xs:attribute type="xs:string" name="family" use="optional"/><xs:attribute name="type" type="xs:string"  use="optional"/>
</xs:extension></xs:simpleContent></xs:complexType></xs:element>
</xs:schema>

【问题讨论】:

【参考方案1】:

首先,您的架构是错误的。我认为您尝试这样写:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
    elementFormDefault="qualified" attributeFormDefault="unqualified">
    <xs:element name="authorization">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="group" maxOccurs="unbounded" minOccurs="1">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element ref="principal" maxOccurs="unbounded"
                                minOccurs="1" />
                        </xs:sequence>
                        <xs:attribute name="name" type="xs:string"></xs:attribute>
                    </xs:complexType>
                </xs:element>
                <xs:element name="principal">
                    <xs:complexType>
                        <xs:simpleContent>
                            <xs:extension base="xs:string">
                                <xs:attribute type="xs:string" name="family" use="optional" />
                                <xs:attribute name="type" type="xs:string" use="optional" />
                            </xs:extension>
                        </xs:simpleContent>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

对于这个 XSD,我也遇到了同样的问题。如果您更改为其他 XSD,问题将得到解决

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
    elementFormDefault="qualified" attributeFormDefault="unqualified">
    <xs:element name="authorization">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="group" maxOccurs="unbounded" minOccurs="1">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element ref="principal" maxOccurs="unbounded"
                                minOccurs="1" />
                        </xs:sequence>
                        <xs:attribute name="name" type="xs:string"></xs:attribute>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="principal">
        <xs:complexType>
            <xs:simpleContent>
                <xs:extension base="xs:string">
                    <xs:attribute type="xs:string" name="family" use="optional" />
                    <xs:attribute name="type" type="xs:string" use="optional" />
                </xs:extension>
            </xs:simpleContent>
        </xs:complexType>
    </xs:element>
</xs:schema>

问候

亚历克斯。

【讨论】:

以上是关于XSD 到 jaxb 注释类给出了无法解析 xml 元素错误的主要内容,如果未能解决你的问题,请参考以下文章

Maven Xjc / Jaxb插件无法解析简单的Xsd文件

Amazon Product.xsd的JAXB类生成无法正常工作

向依赖于XSD中的信息的JAXB生成的类添加注释

将@Generated注释添加到JAXB生成的类中

带有 JAXB 类的 GXT

Jackson:从 XSD 生成 Jackson 类