尝试使用JAXB解码xml文档时,我始终收到以下错误。该错误的内容如下:



要解码的代码是这样的:

    JAXBContext jc = JAXBContext.newInstance("asif_objects");
    Unmarshaller u = jc.createUnmarshaller();
    SchemaFactory sf = SchemaFactory.newInstance(
            javax.xml.XMLConstants.W3C_XML_SCHEMA_NS_URI);
    Schema schema = sf.newSchema(new File("ASIF_Schema1.1.6.xsd"));
    u.setSchema(schema);

    AsifXml doc
        = (AsifXml)u.unmarshal(new FileInputStream("asif_small.xml"));

我相信xsd文件的相关部分看起来像这样(省略了标签的打开和关闭,因为我不确定如何在网站上格式化它们:
?xml version="1.0" encoding="UTF-8"?
xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:asif="http://www.website.com/ASIF"
targetNamespace="http://www.website.com/ASIF" elementFormDefault="qualified"
attributeFormDefault="unqualified" version="1.1.6"

xs:element name="AsifXml"
    xs:complexType

我相信这里是相关的XML:
AsifXml xmlns:AsifXml="http://www.website.com/ASIF"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.1.4"
content="study"

到目前为止,我已经尝试过搜索同一错误,但是似乎大多数响应与我未使用的Web服务中的错误有关。我还以为可能是因为我在代理后面,并且无法访问架构文档中给出的url,所以可能在验证时遇到了问题,但是经过进一步的研究,我得到的印象是这些url实际上并不一定存在验证文档。我在另一个不在代理后面的网络上进行了尝试,并收到了相同的错误。

对此问题的任何帮助将不胜感激。

最佳答案

示例XML文件对我来说似乎是虚假的。乍一看看起来不错,但没有任何意义:

<AsifXml xmlns:AsifXml="http://www.website.com/ASIF">

这声明了一个名为AsifXml的标签,并声明了一个带有前缀也称为AsifXml的XML namespace 。但是,两者彼此无关。元素本身没有任何命名空间,这违反了架构。

请尝试以下示例,它应该可以工作:
<AsifXml xmlns="http://www.website.com/ASIF"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         version="1.1.4"
         content="study">

此示例说AsifXml元素具有 namespace http://www.website.com/ASIF,这是该模式所期望的。

该样本可以等效地编码为:
<AsifXml:AsifXml xmlns:AsifXml="http://www.website.com/ASIF"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         version="1.1.4"
         content="study">

它等同于同一件事,但是此版本令人困惑且冗长。

09-10 07:48