e.printStackTrace();
   private void handleMessage(final MethodCall m)    {      // get the method signature      Object[] params = m.getParameters();      ExportedObject eo = null;      Method meth = null;      Object o;            synchronized (exportedObjects) {         eo = exportedObjects.get(null);      }      if (null != eo) {         meth = eo.methods.get(new MethodTuple(m.getType(), m.getName()));      }      if (null != meth)         o = new _globalhandler(m.getObjectPath());      else {         // now check for specific exported functions         synchronized (exportedObjects) {            eo = exportedObjects.get(m.getObjectPath());         }         if (null == eo) {            synchronized (outgoing) {               outgoing.addLast(new InternalErrorMessage(m, m.getObjectPath()+" is not an object provided by this service.")); }            return;         }         meth = eo.methods.get(new MethodTuple(m.getType(), m.getName()));         if (null == meth) {            synchronized (outgoing) {               outgoing.addLast(new InternalErrorMessage(m, "The method `"+m.getType()+"."+m.getName()+"' does not exist on this object.")); }            return;         }         o = eo.object;      }      try {         Type[] ts = meth.getGenericParameterTypes();         m.parameters = deSerialiseParameters(m.parameters, ts);      } catch (Exception e) {         e.printStackTrace();         synchronized (outgoing) {            outgoing.addLast(new InternalErrorMessage(m, "Failure in de-serialising message ("+e+")")); }      }      // now execute it      final Method me = meth;      final Object ob = o;      final LinkedList<DBusMessage> outqueue = outgoing;      new Thread()       {          public void run()          {             try {                Object result = me.invoke(ob, m.parameters);               result = convertParameters(new Object[] { result }, new Type[] { me.getGenericReturnType() })[0];               MethodReply reply = new MethodReply(m, result);               synchronized (outqueue) {                  outqueue.addLast(reply);               }            } catch (Exception e) {               e.printStackTrace();               synchronized (outqueue) {                  outqueue.addLast(new InternalErrorMessage(m, "Error Executing Method "+m.getType()+"."+m.getName()+": "+e.getMessage()));                }            }          }      }.start();   }