# ich bekomme immer java.rmi.UnmarshalException



## Senate (25. Nov 2006)

Hallo an alle 
hier mein Problem:
wenn ich meinen server starten will bekomm ich folgende Exception:


```
java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
	java.lang.ClassNotFoundException
```

hab auch bereits in der api nachgeschaut kann aber leider meinen fehler nicht deuten, da mein wissen über java nicht ausreichend ist.
in der api steht folgendes:

```
if a java.lang.ClassNotFoundException occurs during unmarshalling parameters or return values
```
mein engschlishc und meine java kentnisse sind nicht die besten deswegen hoffe ich das ihr mir mit dieser fehlermeldung weiter helfen könnt.

vielen Dank schon mal im vorraus


----------



## SlaterB (25. Nov 2006)

deine Fehlermeldung sagt nix weiter?
keine Zeilennummer, Ort des Fehlers (in einer anderen Klasse), gar ein StackTrace?


du hast einen Server? 
ist das einer der 30 google-Server über denen das Internet seine Suchen durchführt 
oder willst du da noch genauere Details zu posten?


----------



## Senate (25. Nov 2006)

ich dachte meine ganze exception sprengt jetzt den rahmen.
aber bitte:


```
java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: 
	java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
	java.lang.ClassNotFoundException: ManageImpl_Stub
	at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:385)
	at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:240)
	at sun.rmi.transport.Transport$1.run(Transport.java:153)
	at java.security.AccessController.doPrivileged(Native Method)
	at sun.rmi.transport.Transport.serviceCall(Transport.java:149)
	at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:466)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:707)
	at java.lang.Thread.run(Thread.java:595)
	at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(Unknown Source)
	at sun.rmi.transport.StreamRemoteCall.executeCall(Unknown Source)
	at sun.rmi.server.UnicastRef.invoke(Unknown Source)
	at sun.rmi.registry.RegistryImpl_Stub.rebind(Unknown Source)
	at java.rmi.Naming.rebind(Unknown Source)
	at Server.main(Server.java:29)
Caused by: java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
	java.lang.ClassNotFoundException: ManageImpl_Stub
	at sun.rmi.registry.RegistryImpl_Skel.dispatch(Unknown Source)
	at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:375)
	at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:240)
	at sun.rmi.transport.Transport$1.run(Transport.java:153)
	at java.security.AccessController.doPrivileged(Native Method)
	at sun.rmi.transport.Transport.serviceCall(Transport.java:149)
	at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:466)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:707)
	at java.lang.Thread.run(Thread.java:595)
```

ich würde gerne wissen wie ich die fehlermeldung zu verstehen hab damit ich damit auch was anfangen kann.
reicht der auszug aus dem code?


```
public class ManageImpl extends UnicastRemoteObject implements Manage
{
 hier der üblich code ... blab bla 
}
```


----------



## SlaterB (25. Nov 2006)

was für ein Server das ist ist noch nicht klar,
im Internet oder lokal?
Java, PHP, C++, J2EE, Web Service?

da ist von ManageImpl_Stub die Rede, eine Klasse die bnötigt wird aber nicht da ist,
wo ist diese Klasse, wer erzeugt die, aus welchen Beschreibungen,
wie wird sie aufgerufen (Server scheint ja deine Klasse zu sein?)


----------



## Senate (25. Nov 2006)

ja der server ist lokal.
mit java fummel ich nen bischen rum.

die "klasse" ManageImpl_Stub erzeuge ich selbst in dem ich die MangaeImpl mit speziellen parametern ausführe.
dann mache ich im Navigator refresh und dann habe ich sie erzeugt. (arguments: -d ./)
dann starte ich meinen server.java mit folgenden argumenten:
-Djava.rmi.server.codebase=file:/D:\tests\folder\
und dann bekomme ich die fehlermeldung, die oben steht.


----------



## SlaterB (25. Nov 2006)

ganz nebei erfährt man, dass es sich wohl um RMI handelt?
enthält der Order nur die .java-Dateien oder auch die .class?
stimmen die package-Strukturen oder liegen alle Dateien in einem Verzeichnis?

bringt es als schmutzigen Workaround etwas, die Dateien zu den anderen Dateien zu kopieren,
in ein jar zu schieben,
in den CLASSPATH des Rechners/ des Server einzufügen?

kannst du auf die Classen einfach so in einem Testprogramm zugreifen
Class c = ManageImpl_Stub.class;
ohne diese ganze Servergeschichte,

-------

funktionierts vielleicht mit anderen Schreibweisen?

D:\tests\folder\ 
D:\tests\folder
D:\\tests\\folder\\ 
D:\\tests\\folder
D:/tests/folder/ 
D:/tests/folder 


file:// statt file:/


----------



## Senate (25. Nov 2006)

der ordner enthält sämtlich dateien sowohl die class dateien als auch die java dateien.
die schreibweise des folders ist korrekt habe das bei einem anderem projekt bereits auch schon mal so gemacht.
mit folgender aussage kann ich nichts anfangen:


> bringt es als schmutzigen Workaround etwas, die Dateien zu den anderen Dateien zu kopieren,
> in ein jar zu schieben,
> in den CLASSPATH des Rechners/ des Server einzufügen?




ich dachte das es sich um rmi handelt wurde nach folgender aussage klar:

```
java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
   java.lang.ClassNotFoundException
```
die genau fehlermeldung wird auf folgender seite beschrieben, aber damit kann ich leider nichts anfangen ... du evtl?
java.sun.com/j2se/1.4.2/docs/api/java/rmi/UnmarshalException.html


----------



## SlaterB (25. Nov 2006)

daran hätte man es wohl erkennen können, stimmt 

ne ich kann ansonsten nix zu sagen, ClassNotFoundException spricht ja auch für sich,

--------

> mit folgender aussage kann ich nichts anfangen 

na irgendwo wird doch Server.class liegen, anscheinend nicht in D:\tests\folder\ oder doch?
also die Stubs zu Server.class kopieren, ins richtige Unterverzeichnis natürlich,
falls du überhaupt packages benutzt,

ein Jar ist ein Jar, eine Datei die .class-Dateien enthält,
eine Library die man alternativ zu offen vorliegenden .class-Dateien nutzen kann

CLASSPATH gibt allgemein an, wo Daten liegen (außer im Verzeichnis des Aufrufs),
CLASSPATH kann man als Umgebungsvariable definieren oder bei java-Aufrufen explizit angeben,
wenn noch nicht bekannt dann aber besser Tutorials anschauen und erst in einfacheren Umgebungen testen,

ein günstiges Ziel wäre, eine Zeile 
Class c = ManageImpl_Stub.class; 
erfolgreich zu kompilieren und auszuführen,
wenn bei diesem Code nicht schon ein ClassNotFoundException kommt und dieser Code in der Server-Klasse steht,
dann besteht die Hoffnung, das auch der Rest der Anwendung der Stub-Klasse finden wird,
sicher kann man sich da nicht sein, wer weiß was intern so alles passiert


----------



## Senate (25. Nov 2006)

Hab den Fehler gefunden!
Lösung:
hatte die falsche rmiregistry geladen 
da kann ich mich im internet auch echt wild suchen *grrr

Falsch:
C:\Programme\Java\jdk1.5.0_09\bin\rmiregistry.exe


*Richtig:*
C:\Programme\Java\jre1.5.0_06\bin\rmiregistry.exe


schon gut blood wenn man die falsche startet


----------



## SlaterB (25. Nov 2006)

das ist ja verrückt,
gibts dazu auch Begründungen/
was hat das mit ClassNotFoundException zu tun?


----------



## Senate (26. Nov 2006)

keine ahnung hab das nur durch verzweiflung herraus gefunden.. wie gesagt wären meine java kentnisse besser könnte ich es dir erklären


----------

