wake-up-neo.net

Ausnahme beim Starten der Spring-Anwendung von Java

Ich kann mein Spring-Projekt mit Maven kompilieren und starten:

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

Wenn ich jedoch alle Gläser mit maven-Assembly-plugin (einschließlich applicationContext.xml) in einer einzigen Datei zusammenstelle, erhalte ich während der Ausführung von Exception immer eine 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'.

Ich habe auch versucht, die Schemadefinitionen, d. H. spring-context.xsd usw., direkt an den Klassenpfad anzuhängen, jedoch ohne Erfolg.

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

Spring-Namespace-Handler werden mit den Dateien /META-INF/spring.schemas und /META-INF/spring.handlers aufgelöst. Da Dateien mit diesen Namen in verschiedenen Spring-Gläsern vorhanden sind, verbleibt wahrscheinlich nur eine von ihnen nach maven-Assembly-plugin im Ziel-Gläschen.

Möglicherweise können Sie diese Dateien manuell zusammenführen und maven-Assembly-plugin so konfigurieren, dass die Datei in der Ziel-jar mit dieser zusammengeführten Datei überschrieben wird.

19
axtavt

Ich vermute, in Ihrer Spring-Konfigurationsdatei fehlt der context-XML-Namespace. Es sollte dem Wurzelelement Ihrer Spring-Konfigurationsdatei folgendermaßen hinzugefügt werden:

<?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

Ich habe das Grundproblem für dieses Problem in der Antwort von axtavt gefunden und es als "Fehler" gemeldet. im Frühling: https://jira.springsource.org/browse/SPR-8368 - Eine Problemumgehung zum Erstellen eigener zusammengeführter Kopien dieser Dateien ist dort enthalten. Für die Nachwelt ist der Code auch hier:

//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

Ich glaube, dass es 3 Lösungen für dieses Problem gibt

  1. Die TX-JAR-Datei sollte im Klassenpfad/Buildpfad des Projekts enthalten sein. (häufigster Fehler)
  2. Erwähnt durch "axtavt" oben
  3. Probieren Sie diese Lösung vor der "axtaxt" -Lösung aus: Gehen Sie in Ihr War-Verzeichnis (in der erweiterten Registerkarte des GWT-Compilers angegeben) und legen Sie die Datei spring-tx.jar im lib-Ordner unter Ihrem War-Verzeichnis ab. Aktualisieren Sie und führen Sie sie erneut aus. 
1
lokesh

Welche Frühlingsabhängigkeiten haben Sie in Ihrem Pom? Möglicherweise werden XML-Parsing-Fehler angezeigt, weil einige Spring-JAR-Dateien nicht im Klassenpfad enthalten sind. Im Frühjahr 3 wurde die Bibliothek in viele Jar-Dateien aufgeteilt. Check out diesen Beitrag um zu sehen, was Sie brauchen, insbesondere:

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

Wie dies andeutet, gibt es ein Problem mit der Analyse in Request oder in Response. Dieser Fehler kann auftreten, wenn der RestTemplate-Client eine bestimmte Antwortart von der Ressource erwartet, die Ressource jedoch etwas vollständig zurückgibt. Ich habe diesen Fehler für einen RestTemplate-Client POST erhalten, der mit der Änderung in der zurückgegebenen Antwort zusammenhängt.

Für z. Anfängliches RestTemplate, das eine Entität 'MyClass' zurückgab, änderte den String und gab den String zurück, sodass der Parser mit dem Fehler begann

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

Gewechselt zu 

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

Da sich der Antworttyp von der Entität in String geändert hat, hat der Parser beim Verarbeiten der Antwort einen Fehler ausgegeben. Es wurde in den richtigen Antworttyp geändert (der in meinem Fall String war), und es begann zu funktionieren.

0
Vivek Kumar