Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法解析提供命名空间的JAXB生成的类错误_Java_Namespaces_Xsd_Jaxb_Jaxb2 - Fatal编程技术网

Java 无法解析提供命名空间的JAXB生成的类错误

Java 无法解析提供命名空间的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">

参考我之前的两篇文章(,)。现在我陷入了另一个奇怪的问题(我是JAXB的noob)。我已经使用my book.xsd(包括bookList和book作为根元素)生成了Java类。一切正常。现在我正在为评论创建完全独立的XSD

<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>