2015-05-11 73 views
1

我想使用基於Dropwizard框架0.8.1的groovy 2.4.1創建一個簡單的REST服務器。我使用這個概念證明Groovy腳本是:Groovy + Dropwizard和servlet 3.1.0問題

import com.codahale.metrics.annotation.Timed 
import com.google.common.base.Optional 
import io.dropwizard.Application 
import io.dropwizard.Configuration 
import io.dropwizard.setup.Bootstrap 
import io.dropwizard.setup.Environment 

import javax.ws.rs.GET 
import javax.ws.rs.Path 
import javax.ws.rs.Produces 
import javax.ws.rs.QueryParam 
import javax.ws.rs.core.MediaType 

@Grapes([ 
     @Grab(group = 'io.dropwizard', module = 'dropwizard-core', version = '0.8.1')]) 

class RESTProviderConfiguration extends Configuration { 
    String template 
} 

class RESTProviderApplication extends Application<RESTProviderConfiguration> { 

    @Override 
    String getName() { 
     'hello-world' 
    } 

    @Override 
    void initialize(Bootstrap<RESTProviderConfiguration> bootstrap) { 
    } 

    @Override 
    void run(RESTProviderConfiguration configuration, Environment environment) { 
     def resource = new HelloWorldResource(template: configuration.template); 
     environment.jersey().register(resource); 
    } 
} 


@Path('/hello-world') 
@Produces(MediaType.APPLICATION_JSON) 
class HelloWorldResource { 

    String template 

    @GET 
    @Timed 
    String sayHello(@QueryParam('name') Optional<String> name) { 
     String.format(template, name.or('John Doe')) 
    } 
} 

new RESTProviderApplication().run(args) 

服務器啓動,但對資源/你好世界的請求,以下異常被拋出:

WARN [2015-05-11 12:17:04,099] org.eclipse.jetty.servlet.ServletHandler: Error for /hello-world 
! java.lang.NoSuchMethodError: javax.servlet.http.HttpServletResponse.getHeader(Ljava/lang/String;)Ljava/lang/String; 
! at org.eclipse.jetty.servlets.GzipFilter.doFilter(GzipFilter.java:322) ~[jetty-servlets-9.2.9.v20150224.jar:9.2.9.v20150224] 
! at io.dropwizard.jetty.BiDiGzipFilter.doFilter(BiDiGzipFilter.java:134) ~[dropwizard-jetty-0.8.1.jar:0.8.1] 
! at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652) ~[jetty-servlet-9.2.9.v20150224.jar:9.2.9.v20150224] 
! at io.dropwizard.servlets.ThreadNameFilter.doFilter(ThreadNameFilter.java:29) ~[dropwizard-servlets-0.8.1.jar:0.8.1] 
! at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652) ~[jetty-servlet-9.2.9.v20150224.jar:9.2.9.v20150224] 
! at io.dropwizard.jersey.filter.AllowedMethodsFilter.handle(AllowedMethodsFilter.java:44) ~[dropwizard-jersey-0.8.1.jar:0.8.1] 
! at io.dropwizard.jersey.filter.AllowedMethodsFilter.doFilter(AllowedMethodsFilter.java:39) ~[dropwizard-jersey-0.8.1.jar:0.8.1] 
! at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652) ~[jetty-servlet-9.2.9.v20150224.jar:9.2.9.v20150224] 
! at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:585) [jetty-servlet-9.2.9.v20150224.jar:9.2.9.v20150224] 
! at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127) [jetty-server-9.2.9.v20150224.jar:9.2.9.v20150224] 
! at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515) [jetty-servlet-9.2.9.v20150224.jar:9.2.9.v20150224] 
! at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061) [jetty-server-9.2.9.v20150224.jar:9.2.9.v20150224] 
! at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) [jetty-server-9.2.9.v20150224.jar:9.2.9.v20150224] 
! at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) [jetty-server-9.2.9.v20150224.jar:9.2.9.v20150224] 
! at com.codahale.metrics.jetty9.InstrumentedHandler.handle(InstrumentedHandler.java:240) [metrics-jetty9-3.1.1.jar:3.1.1] 
! at io.dropwizard.jetty.RoutingHandler.handle(RoutingHandler.java:51) [dropwizard-jetty-0.8.1.jar:0.8.1] 
! at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) [jetty-server-9.2.9.v20150224.jar:9.2.9.v20150224] 
! at org.eclipse.jetty.server.handler.RequestLogHandler.handle(RequestLogHandler.java:95) [jetty-server-9.2.9.v20150224.jar:9.2.9.v20150224] 
! at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) [jetty-server-9.2.9.v20150224.jar:9.2.9.v20150224] 
! at org.eclipse.jetty.server.handler.StatisticsHandler.handle(StatisticsHandler.java:159) [jetty-server-9.2.9.v20150224.jar:9.2.9.v20150224] 
! at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) [jetty-server-9.2.9.v20150224.jar:9.2.9.v20150224] 
! at org.eclipse.jetty.server.Server.handle(Server.java:497) [jetty-server-9.2.9.v20150224.jar:9.2.9.v20150224] 
! at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:310) [jetty-server-9.2.9.v20150224.jar:9.2.9.v20150224] 
! at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257) [jetty-server-9.2.9.v20150224.jar:9.2.9.v20150224] 
! at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:540) [jetty-io-9.2.9.v20150224.jar:9.2.9.v20150224] 
! at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635) [jetty-util-9.2.9.v20150224.jar:9.2.9.v20150224] 
! at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555) [jetty-util-9.2.9.v20150224.jar:9.2.9.v20150224] 
! at java.lang.Thread.run(Thread.java:744) [na:1.7.0_45] 
127.0.0.1 - - [11/May/2015:12:17:04 +0000] "GET /hello-world HTTP/1.1" 500 - "-" "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Sa 
fari/537.36" 22 
WARN [2015-05-11 12:17:04,104] org.eclipse.jetty.server.HttpChannel: /hello-world 
! java.lang.NoSuchMethodError: javax.servlet.http.HttpServletResponse.getStatus()I 
! at com.codahale.metrics.jetty9.InstrumentedHandler.updateResponses(InstrumentedHandler.java:291) ~[metrics-jetty9-3.1.1.jar:3.1.1] 
! at com.codahale.metrics.jetty9.InstrumentedHandler.handle(InstrumentedHandler.java:254) ~[metrics-jetty9-3.1.1.jar:3.1.1] 
! at io.dropwizard.jetty.RoutingHandler.handle(RoutingHandler.java:51) ~[dropwizard-jetty-0.8.1.jar:0.8.1] 
! at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) ~[jetty-server-9.2.9.v20150224.jar:9.2.9.v20150224] 
! at org.eclipse.jetty.server.handler.RequestLogHandler.handle(RequestLogHandler.java:95) ~[jetty-server-9.2.9.v20150224.jar:9.2.9.v20150224] 
! at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) ~[jetty-server-9.2.9.v20150224.jar:9.2.9.v20150224] 
! at org.eclipse.jetty.server.handler.StatisticsHandler.handle(StatisticsHandler.java:159) ~[jetty-server-9.2.9.v20150224.jar:9.2.9.v20150224] 
! at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) ~[jetty-server-9.2.9.v20150224.jar:9.2.9.v20150224] 
! at org.eclipse.jetty.server.Server.handle(Server.java:497) ~[jetty-server-9.2.9.v20150224.jar:9.2.9.v20150224] 
! at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:310) ~[jetty-server-9.2.9.v20150224.jar:9.2.9.v20150224] 
! at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257) [jetty-server-9.2.9.v20150224.jar:9.2.9.v20150224] 
! at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:540) [jetty-io-9.2.9.v20150224.jar:9.2.9.v20150224] 
! at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635) [jetty-util-9.2.9.v20150224.jar:9.2.9.v20150224] 
! at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555) [jetty-util-9.2.9.v20150224.jar:9.2.9.v20150224] 
! at java.lang.Thread.run(Thread.java:744) [na:1.7.0_45] 
WARN [2015-05-11 12:17:04,105] org.eclipse.jetty.util.thread.QueuedThreadPool: 
! java.lang.NoSuchMethodError: javax.servlet.http.HttpServletResponse.getStatus()I 
! at org.eclipse.jetty.server.handler.ErrorHandler.handle(ErrorHandler.java:111) ~[jetty-server-9.2.9.v20150224.jar:9.2.9.v20150224] 
! at org.eclipse.jetty.server.Response.sendError(Response.java:597) ~[jetty-server-9.2.9.v20150224.jar:9.2.9.v20150224] 
! at org.eclipse.jetty.server.HttpChannel.handleException(HttpChannel.java:486) ~[jetty-server-9.2.9.v20150224.jar:9.2.9.v20150224] 
! at org.eclipse.jetty.server.HttpConnection$HttpChannelOverHttp.handleException(HttpConnection.java:576) ~[jetty-server-9.2.9.v20150224.jar:9.2.9.v20150224] 
! at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:386) ~[jetty-server-9.2.9.v20150224.jar:9.2.9.v20150224] 
! at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257) ~[jetty-server-9.2.9.v20150224.jar:9.2.9.v20150224] 
! at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:540) ~[jetty-io-9.2.9.v20150224.jar:9.2.9.v20150224] 
! at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635) ~[jetty-util-9.2.9.v20150224.jar:9.2.9.v20150224] 
! at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555) ~[jetty-util-9.2.9.v20150224.jar:9.2.9.v20150224] 
! at java.lang.Thread.run(Thread.java:744) [na:1.7.0_45] 
WARN [2015-05-11 12:17:04,105] org.eclipse.jetty.util.thread.QueuedThreadPool: Unexpected thread death: [email protected] in dw{STARTED,8<= 
8<=1024,i=1,q=0} 

這是因爲groovy classpath有2.4 servlet版本的groovy-servlet-2.4.3.jar,而dropwizard 0.8.1有javax.servlet-api-3.1.0.jar。

你能告訴我如何更換groovy jar或首先加載所需的版本?

回答

0

我剛剛遇到類似的問題。在我的情況下,問題是,有一些其他的相依性,有javax.servlet-api-2.5.0.jar所以我有javax.servlet-api

mvn dependency:tree -Dincludes=*:*servlet* 

mystuff:mystuff:jar:1.0-SNAPSHOT 

mystuff:rest-support:jar:2.0.0-RELEASE:compile 

| \- com.github.kongchen:swagger-maven-plugin:jar:2.3.4:compile 

|  \- javax.servlet:servlet-api:jar:2.5:compile 

... 

\- mystuff:myotherstuff:jar:2.2.4:compile 

    \- javax.servlet:javax.servlet-api:jar:3.1.0:compile 

兩個版本,我通過手動排除從的MyStuff的Maven依賴招搖,Maven的插件固定它:休息支持

希望幫助

0

您必須添加javax.servlet-api與您的build.gradle 3.1.0版本的顯式依賴。

這將覆蓋由groovy提供的默認值。

dependencies { 
    compile group: 'javax.servlet', name: 'javax.servlet-api', version: '3.1.0' 
    ... 
} 
0

有幾個選項:

  • 使用運行Groovy腳本,搶出口的servlet API到classpath中前:eval $(grape resolve -shell javax.servlet javax.servlet-api 4.0.0)
  • 或拆除或更換servlet-api-2.4.jar$GROOVY_HOME\lib(不推薦)