Uploaded image for project: 'James Server'
  1. James Server
  2. JAMES-318

java.lang.NullPointerException when host is unknown

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 2.2.0
    • Fix Version/s: 2.3.0
    • Component/s: Remote Delivery
    • Labels:
      None

      Description

      I encountered the following NullPointerException:

      18/08/04 14:29:59 INFO James.Mailet : RemoteDelivery: Unknown gateway host: unknown host
      18/08/04 14:29:59 INFO James.Mailet : RemoteDelivery: This could be a DNS server error or configuration error.
      18/08/04 14:29:59 INFO James.Mailet : RemoteDelivery: Exception caught in RemoteDelivery.run()
      java.lang.NullPointerException
      at org.apache.james.transport.mailets.RemoteDelivery.deliver(RemoteDelivery.java:409)
      at org.apache.james.transport.mailets.RemoteDelivery.run(RemoteDelivery.java:912)
      at java.lang.Thread.run(Thread.java:534)

      This is caused by logging information about a HostAddress that happens to be null.

      The HostAddress is null because I had a misconfiguration in my config.xml: a gateway server that could not be found.
      I fixed the issue for myself by entering the correct host name.

      Still, NullPointerExceptions are a bad sign.

      Also, the message seems to disappear from the queue. I can't find it in the spool directory and there is no attempt of delivery after a restart.
      In other words, I seem to observe that a message gets lost when this occurs.

        Activity

        Hide
        hes Hes Siemelink added a comment -

        Messages do get lost when this occurs.
        Looking at the exception handling in RemoteDelivery.run() it makes sense, but I think it is unwanted behavior.

        I think the best way to solve this is to explicitly check for null:

        In RemoteDelivery.deliver(), add the following

        while ( targetServers.hasNext()) {
        try {
        HostAddress outgoingMailServer = (HostAddress) targetServers.next();

        // line 409:
        + if (outgoingMailServer == null)

        { + continue; + }

        StringBuffer logMessageBuffer =
        new StringBuffer(256)
        .append("Attempting delivery of ")
        .append(mail.getName())
        .append(" to host ")
        .append(outgoingMailServer.getHostName())
        .append(" at ")
        .append(outgoingMailServer.getHost())
        .append(" to addresses ")
        .append(Arrays.asList(addr));
        log(logMessageBuffer.toString());

        (Sorry, don't have time now to setup cvs/diff/patch)

        Show
        hes Hes Siemelink added a comment - Messages do get lost when this occurs. Looking at the exception handling in RemoteDelivery.run() it makes sense, but I think it is unwanted behavior. I think the best way to solve this is to explicitly check for null: In RemoteDelivery.deliver(), add the following while ( targetServers.hasNext()) { try { HostAddress outgoingMailServer = (HostAddress) targetServers.next(); // line 409: + if (outgoingMailServer == null) { + continue; + } StringBuffer logMessageBuffer = new StringBuffer(256) .append("Attempting delivery of ") .append(mail.getName()) .append(" to host ") .append(outgoingMailServer.getHostName()) .append(" at ") .append(outgoingMailServer.getHost()) .append(" to addresses ") .append(Arrays.asList(addr)); log(logMessageBuffer.toString()); (Sorry, don't have time now to setup cvs/diff/patch)
        Hide
        noel Noel J. Bergman added a comment -

        There is a different fix for this in CVS. It matches the fix already made for the same reason in the DNSServer code. The iterator really should not return true if it won't be able to return a valid HostAddress.

        This fix will be present in a test build posted tonight. Please test and let us know if it takes care of the problem in your environment.

        Show
        noel Noel J. Bergman added a comment - There is a different fix for this in CVS. It matches the fix already made for the same reason in the DNSServer code. The iterator really should not return true if it won't be able to return a valid HostAddress. This fix will be present in a test build posted tonight. Please test and let us know if it takes care of the problem in your environment.
        Hide
        noel Noel J. Bergman added a comment -

        This bug was identical to JAMES-236, except for being in the gateway server iterator instead of the MX hosts iterator in the DNSServer code.

        Show
        noel Noel J. Bergman added a comment - This bug was identical to JAMES-236 , except for being in the gateway server iterator instead of the MX hosts iterator in the DNSServer code.
        Hide
        bago Stefano Bagnara added a comment -

        According to comments and cvs log this has been fixed by Noel.

        Show
        bago Stefano Bagnara added a comment - According to comments and cvs log this has been fixed by Noel.
        Hide
        danny@apache.org Danny Angus added a comment -

        Closing issue fixed in released version.

        Show
        danny@apache.org Danny Angus added a comment - Closing issue fixed in released version.

          People

          • Assignee:
            noel Noel J. Bergman
            Reporter:
            hes Hes Siemelink
          • Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development