2014-01-07 9 views
14

Ich habe Probleme mit Spring Framework 4, um mit meinem bestehenden Projekt mit Servlet 2.5 zu arbeiten. Mein Web-Projekt läuft eigentlich gut, aber meine Testfälle scheitern und es wird verursacht durch MockHttpServletRequest, die diese Ausnahme auslöst: -Testen von Framework 4 mit Servlet 2.5

java.lang.NoClassDefFoundError: javax/servlet/AsyncContext 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
    at java.security.AccessController.doPrivileged(Native Method) 

ich Zugabe versuchte entweder Abhängigkeit, aber ich werde andere Servlet 3.0 im Zusammenhang Ausnahme erhalten: -

<dependency> 
<groupId>javax</groupId> 
<artifactId>javaee-api</artifactId> 
<version>6.0</version> 
<scope>test</scope> 
</dependency> 

<dependency> 
    <groupId>org.mortbay.jetty</groupId> 
    <artifactId>servlet-api</artifactId> 
    <version>3.0.20090124</version> 
    <scope>test</scope> 
</dependency> 

auf dem Spring Framework Webseite basiert, wird gesagt, mit Servlet 2.5 zu arbeiten. Spring 4's MockHttpServletRequest scheint sich jedoch auf Servlet 3.0 forward zu verlassen.

Wie behebe ich dieses Problem? Vielen Dank.

+0

@MarkusMalkusch: Danke, es funktioniert. Wenn du deine Lösung unten posten kannst, akzeptiere ich sie. – limc

Antwort

17

Beschränken Sie die Abhängigkeiten für Feder-Test auf eine Version vor 4, wie Feder-Test-3.2.

Ich war mir nicht bewusst, dass Spring-4 Servlet-2.5-Unterstützung abbrach. 3.9 Testing Improvements sagt:

Ab Frühling 4.0, der Satz von Mocks im org.springframework.mock.web Paket mit Servlets jetzt kompatibel ist 3,0.

Ich verstehe nicht, dass "kompatibel mit Servlet-3" eine gesunkene Servlet-2.5-Unterstützung bedeutet. Wenn es absichtlich war, sollte es zumindest in die Referenzdokumentation gehen. Es könnte sich also lohnen, einen Fehler (SPR-11292) darüber zu archivieren.

Aber warten Sie es 3.4 Java EE 6 and 7.

Java EE Version 6 oder höher jetzt die Basis für Spring Framework gilt 4, wobei die JPA 2.0 und Servlet 3.0-Spezifikationen von besonderer Bedeutung zu sein [..] es Es ist möglich, eine Spring-Anwendung in einer Servlet 2.5-Umgebung bereitzustellen. Servlet 3.0+ wird jedoch empfohlen, wenn es überhaupt möglich ist.

Also ich denke, dass qualifiziert wie in der Dokumentation erwähnt.


Update: The Spring 4.0.1 Referenzdokumentation ist jetzt mehr Klarheit über die Mocks:

Servlets 3.0+ wird dringend empfohlen und eine Voraussetzung in Spring-Test und Mock-Pakete für Test Setups in Entwicklungsumgebungen.

+0

Haben Sie einen Leitfaden für Servlet 2.5-Bereitstellungen gefunden? – Wienczny

+0

Verwenden Sie eine Dokumentation zu Spring <4. Wenn Sie Spring 4 verwenden möchten, ist es immer noch möglich, aber wie die Dokumentation sagt, sind Sie alleine. –

+0

Der folgende Link (aktuell) zeigt ein funktionierendes Beispiel mit Servlet 3.0: http://www.concretepage.com/java-ee/jsp-servlet/asynccontext-example-in-servlet-3 – tim93422