Исключение при запуске Spring-приложения из Java - PullRequest
15 голосов
/ 06 сентября 2010

Я могу скомпилировать и запустить свой проект Spring, используя Maven:

mvn -e clean compile exec:java -Dexec.mainClass=de.fraunhofer.fkie.tet.vmware.manager.Test

Однако, когда я собираю все jar-файлы в один файл, используя maven-assembly-plugin (включая applicationContext.xml), я всегдаполучить Exception во время выполнения java:

java -cp target/test-jar-with-dependencies.jar:. de.fraunhofer.fkie.tet.vmware.manager.Test

  INFO: Loading XML bean definitions from class path resource [applicationContext.xml]
  Sep 6, 2010 10:37:21 AM org.springframework.util.xml.SimpleSaxErrorHandler warning
  WARNING: Ignored XML validation warning
  org.xml.sax.SAXParseException: schema_reference.4: Failed to read schema document 'http://www.springframework.org/schema/context/spring-context.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>.
  ...
  Exception in thread "main" org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: 
  Line 10 in XML document from class path resource [applicationContext.xml] is invalid; nested exception is org.xml.sax.SAXParseException: cvc-complex-type.2.4.c: 
  The matching wildcard is strict, but no declaration can be found for element 'context:annotation-config'.
  ...
  Caused by: org.xml.sax.SAXParseException: cvc-complex-type.2.4.c: 
  The matching wildcard is strict, but no declaration can be found for element 'context:annotation-config'.

Я также пытался прикрепить определения схемы, например spring-context.xsd и т. д., непосредственно к пути к классам, но безуспешно.

less src/main/resources/applicationContext.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:context="http://www.springframework.org/schema/context"
         xsi:schemaLocation="http://www.springframework.org/schema/beans
                             http://www.springframework.org/schema/beans/spring-beans.xsd
                             http://www.springframework.org/schema/context 
                             http://www.springframework.org/schema/context/spring-context.xsd">

      <context:annotation-config />   <!-- wegen '@PostConstruct' -->
  <!--<context:component-scan base-package="de.fraunhofer" />     -->
  ...
  </beans>

Ответы [ 6 ]

19 голосов
/ 06 сентября 2010

Обработчики пространства имен Spring разрешаются с использованием файлов /META-INF/spring.schemas и /META-INF/spring.handlers. Поскольку файлы с этими именами существуют в разных банках Spring, вероятно, только один из них остается в целевом банке после maven-assembly-plugin.

Возможно, вы можете объединить эти файлы вручную и каким-то образом настроить maven-assembly-plugin для перезаписи файла в целевом jar этим объединенным файлом.

5 голосов
/ 06 сентября 2010

Я подозреваю, что в вашем весеннем конфигурационном файле отсутствует пространство имен context 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:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
           http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-3.0.xsd">

    <context:annotation-config />
    <context:component-scan base-package="com.abc.xyz" />

</beans>
3 голосов
/ 24 мая 2011

Я нашел корень проблемы для этого согласно ответу axtavt, и я сообщил об этом как? Ошибка? весной: https://jira.springsource.org/browse/SPR-8368 - здесь есть обходной путь для создания ваших собственных объединенных копий этих файлов. Для потомков код также здесь:

//IOUtils and FileUtils come from Apache Commons IO
for(String s : new String[] {"spring.schemas", "spring.handlers", "spring.tooling"}) {
    Enumeration<?> e = Test.class.getClassLoader().getResources("META-INF/"+s);
    StringBuilder out = new StringBuilder();
    while(e.hasMoreElements()) {
        URL u = (URL) e.nextElement();
        out.append(IOUtils.toString(u.openStream())).append("\n");
    }
    File outf = new File(s);
    FileUtils.writeStringToFile(outf, out.toString(), "UTF-8");
}
1 голос
/ 16 апреля 2012

Я считаю, что есть 3 решения этой проблемы

  1. Файл tx jar должен быть включен в classpath / buildpath проекта. (самая распространенная ошибка)
  2. Упомянутое "axtavt" выше
  3. Попробуйте это до решения «axtaxt»: перейдите в каталог war (указанный на расширенной вкладке компиляции GWT) и поместите файл spring-tx.jar в папку lib в вашем каталоге war, обновите и снова запустите.
0 голосов
/ 10 января 2013

Как и предполагалось, существует проблема с синтаксическим анализом либо в запросе, либо в ответе.Эта ошибка может возникать, если клиент RestTemplate ожидает определенного типа ответа от ресурса, но ресурс возвращает что-то полностью.Я получил эту ошибку для клиента POST RestTemplate, который был связан с изменением в возвращенном ответе.

Например, для первоначального RestTemplate, который возвращал сущность «MyClass», изменился и остался возвращать строку, так что анализатор начал выдавать ошибку

 ResponseEntity<MyClass> postResponseEntity = restTemplate.postForEntity(postEndPoint, httpRequestEntity, MyClass.class);
 MyClass postResponseBody = postResponseEntity.getBody();

Изменено на

 ResponseEntity<String> postResponseEntity = restTemplate.postForEntity(postEndPoint, httpRequestEntity, String.class);
 String postResponseBody = postResponseEntity.getBody();

Когда тип ответа изменился с объекта на String, анализатор начал выдавать ошибку при обработке ответа.Изменил его на правильный тип ответа (в моем случае это был тип String), и он начал работать.

0 голосов
/ 06 сентября 2010

Какие весенние зависимости у вас в поме?Вы можете получить ошибки синтаксического анализа xml из-за того, что некоторые весенние файлы jar отсутствуют в пути к классам.Весной 3 года библиотека была разбита на множество фляг.Проверьте этот пост , чтобы увидеть, что вам нужно, а именно:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>${org.springframework.version}</version>
</dependency>
...