2017-10-20 4 views
0

現在のライブラリにWebアプリケーションを更新しようとしています。私は5.0.0する3.1.1から春をアップグレードしたとき、それはで失敗しました:Jetty:Spring 5のNoSuchMethodErrorで実行が失敗する

java.lang.NoSuchMethodError: javax.servlet.http.HttpServletResponse.getStatus()I 
    at org.springframework.web.servlet.FrameworkServlet.publishRequestHandledEvent(FrameworkServlet.java:1083) 
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1009) 
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:881) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:727) 
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:855) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) 
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1221) 
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200) 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1212) 
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:399) 
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) 
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) 
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:766) 
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:450) 

私は2つの関連する質問を見つけましたjettyとservletの仕様をアップグレードしました。しかし、私のアプリは失敗し続けます。

依存性:

[INFO] +- org.slf4j:jcl-over-slf4j:jar:1.7.5:compile 
[INFO] | \- org.slf4j:slf4j-api:jar:1.7.5:compile 
[INFO] +- ch.qos.logback:logback-core:jar:1.1.1:compile 
[INFO] +- ch.qos.logback:logback-classic:jar:1.1.1:compile 
[INFO] +- org.codehaus.janino:janino:jar:2.6.1:compile 
[INFO] | \- org.codehaus.janino:commons-compiler:jar:2.6.1:compile 
[INFO] +- org.springframework:spring-web:jar:5.0.0.RELEASE:compile 
[INFO] | +- org.springframework:spring-beans:jar:5.0.0.RELEASE:compile 
[INFO] | \- org.springframework:spring-core:jar:5.0.0.RELEASE:compile 
[INFO] |  \- org.springframework:spring-jcl:jar:5.0.0.RELEASE:compile 
[INFO] +- org.springframework:spring-webmvc:jar:5.0.0.RELEASE:compile 
[INFO] | +- org.springframework:spring-aop:jar:5.0.0.RELEASE:compile 
[INFO] | +- org.springframework:spring-context:jar:5.0.0.RELEASE:compile 
[INFO] | \- org.springframework:spring-expression:jar:5.0.0.RELEASE:compile 
[INFO] +- javax.servlet:javax.servlet-api:jar:3.1.0:provided 
[INFO] +- com.google.code.gson:gson:jar:2.2.2:compile 
[INFO] \- junit:junit:jar:4.10:test 
[INFO] \- org.hamcrest:hamcrest-core:jar:1.1:test 

のMaven:

<spring.framework.version>5.0.0.RELEASE</spring.framework.version> 
    <maven-jetty-plugin.version>6.1.26</maven-jetty-plugin.version> 
    <servlet.api.version>3.1.0</servlet.api.version> 

    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-web</artifactId> 
     <version>${spring.framework.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-webmvc</artifactId> 
     <version>${spring.framework.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>javax.servlet-api</artifactId> 
     <version>${servlet.api.version}</version> 
     <scope>provided</scope> 
    </dependency> 

<build> 
    <finalName>smartpos-backend-device</finalName> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>3.1</version> 
      <configuration> 
       <source>1.7</source> 
       <target>1.7</target> 
       <showWarnings>true</showWarnings> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-dependency-plugin</artifactId> 
      <version>2.1</version> 
      <executions> 
       <execution> 
        <id>install</id> 
        <phase>install</phase> 
        <goals> 
         <goal>sources</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
     <plugin> 
      <groupId>org.mortbay.jetty</groupId> 
      <artifactId>maven-jetty-plugin</artifactId> 
      <version>${maven-jetty-plugin.version}</version> 

      <configuration> 
       <jettyEnvXml>src/main/resources/jetty/jetty-env.xml</jettyEnvXml> 
       <contextPath>smartpos-json</contextPath> 
       <scanIntervalSeconds>0</scanIntervalSeconds> 

       <connectors> 
        <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector"> 
         <port>8080</port> 
        </connector> 
       </connectors> 
       <systemProperties> 
        <systemProperty> 
         <name>logback.configurationFile</name> 
         <value>logback.xml</value> 
        </systemProperty> 
        <systemProperty> 
         <name>LOG_PATH</name> 
         <value>.</value> 
        </systemProperty> 
       </systemProperties> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 
+1

Spring 5ではサーブレット3.1以上のコンテナが必要ですが、Jetty 6は2.5コンテナです。したがって、最新のJettyバージョンにアップグレードする必要はありません。古い 'maven-jetty-plugin'の代わりに' jetty-maven-plugin'に切り替える必要があります。 –

+0

あなたは答えとして書くことができますか?私は間違いなく今それを始めることができます。しかし私はサーブレットのために404を解決しなければならない。 RequestMappingHandlerMapping Mapped "{[/ handshake]、methods = [POST]、produce = [application/json; charset = UTF-8]}"をpublic void controller.DeviceJsonController.performHandShake(java.lang.String、javax.servlet.http .HttpServletResponse)はjava.io.IOExceptionをスローします –

答えて

1

Spring 5ではServlet 2.5コンテナであるJetty 6.1を使用しているため、Servlet 3.1コンテナは最低限必要です。それは明らかにうまくいっていません。

Jettyのバージョンをアップグレードする必要があります。 maven-jetty-pluginの代わりにアップグレードするには、適切なjetty-maven-plugin(名前が変更されています)を使用する必要があります。これは現在Eclipseの一部です。

<maven-jetty-plugin.version>9.4.7.v20170914</maven-jetty-plugin.version> 

<plugin> 
    <groupId>org.eclipse.jetty</groupId> 
    <artifactId>jetty-maven-plugin</artifactId> 
    <version>${maven-jetty-plugin.version}</version> 
</plugin> 

これは、プラグインの最新バージョンとそのためのJettyを使用する必要があります。

+0

ありがとうございます。私は互換性の問題のための新しい質問を作成しました:https://stackoverflow.com/questions/46849304/spring-dispatcher-not-called-in-jetty-maven-plugin –

1

私の悪い私はそれが間違っていました。ここでは、サーブレットAPIは2.5であり、あなたはMavenの中で依存関係を追加し、提供範囲とそれをマークしたときに、それは必要なJARは、後の段階で提供されることを意味

https://mvnrepository.com/artifact/org.mortbay.jetty/jetty/6.1.26

と:私はこの問題は、あなたの桟橋のバージョンだと思います戦争に詰め込まれていない。コードはIDEと開発で正しくコンパイルされますが、jettyで実行しようとすると、jettyバージョンからの実際のサーブレット-apiが使用されます。その方法では、サーブレット-APIバージョン3以上が必要です

+0

コンパイルエラー:-)パッケージjavax.servlet.httpは存在しません –

+0

回答ありがとう –

関連する問題