En utilisant du RMI sous Tomcat, il est possible de rencontrer l’exception suivante :

RemoteException : RemoteException occurred in server thread; nested exception is:
 	java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
 	java.net.MalformedURLException: no protocol: Files/eclipse-3.0.1/workspace/MyProject/WEB-INF/classes/

Ou bien :

RemoteException : RemoteException occurred in server thread; nested exception is:
 	java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
 	java.net.MalformedURLException: no protocol: Files/Apache

Ces erreurs “ne sont” que des des problèmes de classpath. 😉

Cette erreur peut être rencontrée lorsque le chemin où se trouve les classes utilisées pour la communication RMI contient des espaces. Ce cas est assez courant dans un environnement sous MS Windows avec Tomcat ou Eclipse, puisque par défaut ils sont installés dans le répertoire C:\Program Files\ .

Une première solution consiste à installer Tomcat dans un répertoire ne contenant pas d’espace[1].

La seconde solution, consiste à positionner un paramètre sur le serveur RMI (beaucoup plus propre tout de même). Pour cela, il suffit d’ajouter cette option à la JVM :

-Djava.rmi.server.useCodebaseOnly=true

Ce disfonctionnement est connu est référencé :

Notes

[1] Si la WebApp est configurée pour être lancée à partir de votre environnement de développement, c’est l’IDE (comme Eclipse) qu’il faut installer dans un répertoire sans espace.