Hossein
Hossein

Reputation: 41811

Simple use of Netty with RestEasy

I am completely new to RestEasy and Netty. I just want to run a very simple test to see how netty actually works. So I am using this code:

ResteasyDeployment deployment = new ResteasyDeployment();
deployment.setResourceClasses(Collections.singletonList(OAIProviderImpl.class.getName()));


        NettyJaxrsServer netty = new NettyJaxrsServer();
        netty.setDeployment(deployment);
        netty.setPort(TestPortProvider.getPort());
        netty.setRootResourcePath("");
        netty.setSecurityDomain(null);
        netty.start();

        Thread.sleep(1000);

        netty.stop();

in a Main() method. OAIProviderImpl.class is just a class that implements a REST interface. When I run this code. I get a NullpointerException on netty.stop() and by furthur going inside the stop() method, I can see that the exception is coming from releaseExternalResources. The code above is copied from Netty Reasteasy

Has anyone used this code without any problem? Can someone guide me please? Thanks. UPDATE: here is the stack-trace:

java.lang.NullPointerException
    at org.jboss.resteasy.plugins.server.netty.NettyJaxrsServer.stop(NettyJaxrsServer.java:145)
    at nl.gridline.oai.NettyServerTest.test(NettyServerTest.java:34)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)


at java.lang.reflect.Method.invoke(Method.java:597)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
    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:467)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

Upvotes: 1

Views: 2131

Answers (1)

Matthew Campbell
Matthew Campbell

Reputation: 1884

Problem is that the NettyJaxrsServer in the start method creates a private bootstrap object that is never saved globally. So when you hit the stop method the global bootstrap reference is null. Weird miss.

Upvotes: 1

Related Questions