Exception serialisieren?

Status
Nicht offen für weitere Antworten.
T

tuxedo

Gast
Hi,

ich bastle mal wieder weiter an meinem SIMON (meine RMI Alternative)... Bin gerade dabei das Exception-Handling einzubauen.

Am Server führe ich ja "remote" eine Methode aus.

Client:
Code:
Object result = endpoint.sendInvocationToRemote(remoteObject, method.getName(), method.getParameterTypes(),args);

Diese kann aber beim Server eine Exception auslösen. Abfangen kann ich die Exception schon:

Server:
Code:
try {
			result = method.invoke(o, args);
			} catch (InvocationTargetException e){
				result = e.getTargetException();
			}

"result" enthält dann genau die geworfene Exception. Ich serialisiere also "result" und schicke es durch den Socket zurück zum Client. Dort lese ich also die "Anwort" des Methodenaufrufs aus (siehe erster Codeabschnitt des Clients) und gebe diese dem Methodenaufrufer zurück.

Hier muss ich jetzt aber schauen, ob tatsächlich ein Ergebnis zurück kommt, oder ob's eine Exception ist:

Code:
if (result instanceof Throwable){
			
			System.out.println(result);

		}

Wenn ich in der entfernten Methode (beim Server also) also ein

Code:
throw new IllegalArgumentException("SIMON Muhahaha");

mache, dann bekomme ich mit der obigen "instanceof" Abfrage in der Console die Ausgabe:

java.lang.IllegalArgumentException: SIMON Muhahaha

Soweit so gut. Ich hab jetzt aber das Problem dass ich die Exception nicht ausgeben will, sondern sie soll quasi "nochmal" als Exception auftauchen, diesmal halt beim Client. Und der Stacktrace sollte wenn möglich irgendwie sagen WO die Exception beim Server geflogen ist.

RMI macht das auch irgendwie (bin noch nicht ganz dahinter gestiegen). Kann man eine so abgefangene Exception an einer anderen Stelle ein zweites mal "werfen" ohne den STacktrace "komplett" zu verfälschen?

- Alex
 

lhein

Top Contributor
Ich würde dafür eine eigene Exception Klasse machen ala SIMONRemoteException und dieser dann eine Exception übergeben. Intern kannst Du ja dann Stacktrace usw. speichern.
Beim Client wirfst du diese Exception dann und printest den stacktrace aus, der deiner exception übergeben wurde.

lr
 
T

tuxedo

Gast
Hmm, daran hab ich auch schon gedacht. Aber "cooler" wäre es, wenn's so gehen würde.

Hab gerade nochmal mit RMI verglichen:

Da krieg ich zwar keine "gekapselte" Exception, dafür geht aber der Stacktrace verloren (sieht aus als ob die Exception Msg rausgelesen wurde, sowie der "Typ", und die Exception einfach nochmal geworfen wird. Dadurch ist halt der Stacktrace futsch.

- Alex
 
T

tuxedo

Gast
Man, das war ja doch einfacher als ich dachte... *hmmpf*

Code:
if (result instanceof Throwable){
			
			throw (Throwable)result;

		}

java.lang.IllegalArgumentException: SIMON Muhahaha
at de.root1.simon.test.benchmark_simon.SimonServerBenchmarkInterfaceImpl.benchmark(SimonServerBenchmarkInterfaceImpl.java:17)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at de.root1.simon.ProcessMethodInvocationRunnable.processMethodInvocation(ProcessMethodInvocationRunnable.java:125)
at de.root1.simon.ProcessMethodInvocationRunnable.run(ProcessMethodInvocationRunnable.java:57)


at java.lang.Thread.run(Unknown Source)

Stacktrace bleibt (weitgehend) erhalten (ich sehe also WO der Fehler im Servercode liegt), und ich brauch absolut nix kapseln... *cool*

- Alex
 
T

tuxedo

Gast
Genau (alle Exceptions erben früher oder später von Throwable). Um genau das geht's mir doch... Wenn in der Remote-Methode _irgendeine_ Exception ausgelöst wird, dann fang ich die ab, serialisiere sie, und werfe sie beim Client nochmal.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Webserviceaufruf verursacht eine Exception Netzwerkprogrammierung 3
R Socket FATAL EXCEPTION MAIN bei Socket based client/server app Netzwerkprogrammierung 2
D Exception Handling bei In/Outputsockets in eigenen Threads Netzwerkprogrammierung 1
A Cast Exception bei einfachem RMI Beispiel Netzwerkprogrammierung 3
M Socket Exception tritt auf - weiß nicht weiter Netzwerkprogrammierung 3
K Socket Exception Connection reset Netzwerkprogrammierung 9
C ObjectInputReader wirft beim zweiten Aufruf eine Exception Netzwerkprogrammierung 3
M Socket TCP keep alive Exception wird nicht ausgelöst Netzwerkprogrammierung 11
G Exception: Connection reset by peer: socket write error Netzwerkprogrammierung 2
A Socket Socket Verbindung unterbrochen --> keine Exception Netzwerkprogrammierung 7
H Socket Closed Exception verhindern Netzwerkprogrammierung 3
M RMI unmarshaling exception ??? Netzwerkprogrammierung 2
D Socket Streams schliessen .. Exception gewollt? Netzwerkprogrammierung 4
K Socket Socket Exception Netzwerkprogrammierung 3
eQuest RMI Unserializable Exception Netzwerkprogrammierung 4
F Bekomme NoSuchElement Exception Netzwerkprogrammierung 5
S RMI Exception Netzwerkprogrammierung 2
T rmi ssl zu große Objekte übergeben -> Exception Netzwerkprogrammierung 10
clupus Exception beim Schließen eines Sockets Netzwerkprogrammierung 6
G Exception javax.naming.CommunicationException Netzwerkprogrammierung 16
G Nullpointer Exception - Multithreading Netzwerkprogrammierung 25
G XML-RPC -> Exception $Proxy0-Unknown Source-No such handl Netzwerkprogrammierung 8
K öffnen des socket schlägt fehl -> ABER: keine exception . Netzwerkprogrammierung 2
M ois nicht null, aber ois.getObject liefer exception Netzwerkprogrammierung 3
R ObjectOutput- / ObjectInputStream Exception? Netzwerkprogrammierung 2
D EA-Exception Network Adapter macht probleme Netzwerkprogrammierung 2
F Java Mail . Exception java.lang.NoClassDefFoundError Netzwerkprogrammierung 2
M Exception in thread "main" java.lang.NoClassDefFou Netzwerkprogrammierung 2
J JavaMail Exception bei senden an anderen Server. Netzwerkprogrammierung 8
M schreiben auf geschlossenen Socket ohne Exception Netzwerkprogrammierung 6
R LINUX: getHostAddress() und getHostName() werfen Exception Netzwerkprogrammierung 6
8 PrintWriter Exception Netzwerkprogrammierung 3
D socket exception + timing probleme Netzwerkprogrammierung 2
A Exception bei Cookie lesen Netzwerkprogrammierung 2
Kr0e Serialisieren von Class<?> Netzwerkprogrammierung 2
C Flash Daten an Java senden, wie serialisieren? Netzwerkprogrammierung 3
B Was kann man alles serialisieren? Netzwerkprogrammierung 10
G Remote der serialisieren Netzwerkprogrammierung 3
D RMI und JTreeTable / Serialisieren Netzwerkprogrammierung 5

Ähnliche Java Themen


Oben