2014-11-05 11 views
7

Ich versuche, einen JerseyTest mit einem org.glassfish.jersey.test.grizzly.GrizzlyWebContainerFactory laufen zu lassen. Ich habe bereits im Internet gesucht und mehrere Dinge für den größten Teil eines Tages ausprobiert. Es scheint unmöglich zu sein und ich würde mich über jede Hilfe bei der Einrichtung freuen.JerseyTest mit GrizzlyWebTestContainerFactory in Jersey 2.13

habe ich ein minimales Beispiel basierend auf dem Code aus der Dokumentation 2 Jersey. Der Code sieht so aus:

package test; 

import static org.junit.Assert.assertEquals; 

import javax.ws.rs.GET; 
import javax.ws.rs.Path; 
import javax.ws.rs.core.Application; 

import org.glassfish.jersey.server.ResourceConfig; 
import org.glassfish.jersey.test.DeploymentContext; 
import org.glassfish.jersey.test.JerseyTest; 
import org.glassfish.jersey.test.ServletDeploymentContext; 
import org.glassfish.jersey.test.grizzly.GrizzlyWebTestContainerFactory; 
import org.glassfish.jersey.test.spi.TestContainerException; 
import org.glassfish.jersey.test.spi.TestContainerFactory; 
import org.junit.Test; 

public class DistributedDeploymentTest extends JerseyTest { 

@Path("hello") 
public static class HelloResource { 
    @GET 
    public String getHello() { 
     return "Hello World!"; 
    } 
} 

@Override 
protected Application configure() { 
    return new ResourceConfig(HelloResource.class); 
} 

@Override 
protected TestContainerFactory getTestContainerFactory() throws TestContainerException { 
    return new GrizzlyWebTestContainerFactory(); 
} 

@Override 
protected DeploymentContext configureDeployment() { 
    return ServletDeploymentContext.builder(configure()).build(); 
} 

@Test 
public void testSingleNode() throws Exception { 
    final String hello = target("hello").request().get(String.class); 
    assertEquals("Hello World!", hello); 
} 
} 

Es funktioniert völlig in Ordnung, ohne die GrizzlyWebTestContainerFactory. Ich erhalte jedoch auf dieses Beispiel immer läuft:

javax.ws.rs.NotFoundException: HTTP 404 Not Found 
    at org.glassfish.jersey.client.JerseyInvocation.convertToException(JerseyInvocation.java:956) 
    at org.glassfish.jersey.client.JerseyInvocation.translate(JerseyInvocation.java:795) 
    at org.glassfish.jersey.client.JerseyInvocation.access$500(JerseyInvocation.java:91) 
    at org.glassfish.jersey.client.JerseyInvocation$2.call(JerseyInvocation.java:683) 
    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:424) 
    at org.glassfish.jersey.client.JerseyInvocation.invoke(JerseyInvocation.java:679) 
    at org.glassfish.jersey.client.JerseyInvocation$Builder.method(JerseyInvocation.java:408) 
    at org.glassfish.jersey.client.JerseyInvocation$Builder.get(JerseyInvocation.java:308) 
    at de.tudresden.inf.rn.zeebus.DistributedDeploymentTest.testSingleNode(DistributedDeploymentTest.java:66) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44) 
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) 
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) 
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27) 
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:309) 
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192) 

ich die folgenden Maven Abhängigkeiten bin mit:

 <dependency> 
      <groupId>org.glassfish.jersey.containers</groupId> 
      <artifactId>jersey-container-servlet</artifactId> 
      <version>2.13</version> 
     </dependency> 
     <dependency> 
      <groupId>org.glassfish.jersey.test-framework</groupId> 
      <artifactId>jersey-test-framework-core</artifactId> 
      <version>2.13</version> 
     </dependency> 
     <dependency> 
      <groupId>org.glassfish.jersey.test-framework.providers</groupId> 
      <artifactId>jersey-test-framework-provider-grizzly2</artifactId> 
      <version>2.13</version> 
     </dependency> 
     <dependency> 
      <groupId>org.eclipse.jetty</groupId> 
      <artifactId>jetty-server</artifactId> 
      <version>9.2.2.v20140723</version> 
     </dependency> 
     <dependency> 
      <groupId>org.eclipse.jetty</groupId> 
      <artifactId>jetty-webapp</artifactId> 
      <version>9.2.2.v20140723</version> 
     </dependency> 

Antwort

8

nicht sicher, warum es nicht mit builder(configure()) funktioniert, aber wenn wir es

ändern
return ServletDeploymentContext.forPackages(
            getClass().getPackage().getName()).build(); 

(als here gesehen), wird es funktionieren (keine Notwendigkeit configure außer Kraft zu setzen). Sie können in jersey-test-framework-examples


EDIT etwas mehr von der Probe Testkonfigurationen siehe

„Aber wie kann ich meine benutzerdefinierte Unterklasse von ResourceConfig hinzufügen (nicht im Beispiel oben gezeigt) in diesem Fall "

return ServletDeploymentContext.forServlet(new ServletContainer(
           new ResourceConfig(HelloResource.class))).build(); 

Wie here gesehen

+0

Ok. Vielen Dank. Wie aber füge ich meine benutzerdefinierte Unterklasse von ResourceConfig hinzu (im obigen Beispiel nicht gezeigt)? – ali

+1

Siehe [hier] (https://github.com/jersey/jersey/blob/master/test-framework/providers/grizzly2/src/test/java/org/glassfish/jersey/test/grizzly/web/GrizzlyWebTest. Java) –

+0

Großartig! Es klappt! – ali