2010-09-06 15 views
15

jestem w stanie skompilować i uruchomić mój projekt wiosna użyciu Maven:Wyjątek zastosowanie począwszy Wiosna z Java

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

Jednak, kiedy zebranie wszystkich słoików w pojedynczym pliku przy użyciu maven-assembly-plugin (w tym applicationContext.xml), zawsze uzyskać Exception podczas wykonywania 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'. 

próbowałem też dołączyć do definicji schematu, tzn spring-context.xsd itd bezpośrednio do ścieżki klasy, ale bez powodzenia.

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> 
+0

Czy możesz umieścić swój wniosekContext.xml - lub przynajmniej sekcja nagłówka. Podejrzewam, że jest problem z twoim nagłówkiem/dtd, itp. –

+0

"applicationContext.xml" jest zamieszczony powyżej. O dziwo, aplikacja działa bez problemu, jeśli do jej uruchomienia użyto polecenia "mvn exec: java". – rmv

Odpowiedz

19

Wiosna namespace teleskopowe są rozwiązywane za pomocą plików /META-INF/spring.schemas i /META-INF/spring.handlers. Ponieważ pliki o tych nazwach istnieją w różnych jarlach Spring, prawdopodobnie tylko jeden z nich pozostaje w słoju docelowym po maven-assembly-plugin.

Być może możesz scalić te pliki ręcznie i jakoś skonfigurować maven-assembly-plugin, aby nadpisać plik w słoju docelowym tym połączonym plikiem.

+2

Tak, masz rację, to wszystko! Niezależne pliki "/META-INF/spring.handlers" z różnych słoików gubią się w finalnym słoiku. Wobec tego postanawiam nie używać "dodatku do maven-assembly" na teraz, ale wszystkie słoiki ręcznie z katalogu 'target/lib /' (po 'mvn install'), np. 'java -cp target/lib/spring-aop-3.0.4.RELEASE.jar: target/lib/spring-asm-3.0.4.RELEASE.jar: [...]: target/classes de.fraunhofer.fkie .tet.vmware.manager.Test ". Działa to zgodnie z oczekiwaniami. Dziękuję Ci bardzo! ;-) – rmv

+3

@rmv Albo możesz pozwolić plikowi-zależnemu-wtyczce zrobić kopię dla ciebie, jak w [tutaj] (http://stackoverflow.com/questions/574594/how-can-i-create-an- plik wykonywalny-jar-with-dependencies-using-maven/4323501 # 4323501) – staromeste

4

Podejrzewam, że plik konfiguracji wiosennej nie ma przestrzeni nazw XML context. Należy dodać do elementu głównego pliku konfiguracyjnego swojej wiosennej tak:

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

Dzięki za szybką odpowiedź! Nie dodałem mojego pliku applicationContext.xml, ponieważ "mvn exec: java -Dexec.mainClass = de.fraunhofer.fkie.tet.vmware.manager.Test " działa poprawnie. Więc myślę, że nie ma nic złego w pliku konfiguracyjnym w zasadzie, to faktycznie zawiera wszystkie elementy z twojego przykładu powyżej. Problem występuje, gdy próbuję uruchomić zmontowaną wersję bezpośrednio z Java. – rmv

0

Co wiosenne zależności czy masz w swojej pom? Możesz uzyskać błędy przetwarzania XML, ponieważ niektóre pliki jar jar nie są na ścieżce klasy. Wiosną 3 biblioteka została podzielona na wiele plików jar. Sprawdź this post aby zobaczyć, co trzeba, a konkretnie:

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

Dzięki za podpowiedź, ale "spring-context.jar" jest już złożony w "target/test-jar-with-dependencies.jar", tzn. Końcowy jar zawiera "org/springframework/context/config/spring-context- 3.0.xsd ". Przy okazji: jesteśmy połączeni z Internetem przez serwer proxy. Czy możliwe jest, że Maven używa pewnych ogólnosystemowych ustawień proxy, podczas gdy Java nie może się połączyć i sprawdzać dokumentów ".xsd" z Internetu? Aktualizacja – rmv

+0

: nie ma nic wspólnego z problemami z serwerem proxy, ponieważ został zweryfikowany przez test przeprowadzony w domu bezpośrednio połączony z internetem. – rmv

3

Znalazłem główny problem dla tego, jak na odpowiedź axtavt, i zgłosiłem to jako? Błąd? na wiosnę: https://jira.springsource.org/browse/SPR-8368 - zawiera tam obejście generujące własne połączone kopie tych plików. Dla potomności kod jest również tutaj:

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

wierzę, że są 3 rozwiązania tego problemu

  1. Plik jar TX powinny być zawarte w ścieżce klasy/buildpath projektu. (najczęstszy błąd)
  2. Wymienione przez "axtavt" powyżej
  3. Wypróbuj to przed rozwiązaniem "axtaxt": przejdź do swojego katalogu wojennego (określonego w zaawansowanej zakładce kompilatora GWT) i umieść plik spring-tx.jar w bibliotece folder pod swoim katalogiem wojennym, odśwież i uruchom ponownie.
0

Jak sugeruje to problem z analizą w Żądanie lub Odpowiedź. Ten błąd może wystąpić, jeśli klient RestTemplate spodziewa się określonego rodzaju odpowiedzi z zasobu, ale zasób zwraca coś całkowicie. Dostałem ten błąd dla klienta POST RestTemplate, który był powiązany ze zmianą w odpowiedzi zwróconej.

Dla np.Początkowa RestTemplate że wracał podmiotu „MojaKlasa” zmieniły się i spojrzał powrocie String więc parser zaczął dawać error

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

zmieniona na

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

jako typ reakcji zmienia się z podmiotu do String parser rozpoczął dając błąd podczas przetwarzania odpowiedzi. Zmieniono go na poprawny typ odpowiedzi (który w moim przypadku był ciągiem) i zaczął działać.

Powiązane problemy