All of the methods on a RMI Remote interface must declare RemoteException in their throws clause, e.g.:

public String getId() throws RemoteException;

It's not clear why the exception names getId() specifically, it's probably just the first method it checked.

Also, the getLeafNodes() and getNeighborhoodList() methods should have return types that specify Node, not NodeImpl, otherwise they will likely fail also.