NullPointerException when opening socket to localhost
-----------------------------------------------------

                 Key: DIRMINA-684
                 URL: https://issues.apache.org/jira/browse/DIRMINA-684
             Project: MINA
          Issue Type: Bug
    Affects Versions: 2.0.0-M4
         Environment: Linux
            Reporter: David Rosenstrauch
            Priority: Minor


I have a MINA-based server I've written that's up and running and works fine.  
I recently added a new bit of functionality to it, however, and it's now 
throwing NullPointerExceptions intermittently.

The server uses a text-based protocol (using TextLineCodecFactory). I've added 
the capability to give the server a command line parm which is the name of a 
text file, containing startup commands that the server should execute after it 
starts up.  I'm doing this by having the server open a java socket to the 
server's port on localhost, read the text file and write (and flush) each 
command out to the socket.

This is generally working, and the server is receiving and processing each 
command (not always in the order sent, but I'm guessing that's an outgrowth of 
my using a thread pool, and that's not a problem anyway). But from time to 
time, the server is spitting out this error:

SEVERE: EXCEPTION :
org.apache.mina.filter.codec.ProtocolEncoderException: 
java.lang.NullPointerException
    at 
org.apache.mina.filter.codec.ProtocolCodecFilter.filterWrite(ProtocolCodecFilter.java:312)
    at 
org.apache.mina.core.filterchain.DefaultIoFilterChain.callPreviousFilterWrite(DefaultIoFilterChain.java:506)
    at 
org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1400(DefaultIoFilterChain.java:48)
    at 
org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.filterWrite(DefaultIoFilterChain.java:814)
    at 
org.apache.mina.core.filterchain.IoFilterEvent.fire(IoFilterEvent.java:65)
    at org.apache.mina.core.session.IoEvent.run(IoEvent.java:64)
    at 
org.apache.mina.filter.executor.OrderedThreadPoolExecutor$Worker.runTask(OrderedThreadPoolExecutor.java:552)
    at 
org.apache.mina.filter.executor.OrderedThreadPoolExecutor$Worker.runTasks(OrderedThreadPoolExecutor.java:544)
    at 
org.apache.mina.filter.executor.OrderedThreadPoolExecutor$Worker.run(OrderedThreadPoolExecutor.java:488)
    at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.NullPointerException
    at 
org.apache.mina.filter.codec.ProtocolCodecFilter.filterWrite(ProtocolCodecFilter.java:297)
    ... 9 more

Or sometimes another similar error as well:

SEVERE: Error occurred during message handling
org.apache.mina.filter.codec.ProtocolDecoderException: 
java.lang.NullPointerException (Hexdump: 68 65 6C 70 0A 73 74 61 74 73 0A 71 75 
65 72 79 20 31 32 33 34 0A)
    at 
org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:234)
    at 
org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:434)
    at 
org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:48)
    at 
org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:802)
    at 
org.apache.mina.core.filterchain.IoFilterEvent.fire(IoFilterEvent.java:59)
    at org.apache.mina.core.session.IoEvent.run(IoEvent.java:64)
    at 
org.apache.mina.filter.executor.OrderedThreadPoolExecutor$Worker.runTask(OrderedThreadPoolExecutor.java:552)
    at 
org.apache.mina.filter.executor.OrderedThreadPoolExecutor$Worker.runTasks(OrderedThreadPoolExecutor.java:544)
    at 
org.apache.mina.filter.executor.OrderedThreadPoolExecutor$Worker.run(OrderedThreadPoolExecutor.java:488)
    at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.NullPointerException
    at 
org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:224)
    ... 9 more 


Noteworthy aspects of my configuration:

* using the M4 release of MINA

* I'm not pausing between sending commands; i.e., I'm write and flushing them 
down the socket as quickly as Java can send them

* I'm using both a read and a write thread pool

* building my filter chain as follows:
    protocolAcceptor = new NioSocketAcceptor();
    protocolAcceptor.setDefaultLocalAddress(new 
InetSocketAddress(protocolPort));
    protocolAcceptor.setReuseAddress(true);
    DefaultIoFilterChainBuilder filterChainBuilder = 
protocolAcceptor.getFilterChain();
    filterChainBuilder.addLast("logger", new 
LoggingFilter(ProfileCacheServer.class));
    readerThreadPool = new OrderedThreadPoolExecutor();
    filterChainBuilder.addLast("readExecutor", new 
ExecutorFilter(readerThreadPool, IoEventType.MESSAGE_RECEIVED));
    filterChainBuilder.addLast("codec", new ProtocolCodecFilter(new 
TextLineCodecFactory(ParseConstants.UTF8_CHARSET)));
    writerThreadPool = new OrderedThreadPoolExecutor();
    filterChainBuilder.addLast("writeExecutor", new 
ExecutorFilter(writerThreadPool, IoEventType.WRITE));
    protocolAcceptor.setHandler(protocolHandler); 



I actually did find a way to "fix" this problem but someone on the mailing list 
suggested that MINA shouldn't be throwing NPE's regardless.  Fix is as follows: 
  I was originally just dropping the connection on the client side when I was 
finished.  But after changing my code to issue a proper "close connection" 
command to the server before disconnecting, it looks like the NPE's go away. 


-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to