2016-06-30 7 views
1

'org.eclipse.jetty : jetty'를 사용하는 webapp에서 JUnit 테스트를 실행하기 위해 wiremock (testCompile 'com.github.tomakehurst : wiremock : 2.1.4-rc3')을 사용하려고합니다. -server : 9.3.6.v20151106 '을 그라디언트 종속성으로 사용합니다. java.lang.NoSuchMethodError : org.eclipse 내가 JUnit 테스트를 실행하면wiremock과 jetty9의 호환성

, 나는 오류 및 2.1.4-RC3이 jetty9와 호환 될 것 같지 않습니다 wiremock ...

[오류가 발생합니다. jetty.server.Request.getUri() LORG/일식/부두/HTTP/HttpURI]

전체 스택 :

java.lang.NoSuchMethodError: org.eclipse.jetty.server.Request.getUri()Lorg/eclipse/jetty/http/HttpURI; 
    at com.github.tomakehurst.wiremock.servlet.WireMockHttpServletRequestAdapter.isBrowserProxyRequest(WireMockHttpServletRequestAdapter.java:219) 
    at com.github.tomakehurst.wiremock.verification.LoggedRequest.createFrom(LoggedRequest.java:59) 
    at com.github.tomakehurst.wiremock.http.AdminRequestHandler.handleRequest(AdminRequestHandler.java:40) 
    at com.github.tomakehurst.wiremock.http.AbstractRequestHandler.handle(AbstractRequestHandler.java:41) 
    at com.github.tomakehurst.wiremock.servlet.WireMockHandlerDispatchingServlet.service(WireMockHandlerDispatchingServlet.java:99) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) 
    at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:821) 
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:583) 
    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1158) 
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:511) 
    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1090) 
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) 
    at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:109) 
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:119) 
    at org.eclipse.jetty.server.Server.handle(Server.java:517) 
    at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:308) 
    at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:242) 
    at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:261) 
    at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:95) 
    at org.eclipse.jetty.io.SelectChannelEndPoint$2.run(SelectChannelEndPoint.java:75) 
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:654) 
    at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:572) 
    at java.lang.Thread.run(Thread.java:745) 

답변

1

이것은 부두 서버 호환성 문제입니다.

당신은 제티 9.3.6.v20151106을 사용하고 있으며, 와이어 모크 2.1.4-rc3은 제티 9.2.13.v20150730에 의존합니다.

이 메서드는 제거되었으며 Jetty 9.3.6에서는 org.eclipse.jetty.server.Request에 없습니다.

public org.eclipse.jetty.http.HttpURI getUri(); 

가장 쉬운 해결책은 사용중인 Jetty 버전을 다운 그레이드하고 WireMock과 동일한 버전을 사용하는 것입니다. 또는 WireMock을 포크하고 사용중인 Jetty 버전을 업그레이드 할 수 있습니다. 최적이라고 생각하지 않습니까? https://github.com/tomakehurst/wiremock/pull/442

+1

와이어 모크를 업그레이드 할 때 동일한 문제가 발생했습니다. testCompile ('com.github.tomakehurst : wiremock : 2.5.1')이 문제를 해결하기 위해 WireMock을 리팩터링했습니다. – Boris