0

我不在线时通常会遇到这种错误:

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

什么是解决方案,以便它不必每次都连接到互联网。

4

3 回答 3

3

您没有在问题中确切说明您是如何加载需要此模式的 XML 文件,但从其名称​​来看,它似乎与 Spring bean 配置有关。Spring 为组件提供了一种机制,这些组件提供了自己的模式,可以将这些模式捆绑到它们的 JAR 文件中,这样就不必从互联网上获取它们。这涉及在 JAR 文件中java.util.Properties命名的格式文件META-INF/spring.schemas,其中包含将 http URL 映射到本地路径(在 JAR 文件中)的行,例如

http\://www.hazelcast.com/schema/spring/hazelcast-spring-2.1.xsd=hazelcast-spring-2.1.xsd

(从hazelcast-spring-2.1.3.jar)。

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

于 2013-02-15T13:42:47.917 回答
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);
于 2013-02-15T09:21:59.247 回答
0

将该 XSD 复制到 WEB-INF/ 并将 uri 作为/WEB-INF/ xsdname .xsd在您使用模式的 XML 文件中提供。

于 2013-02-15T13:28:26.927 回答