messageHandler.setMessageListener(l, mi, this);
messageHandler.setMessageListener(l);
   public Object invoke(Invocation invocation) throws Throwable   {      if (invocation instanceof JMSMethodInvocation)      {         JMSMethodInvocation mi = (JMSMethodInvocation)invocation;         Method m = mi.getMethod();         String name = m.getName();         if (log.isTraceEnabled()) { log.trace("handling " + name); }         Object[] args = mi.getArguments();         MessageCallbackHandler messageHandler = (MessageCallbackHandler)mi.               getMetaData(JMSAdvisor.JMS, JMSAdvisor.CALLBACK_HANDLER);         if (name.equals("receive"))         {            long timeout = args == null ? 0 : ((Long)args[0]).longValue();            return messageHandler.receive(timeout, mi, this);         }         else if (name.equals("receiveNoWait"))         {            return messageHandler.receive(-1, mi, this);         }         else if (name.equals("setMessageListener"))         {            MessageListener l = (MessageListener)args[0];            if (l != null)            {               // nullify the first argument, the MessageListener is not serializable               args[0] = null;            }            messageHandler.setMessageListener(l, mi, this);            return null;         }         else if (name.equals("getMessageListener"))         {            return messageHandler.getMessageListener();         }      }      return invocation.invokeNext();   }