users@jersey.java.net

NullPointerException in GrizzlyOutputStream.write

From: Martin Scholl <martin.scholl_at_cismet.de>
Date: Tue, 4 May 2010 09:42:42 +0200

Hi all,

Recently I started to use Jersey for the purpose of adding a REST interface to our server application. I have implemented some operations of the server interface and a corresponding client part. Additionally I wrote some very short JUnit tests that use the client part to simply "see" whether the methods actually return stuff or cause some kind of exception. The weird thing is that all those tests succeed if they are run solely (putting an @Ignore flag at the other tests) but if the complete test class is run some of the service requests cause errors (or to be exact: If the error occurs once all further service requests will fail, too):

May 4, 2010 9:28:51 AM com.sun.grizzly.http.servlet.ServletAdapter service
SEVERE: service exception:
java.lang.NullPointerException
        at com.sun.grizzly.tcp.http11.GrizzlyOutputStream.write(GrizzlyOutputStream.java:128)
        at com.sun.grizzly.http.servlet.ServletOutputStreamImpl.write(ServletOutputStreamImpl.java:84)
        at com.sun.jersey.spi.container.servlet.WebComponent$Writer.write(WebComponent.java:276)
        at com.sun.jersey.spi.container.ContainerResponse$CommittingOutputStream.write(ContainerResponse.java:130)
        at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:202)
        at sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:272)
        at sun.nio.cs.StreamEncoder.implFlush(StreamEncoder.java:276)
        at sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:122)
        at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:212)
        at java.io.BufferedWriter.flush(BufferedWriter.java:236)
        at com.sun.jersey.core.util.ReaderWriter.writeToAsString(ReaderWriter.java:178)
        at com.sun.jersey.core.provider.AbstractMessageReaderWriterProvider.writeToAsString(AbstractMessageReaderWriterProvider.java:125)
        at com.sun.jersey.core.impl.provider.entity.StringProvider.writeTo(StringProvider.java:85)
        at com.sun.jersey.core.impl.provider.entity.StringProvider.writeTo(StringProvider.java:57)
        at com.sun.jersey.spi.container.ContainerResponse.write(ContainerResponse.java:289)
        at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1029)
        at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:941)
        at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:932)
        at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:384)
        at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:451)
        at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:632)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
        at com.sun.grizzly.http.servlet.FilterChainImpl.doFilter(FilterChainImpl.java:188)
        at com.sun.grizzly.http.servlet.FilterChainImpl.invokeFilterChain(FilterChainImpl.java:137)
        at com.sun.grizzly.http.servlet.ServletAdapter.service(ServletAdapter.java:278)
        at com.sun.grizzly.tcp.http11.GrizzlyAdapter.service(GrizzlyAdapter.java:165)
        at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:726)
        at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:615)
        at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:895)
        at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:162)
        at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:136)
        at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:103)
        at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:89)
        at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
        at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:67)
        at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
        at java.util.concurrent.FutureTask.run(FutureTask.java:138)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:637)

So the request is received correctly but when it comes to returning a response Grizzly somehow runs into this NPE.

I started up the Grizzly server as described in the Jersey Tutorial. Will I have to fine-tune this initialization? Or is this error a result of an erroneous implementation of the server interface methods? Does anybody have a clue why this happens? Help is highly appreciated.

Thanks in advance.

Best regards.

Martin