2013-02-15 3 views
0

Я обычно получаю такую ​​ошибку, когда не находясь на линии:Нет декларации не может быть найдено для элемента (XML 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

Вы не говорите в своем вопросе, как именно вы загружаете XML-файл, требующий этой схемы, но по его названию он будет иметь какое-то отношение к конфигурациям Spring bean. У Spring есть механизм для компонентов, которые предоставляют свои собственные схемы для их объединения внутри своих JAR-файлов, поэтому их не нужно извлекать из Интернета. Это включает в себя формат файл java.util.Properties имени META-INF/spring.schemas в файле JAR, который содержит строки, которые отображают 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).

Поэтому я подозреваю, что здесь происходит то, что вы имеете в виду другую версию схемы из версии, которую вы используете на самом деле, а это означает, что запрашиваемая вами схема не указана в каталоге spring.schemas, и поэтому должен пойти в Интернет, чтобы загрузить его. Если, например, у вас есть hazelcast-spring-2.5.jar, тогда вам нужно использовать соответствующее http://www.hazelcast.com/schema/spring/hazelcast-spring-2.5.xsd в xsi:schemaLocation.

+0

Я вижу, это может быть проблемой – xybrek

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); 
0

Копия, что XSD в WEB-INF/и дать Ури, как /WEB-INF/xsdname.xsd в файле XML, в котором вы используя схему.