GWT - 500 The call failed on the server

ROCKSCHTAR

Grünschnabel
Moin,

ich habe folgendes Problem:
Ich entwickle gerade mit GWT und habe dort meine Client-Server-Architektur. Die erste Seite enthält bereits den Login-Mechanismus. Wird die Seite aufgerufen erhalte ich folgenden Fehler:
com.google.gwt.user.client.rpc.StatusCodeException: 500 The call failed on the server;

Kurioser Weise tritt dieser Fehler nur manchmal auf, d. h. nach einigen Browser-Refreshs wird die Seite endlich geladen und ich kann mich einloggen. Alle Objekte, die zwischen Client und Server ausgetauscht werden implementieren Serializable und jede Klasse enthält einen Standardkonstruktor (das sollen wohl die hauptsächlichen Fehlerquellen sein).

Noch ein paar Hintergrundinfos:
Der Server läuft auf einem Tomcat 6
Der Fehler tritt im IE, Chrome und Firefox gleichermaßen auf
Wenn ich mich im Debug-Modus befinde tritt der Fehler häufiger auf
In allen Browsern wurde der Cache ausgestellt, sodass die Seiten jedesmal neu geladen werden müssen

Kann mir jemand sagen, was ich noch machen kann, damit dieser Fehler nicht mehr auftritt?

Sollten weitere Informationen nötig sein, dann sagt bescheid.

Gruß
Martin
 
Ich habe jetzt noch etwas herausgefunden, aber hier erstmal der Stacktrace:

Code:
com.google.gwt.user.client.rpc.StatusCodeException: 500 The call failed on the server; see server log for details
    at com.google.gwt.user.client.rpc.impl.RequestCallbackAdapter.onResponseReceived(RequestCallbackAdapter.java:209)
    at com.google.gwt.http.client.Request.fireOnResponseReceived(Request.java:287)
    at com.google.gwt.http.client.RequestBuilder$1.onReadyStateChange(RequestBuilder.java:395)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103)
    at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71)
    at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:172)
    at com.google.gwt.dev.shell.BrowserChannelServer.reactToMessagesWhileWaitingForReturn(BrowserChannelServer.java:337)
    at com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:218)
    at com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:136)
    at com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:561)
    at com.google.gwt.dev.shell.ModuleSpace.invokeNativeObject(ModuleSpace.java:269)
    at com.google.gwt.dev.shell.JavaScriptHost.invokeNativeObject(JavaScriptHost.java:91)
    at com.google.gwt.core.client.impl.Impl.apply(Impl.java)
    at com.google.gwt.core.client.impl.Impl.entry0(Impl.java:213)
    at sun.reflect.GeneratedMethodAccessor32.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103)
    at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71)
    at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:172)
    at com.google.gwt.dev.shell.BrowserChannelServer.reactToMessages(BrowserChannelServer.java:292)
    at com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:546)
    at com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:363)
    at java.lang.Thread.run(Thread.java:662)

Und hier das, was im Tomcat-Log steht:
Code:
com.google.gwt.user.client.rpc.SerializationException: Type '[Lxxx.xxx.xxx.xxx.xxx.xxx.StammdatenBranche;' was not assignable to 'com.google.gwt.user.client.rpc.IsSerializable' and did not have a custom field serializer.For security purposes, this type will not be serialized.: instance = [Lxxx.xxx.xxx.xxx.xxx.xxx.StammdatenBranche;@5ce133da
	at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serialize(ServerSerializationStreamWriter.java:619)
	at com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamWriter.writeObject(AbstractSerializationStreamWriter.java:126)
	at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter$ValueWriter$8.write(ServerSerializationStreamWriter.java:153)
	at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeValue(ServerSerializationStreamWriter.java:539)
	at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeClass(ServerSerializationStreamWriter.java:709)
	at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeImpl(ServerSerializationStreamWriter.java:748)
	at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serialize(ServerSerializationStreamWriter.java:621)
	at com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamWriter.writeObject(AbstractSerializationStreamWriter.java:126)
	at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter$ValueWriter$8.write(ServerSerializationStreamWriter.java:153)
	at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeValue(ServerSerializationStreamWriter.java:539)
	at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeClass(ServerSerializationStreamWriter.java:709)
	at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeImpl(ServerSerializationStreamWriter.java:748)
	at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serialize(ServerSerializationStreamWriter.java:621)
	at com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamWriter.writeObject(AbstractSerializationStreamWriter.java:126)
	at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter$ValueWriter$8.write(ServerSerializationStreamWriter.java:153)
	at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeValue(ServerSerializationStreamWriter.java:539)
	at com.google.gwt.user.server.rpc.RPC.encodeResponse(RPC.java:616)
	at com.google.gwt.user.server.rpc.RPC.encodeResponseForSuccess(RPC.java:474)
	at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:571)
	at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:208)
	at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:248)
	at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
	at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:864)
	at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:579)
	at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1665)
	at java.lang.Thread.run(Thread.java:662)

Die StammdatenBranche-Klasse, die angemerkt wird, implementiert das Interface Serializable und nicht das GWT-Spezifische Interface IsSerializable. Allerdings kann ich im Server nicht bei jeder Klasse das Inteface ändern und erst recht nicht die GWT-Jars einbinden, um an das Inteface ranzukommen. Ich meine auch i-wann mal gelesen zu haben, dass die beiden Interfaces gleich behandelt werden, d. h. es sollte eigentlich keinen Unterschied machen, ob eine Klasse das eine oder das andere implementiert.

Ist das nachvollziehbar? Kann mir jemand sagen, was ich tun kann? Und warum tritt der Fehler nicht immer auf, sondern nur ab und zu?

Gruß
Martin
 
Hallo,

wenn du die Klassen nicht ändern kannst und diese nicht Serialisierbar sind, dann kannst du diese auch nicht in der Client / Server Kommunikation verwenden. -> Hier wären dann entweder spezielle oder allgemeine (generische) DTOs (Data Transfer Objects) zu definieren die du dann unter Kontrolle hast (die können dann Serializable sein) und zwischen Client / Server verwenden kannst.

Ist das nachvollziehbar? Kann mir jemand sagen, was ich tun kann? Und warum tritt der Fehler nicht immer auf, sondern nur ab und zu?
Kann es sein, dass deine Methode "manchmal" des entsprechende Attribut in deiner Antwort-Struktur auf null setzt (dann gibt es keinen Fehler), ansonsten kommt ein Fehler?

Gruß Tom
 
Zurück