james-server-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Johnny Minty <joh...@minty.net.nz>
Subject James 3 exception loop
Date Wed, 30 Jan 2013 22:27:45 GMT
Hi Guys,

During my testing in JAMES beta 5 trunk I've found bug causing an exception loop when processing
messages. 

To cause the loop throw an uncaught exception in any mailet without onMailetException=ignore
attribute.

After tracing through the code I think the problems with the handleException method in the
ProcessorUtil class : 

 /**
     * This is a helper method that updates the state of the mail object to
     * Mail.ERROR as well as recording the exception to the log
     * 
     * @param me
     *            the exception to be handled
     * @param mail
     *            the mail being processed when the exception was generated
     * @param offendersName
     *            the matcher or mailet than generated the exception
     * @param nextState
     *            the next state to set
     * 
     * @throws MessagingException
     *             thrown always, rethrowing the passed in exception <--- WHY
REMOVE?
     */
public static void handleException(MessagingException me, Mail mail, String offendersName,
String nextState, Logger logger) throws MessagingException {
        
        mail.setState(nextState);
       
        StringWriter sout = new StringWriter();
        PrintWriter out = new PrintWriter(sout, true);
        
        StringBuffer exceptionBuffer = new StringBuffer(128).append("Exception calling
").append(offendersName).append(": ").append(me.getMessage());
        
        out.println(exceptionBuffer.toString());
        
        Exception e = me;
        while (e != null) {
            e.printStackTrace(out);
            if (e instanceof MessagingException) {
                e = ((MessagingException) e).getNextException();
            } else {
                e = null;
            }
        }
        
        String errorString = sout.toString();
        
        mail.setErrorMessage(errorString);
        
        logger.error(errorString);
        
        //This line should be removed
        throw me; <--- REMOVE?
    }

If I remove the last statement re-throwing the MessagingException , the exception is logged
then passed to the error processor configured in your mailetcontainer.xml, which to me is
the correct behaviour. 		 	   		  
---------------------------------------------------------------------
To unsubscribe, e-mail: server-user-unsubscribe@james.apache.org
For additional commands, e-mail: server-user-help@james.apache.org


Mime
View raw message