没有为元素找到声明(XML Schema)

时间:2013-02-15 09:09:52

标签: java xml eclipse schema

我不在网上时会遇到这种错误:

org.xml.sax.SAXParseException; lineNumber: 55; columnNumber: 33; schema_reference.4: Failed to read schema document 'http://www.hazelcast.com/schema/spring/hazelcast-spring-2.1.xsd', 
because 1) could not find the document; 2) the document could not be read; 3) the root element of the document is not <xsd:schema>.

Caused by: java.net.ConnectException: Connection timed out: connect

...no declaration can be found for element 'hz:hazelcast'.

解决方案是什么,因此无需每次都连接到互联网。

3 个答案:

答案 0 :(得分:3)

您没有在问题中准确地说明您是如何加载需要此架构的XML文件的,但是通过它的名称,它似乎与Spring bean配置有关。 Spring有一个组件机制,它们提供自己的模式将这些模式捆绑在JAR文件中,这样就不必从互联网上获取它们。这涉及JAR文件中名为java.util.Properties的{​​{1}}格式文件,其中包含将http URL映射到本地路径(在JAR文件中)的行,例如

META-INF/spring.schemas

(来自http\://www.hazelcast.com/schema/spring/hazelcast-spring-2.1.xsd=hazelcast-spring-2.1.xsd )。

所以我怀疑这里发生的事情是你指的是与你实际使用的hazelcast版本不同的架构版本,这意味着你请求的架构没有在hazelcast-spring-2.1.3.jar目录中列出因此它必须上网下载它。例如,如果您有spring.schemas,那么您需要在hazelcast-spring-2.5.jar中使用匹配的http://www.hazelcast.com/schema/spring/hazelcast-spring-2.5.xsd

答案 1 :(得分:1)

下载xsd并将其保存在您的项目中。使用以下代码访问xsd

JAXBContext context = JAXBContext.newInstance(<your>.class);
Unmarshaller jaxbUnMarshaller = context.createUnmarshaller();


SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
URL tmpurl = getClass().getClassLoader().getResource("file.xsd");
Schema s = schemaFactory.newSchema(tmpurl);
jaxbUnMarshaller.setSchema(s);

答案 2 :(得分:0)

将该XSD复制到WEB-INF /并在XML文件中将uri作为 / WEB-INF / xsdname .xsd 。您正在使用架构。