[英]JAXB schema validation error with CXF - JAXBException occurred : cvc-elt.1: Cannot find the declaration of element
[英]Exception cvc-elt.1: Cannot find the declaration of element 'AsifXml' when trying to unmarshall using JAXB
尝试使用JAXB解组xml文档时,我一直收到以下错误。 错误如下:
cvc-elt.1:找不到元素'AsifXml'的声明
unmarshall的代码是这样的:
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
的标记,并声明了一个带有前缀的XML命名空间,也称为AsifXml
。 但是,这两者无关。 元素本身没有任何名称空间,这违反了模式。
请尝试以下示例,它应该工作:
<AsifXml xmlns="http://www.website.com/ASIF"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
version="1.1.4"
content="study">
此示例表示AsifXml
元素具有名称空间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">
它完全相同,但这个版本令人困惑和冗长。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.