Uploaded image for project: 'MINA'
  1. MINA
  2. DIRMINA-684

NullPointerException when opening socket to localhost

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Minor
    • Resolution: Duplicate
    • 2.0.0-M5
    • 2.0.0
    • None
    • None
    • Linux

    Description

      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.

      Attachments

        Issue Links

          Activity

            People

              Unassigned Unassigned
              darose David Rosenstrauch
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: