2015-05-29 121 views
1

我想创建一个嵌入式码头服务器(不是maven,gradle等)来测试spring rest服务。嵌入式Jetty测试Spring-Rest服务

为此,我创建了一个EmbeddedServer类。但不幸的是,其他服务的调用总是导致http 404错误。什么做错了?

其他服务与tomcat(不嵌入)正常工作。

进出口使用下面的依赖关系:

"org.eclipse.jetty:jetty-server:8.1.17.v20150415" 
"org.eclipse.jetty:jetty-webapp:8.1.17.v20150415" 

这里是EmbededServer类:

import org.eclipse.jetty.server.Server; 
import org.eclipse.jetty.webapp.WebAppContext; 

public class EmbeddedServer { 

    private Server server; 

    public void start() throws Exception { 
     this.server = createServer(); 
     this.server.start(); 
    } 

    public void stop() throws Exception { 
     this.server.stop(); 
     this.server.join(); 
     this.server.destroy(); 
    } 

    private Server createServer() { 
     final Server server = new Server(8080); 

     final WebAppContext context = new WebAppContext(); 
     context.setContextPath("/"); 
     context.setResourceBase("src/main/webapp"); 
     context.setDescriptor("src/main/webapp/WEB-INF/web.xml"); 
     context.setParentLoaderPriority(true); 
     context.setServer(server); 

     server.setHandler(context); 

     return server; 
    } 
} 

,并且测试类:

import org.apache.http.HttpResponse; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.methods.HttpGet; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.apache.http.util.EntityUtils; 
import org.junit.After; 
import org.junit.Before; 
import org.junit.Test; 

import java.io.IOException; 
import java.net.URI; 

import static org.hamcrest.CoreMatchers.equalTo; 
import static org.junit.Assert.assertThat; 

public class SimpleTest { 

    private HttpClient client; 
    private EmbeddedServer server; 

    @Before 
    public void before() throws Exception { 
     this.client = new DefaultHttpClient(); 
     this.server = new EmbeddedServer(); 
     this.server.start(); 
    } 

    @After 
    public void after() throws Exception { 
     this.server.stop(); 
    } 

    @Test 
    public void invokeHello() throws Exception { 
     final HttpResponse response = invokeGetRequest("http://localhost:8080/hello"); 
     verifyResponse(response, 200, "hello"); 
    } 

    private HttpResponse invokeGetRequest(final String path) throws Exception { 
     final URI wsAddress = new URI(path); 
     final HttpGet method = new HttpGet(wsAddress); 
     return this.client.execute(method); 
    } 

    private void verifyResponse(final HttpResponse actualHttpResponse, final int expectedHttpCode, final String expectedResponse) throws IOException { 
     assertThat(actualHttpResponse.getStatusLine().getStatusCode(), equalTo(expectedHttpCode)); 

     final String actualResponse = EntityUtils.toString(actualHttpResponse.getEntity(), "UTF-8"); 
     assertThat(actualResponse, equalTo(expectedResponse)); 
    } 
} 

此测试失败:

java.lang.AssertionError: 
    Expected: <200> 
    but: was <404> 

回答

-1

ResourceBase和描述符的路径必须是绝对路径。

context.setResourceBase("c:/myapp/src/main/webapp"); 
context.setDescriptor("c:/myapp/src/main/webapp/WEB-INF/web.xml");