четверг, 28 марта 2013 г.

Cannot find the declaration of element 'beans' ошибка валидации XML-конфига Spring в офлайн программе


Как решить проблему ошибки Cannot find the declaration of element 'beans' возникающей при  валидации XML-конфига framework Spring в программе находящейся в офлайн.

 Попросили меня знакомые написать маленькую программку с простеньким функционалом. Дай думаю, напишу ее на Java с использованием frameworkSpring ну и соберу все это с помощью Maven. Признаюсь честно, в Spring я не очень силен - изучаю, вот как раз и практика будет. Спустя некоторое время программа была написана, и друзья остались довольными, если бы не одно но, которое возникло на компьютере без доступа в интернет.  Программа просто не хотела  работать,  и на любое действие  выводила ошибку: Line 8 in XML document from class path resource [app-context.xml] is invalid; nested exception is org.xml.sax.SAXParseException; lineNumber: 8; columnNumber: 84; cvc-elt.1: Cannot find the declaration of element 'beans'.

Я некоторое время был в ступоре, программа работает на других компьютерах, все корректно написано, но почему появляется ошибка, да еще и на разборе Spring конфига. Полез в интернет и долго серфил по страницам, но никакого решения не попадалось, пока на одном из сайтов не попалась похожая ошибка. Оказывается, что для корректной валидации XML-конфига Spring необходим интернет.

Приведу часть XML-конфига, чтобы было понятно, где именно:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:jdbc="http://www.springframework.org/schema/jdbc"
      xmlns:context="http://www.springframework.org/schema/context"
      xsi:schemaLocation="http://www.springframework.org/schema/beans
          http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
          http://www.springframework.org/schema/jdbc
          http://www.springframework.org/schema/jdbc/spring-jdbc-3.1.xsd
          http://www.springframework.org/schema/context
          http://www.springframework.org/schema/context/spring-context-3.1.xsd">

Жирным выделены места требующие доступа к интернету.

Что же делать? Ларчик оказалось, просто открывался. Нужно было скачать и разместить файлы spring-beans-3.1.xsd, spring-jdbc-3.1.xsd, spring-context-3.1.xsd в корне программы, там же, где и XML-конфиг Spring. После этого немного переписать шапку конфига.

Пример приведу ниже:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:jdbc="http://www.springframework.org/schema/jdbc"
      xmlns:context="http://www.springframework.org/schema/context"
      xsi:schemaLocation="http://www.springframework.org/schema/beans classpath:spring-beans-3.1.xsd
          http://www.springframework.org/schema/jdbc classpath:spring-jdbc-3.1.xsd
          http://www.springframework.org/schema/context classpath:spring-context-3.1.xsd">

Здесь вместо URL-адресов прописывается classpath. И вуаля – все заработало.

1 комментарий: