2014-02-23 1 views
1

RESTful 웹 서비스를 테스트하려면 Unit Test을 실행하고 Grizzly을 실행하는 경우 다음 예외가 발생합니다.저지를 사용하는 Grizzly unit 테스트의 예외

javax.ws.rs.NotFoundException: HTTP 404 Not Found 
    at org.glassfish.jersey.client.JerseyInvocation.convertToException(JerseyInvocation.java:917) 
    at org.glassfish.jersey.client.JerseyInvocation.translate(JerseyInvocation.java:770) 
    at org.glassfish.jersey.client.JerseyInvocation.access$500(JerseyInvocation.java:90) 
    at org.glassfish.jersey.client.JerseyInvocation$2.call(JerseyInvocation.java:671) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:315) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:297) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:228) 
    at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:422) 
    at org.glassfish.jersey.client.JerseyInvocation.invoke(JerseyInvocation.java:667) 
    at org.glassfish.jersey.client.JerseyInvocation$Builder.method(JerseyInvocation.java:396) 
    at org.glassfish.jersey.client.JerseyInvocation$Builder.get(JerseyInvocation.java:296) 
    at com.example.MyResourceTest.testGetIt(MyResourceTest.java:45) 

단위 테스트

package com.example; 

import org.glassfish.grizzly.http.server.HttpServer; 
import org.glassfish.jersey.grizzly2.httpserver.GrizzlyHttpServerFactory; 
import org.glassfish.jersey.server.ResourceConfig; 
import org.junit.After; 
import org.junit.Before; 
import org.junit.Test; 

import javax.ws.rs.client.Client; 
import javax.ws.rs.client.ClientBuilder; 
import javax.ws.rs.client.WebTarget; 
import javax.ws.rs.core.UriBuilder; 
import java.net.URI; 

import static org.junit.Assert.assertEquals; 

public class MyResourceTest { 
    public static final URI BASE_URI = UriBuilder.fromUri("http://localhost").port(8080).build(); 
    private HttpServer server; 
    private WebTarget target; 

    @Before 
    public void setUp() throws Exception { 

     ResourceConfig rc = new ResourceConfig(); 
     server = GrizzlyHttpServerFactory.createHttpServer(BASE_URI, rc); 

     server.start(); 
     Client c = ClientBuilder.newClient(); 
     target = c.target(BASE_URI); 
    } 

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

    /** 
    * Test to see that the message "Got it!" is sent in the response. 
    */ 
    @Test 
    public void testGetIt() { 
     String responseMsg = target.path("myresource").request().get(String.class); // <--- line 45 in exception!!! 
     assertEquals("Got it!", responseMsg); 
    } 
} 

그리고 REST 서비스를 사전에 POM.xml

<dependency> 
    <groupId>org.glassfish.jersey.containers</groupId> 
    <artifactId>jersey-container-servlet-core</artifactId> 
    <version>2.5.1</version> 
</dependency> 

<dependency> 
    <groupId>org.glassfish.grizzly</groupId> 
    <artifactId>grizzly-http-server</artifactId> 
    <version>2.3.11</version> 
    <scope>test</scope> 
</dependency> 

<dependency> 
    <groupId>junit</groupId> 
    <artifactId>junit</artifactId> 
    <version>4.11</version> 
    <scope>test</scope> 
</dependency> 

<dependency> 
    <groupId>org.glassfish.jersey.containers</groupId> 
    <artifactId>jersey-container-grizzly2-http</artifactId> 
    <version>2.5.1</version> 
</dependency> 

감사에서

package com.example; 

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

/** 
* Root resource (exposed at "myresource" path) 
*/ 
@Path("myresource") 
public class MyResource { 

    @GET 
    @Produces(MediaType.TEXT_PLAIN) 
    public String getIt() { 
     return "Got it!"; 
    } 
} 

그리고 dependencies!

답변

2

I FIXED IT! 대신

ResourceConfig rc = new ResourceConfig(MyResource.class); //This is resource class 

:

나는이 필요

ResourceConfig rc = new ResourceConfig(); 

을 그리고 지금은 관심을 끌기 위해, POM.xml

<dependency> 
    <groupId>org.glassfish.jersey.containers</groupId> 
    <artifactId>jersey-container-servlet-core</artifactId> 
    <version>2.6</version> 
</dependency> 

<dependency> 
    <groupId>org.glassfish.jersey.containers</groupId> 
    <artifactId>jersey-container-grizzly2-servlet</artifactId> 
    <version>2.6</version> 
</dependency> 

<dependency> 
    <groupId>junit</groupId> 
    <artifactId>junit</artifactId> 
    <version>4.11</version> 
    <scope>test</scope> 
</dependency> 

감사 만이 dependencies를 사용하고 있습니다!

관련 문제