web-dev-qa-db-fra.com

Exception de démarrage de l'application Spring à partir de Java

Je suis capable de compiler et de démarrer mon projet Spring avec Maven:

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

Cependant, lorsque j'assemble tous les fichiers JAR dans un seul fichier à l'aide de maven-Assembly-plugin (y compris applicationContext.xml), je reçois toujours une Exception lors de l'exécution de 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'.

J'ai également essayé de joindre les définitions de schéma, c'est-à-dire spring-context.xsd, etc. directement au chemin de classe, mais sans succès.

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>
15
rmv

Les gestionnaires d’espace de noms Spring sont résolus à l’aide des fichiers /META-INF/spring.schemas et /META-INF/spring.handlers. Comme les fichiers portant ces noms existent dans des fichiers Spring différents, il est probable qu’un seul d’entre eux reste dans le fichier jar cible après maven-Assembly-plugin.

Peut-être pourriez-vous fusionner ces fichiers manuellement et configurer en quelque sorte maven-Assembly-plugin pour écraser le fichier dans le fichier jar cible avec ce fichier fusionné.

19
axtavt

Je suspecte que votre fichier de configuration print soit manquant dans l'espace de noms XML context. Il devrait être ajouté à l’élément racine de votre fichier de configuration print comme ceci:

<?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>
4
Abhinav Sarkar

J'ai trouvé le problème racine pour cela selon la réponse de axtavt, et je l'ai signalé comme un? Bug? au printemps: https://jira.springsource.org/browse/SPR-8368 - une solution de contournement pour générer vos propres copies fusionnées de ces fichiers est incluse ici. Pour la postérité, le code est aussi ici:

//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");
}
3
Ian

Je crois qu'il y a 3 solutions à ce problème

  1. Le fichier jar tx doit être inclus dans le chemin de classe/chemin de construction du projet. (erreur la plus courante)
  2. Mentionné par "axtavt" ci-dessus
  3. Essayez ceci avant la solution "axtaxt": allez dans votre répertoire war (spécifié dans l'onglet avancé de GWT compile) et placez le fichier spring-tx.jar dans le dossier lib du sous-répertoire war, actualisez-le et exécutez-le. 
1
lokesh

Quelles dépendances de printemps avez-vous dans votre pom? Il est possible que vous rencontriez des erreurs d’analyse xml car certains fichiers jar de printemps ne se trouvent pas sur le chemin de classe. Au printemps 3, la bibliothèque a été divisée en plusieurs fichiers jar. Découvrez cet article pour voir ce dont vous avez besoin, en particulier:

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

Comme cela suggère, il y a un problème avec l'analyse syntaxique dans Request ou Response. Cette erreur peut se produire si le client RestTemplate attend un type particulier de réponse de la ressource, mais que la ressource renvoie complètement quelque chose. J'ai eu cette erreur pour un client POST RestTemplate qui était lié à une modification dans la réponse renvoyée.

Par exemple RestTemplate initial qui renvoyait une entité 'MyClass' a été modifié et a renvoyé String afin que l'analyseur commence à donner une erreur

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

Changé en 

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

Lorsque le type de réponse est passé de l'entité à String, l'analyseur a commencé à donner une erreur lors du traitement de la réponse. Changé pour corriger le type de réponse (qui dans mon cas était String) et cela a commencé à fonctionner.

0
Vivek Kumar