Java 无法解析提供命名空间的JAXB生成的类错误
参考我之前的两篇文章(,)。现在我陷入了另一个奇怪的问题(我是JAXB的noob)。我已经使用my book.xsd(包括bookList和book作为根元素)生成了Java类。一切正常。现在我正在为评论创建完全独立的XSDJava 无法解析提供命名空间的JAXB生成的类错误,java,namespaces,xsd,jaxb,jaxb2,Java,Namespaces,Xsd,Jaxb,Jaxb2,参考我之前的两篇文章(,)。现在我陷入了另一个奇怪的问题(我是JAXB的noob)。我已经使用my book.xsd(包括bookList和book作为根元素)生成了Java类。一切正常。现在我正在为评论创建完全独立的XSD <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="reviews">
<xs:complexType>
<xs:sequence>
<xs:element name="review" type="reviewType" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="self" type="xs:anyURI" />
</xs:complexType>
</xs:element>
<xs:complexType name="reviewType">
<xs:sequence>
<xs:element name="name" type="xs:string" minOccurs="1" maxOccurs="1" />
<xs:element name="comments" type="xs:string" minOccurs="1" maxOccurs="1" />
<xs:element name="rating" type="xs:integer" minOccurs="1" maxOccurs="1" />
</xs:sequence>
<xs:attribute name="self" type="xs:anyURI" />
</xs:complexType>
现在,当我使用JAXB生成java类时,它开始给我以下错误,如无法解析名为“reviews”和名称空间为“”的元素声明
有什么想法吗
已更新
我发现我使用的是一个common.xsd,它包含跨多个xsd使用的基本信息。像authorType
等信息。现在common.xsd也被我的books.xsd和reviews.xsd使用,这可能就是我出现此名称空间错误的原因。在这里如何避免此错误
架构已经存在。您必须将架构的元素放入命名空间中,因为JAXB似乎无法解析“审阅”(位于全局命名空间“”中)。其中两个tic表示“”一个空命名空间)。您可以通过如下方式修改模式的标题来完成此操作:
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema targetNamespace="http://your/namespace/goes/here"
xmlns="http://your/projects/namespace/goes/here"
xmlns:xs='http://www.w3.org/2001/XMLSchema'
elementFormDefault='qualified'>
此外,由于元素现在位于名称空间中,因此必须告诉XML文件在哪个名称空间中查找元素(可以同时有多个名称空间):
....
为了更深入地讨论模式名称空间,我推荐这本书:XML Schema,作者:Eric van der Vlist,O'REILLY您必须将模式的元素放入一个名称空间,因为JAXB似乎无法解析“reviews”(位于全局名称空间“”。其中两个TIC表示一个空名称空间)。您可以通过如下方式修改模式的标题来完成此操作:
<?xml version='1.0' encoding='UTF-8'?>
<xs:schema targetNamespace="http://your/namespace/goes/here"
xmlns="http://your/projects/namespace/goes/here"
xmlns:xs='http://www.w3.org/2001/XMLSchema'
elementFormDefault='qualified'>
此外,由于元素现在位于名称空间中,因此必须告诉XML文件在哪个名称空间中查找元素(可以同时有多个名称空间):
....
为了更深入地讨论模式名称空间,我推荐这本书:xmlschema,作者:ericvandervlist,O'REILLY你有机会发布完整的xsd吗?您的xml名称空间定义很可能混淆了。这是完整的XSD供审阅,对于其他xml,它们位于链接(post 1和post 2)中。我的意思是根元素,例如模式信息已经存在。stackoverflow没有渲染它。我刚刚意识到,有一条关于现有xml的评论说,添加模式将为JSON增加额外的负担。您能随时发布完整的xsd吗?您的xml名称空间定义很可能混淆了。这是完整的XSD供审阅,对于其他xml,它们位于链接(post 1和post 2)中。我的意思是根元素,例如模式信息已经存在。stackoverflow没有渲染它。我刚刚意识到,在现有xml上有一条注释,添加模式将为JSON增加额外的负担。
<reviews xmlns="http://your/namespace/goes/here">
....
</reviews>