2017-05-29 1 views
1

Ich versuche derzeit, die SyncProxy-Bibliothek zum Testen von Diensten meiner App zu verwenden, um Belastungstests mit JMeter durchzuführen. Die App funktioniert einwandfrei, ich verwende sie auf localhost.Verwenden von SyncProxy zum Testen von Diensten: "IOException beim Empfang von RPC-Antworten"

Das Problem kommt, wenn ich versuche, SyncProxy in meinen JUnit-Tests zu verwenden, scheitern sie.

ist hier ein Stück Code in einem JUnit-Test verwendet:

ThemeServiceAsync themeServiceAsync = (ThemeServiceAsync) SyncProxy 
      .newProxyInstance(ThemeServiceAsync.class, MODULE_BASE_URL, GET_THEMES_SERVICE_NAME); 

themeServiceAsync.getListTheme(codeEfs, codeSI, noStr, statut, new AsyncCallback<List<Theme>>(){ 

    @Override 
    public void onFailure(Throwable arg0) { 
     // TODO Auto-generated method stub 
     System.out.println(arg0); 
    } 


    @Override 
    public void onSuccess(List<Theme> result) { 
     // TODO Auto-generated method stub 
     System.out.println(result); 

    } 

}); 

ich die folgende Störung erhalte: IOException while receiving RPC response

ich den Debug-Modus verwendet, um herauszufinden, wo das Problem war kommen. Auf der Serverseite läuft alles gut, bis das Ergebnis an den Client zurückgesendet wird. Das Ergebnis ist in der Datenbank gefunden, aber ich habe einen mysteriösen 500 Fehler.

Nach dem Graben, fand ich, dass diese Ausnahme (im AbstractRemoteServiceServlet) geworfen wird:

com.google.gwt.user.client.rpc.SerializationException: Type 'net.gicm.ector.shared.beans.Theme' 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 = [email protected] 

fand ich eine Menge Threads über die Tatsache sprechen, dass Ihre Klasse zu implementieren „IsSerializable“ braucht, aber was ich verstehe nicht, ist, dass ich tatsächlich meine App auf localhost laufen lasse, und alles funktioniert gut, einschließlich der verschiedenen Dienste.

Aber wenn es darum geht, meine JUnit (s) zu laufen, habe ich diese Fehler.

+1

Überprüfen Sie die Grundlagen: Ist Ihre Klasse 'Theme', die Serializable implementiert? Hat es einen Nicht-Arg-Konstruktor? Auch welche gwt-Version verwendest du? – Andrei

+0

Meine Klasse 'Theme' implementiert Serializable. Es hat einen No-Arg-Konstruktor, und die gwt-Version ist die 2.6 – krakig

Antwort

0

Sieht aus, als ob Sie Pfade oder Klassenpfadressourcen durcheinander gebracht haben. GWT-RPC verwendet einige generierte Dateien, sogenannte Richtlinien, um eine Art von Sicherheitsmechanismus zu implementieren (d. H., Bestimmte Typen usw. nicht zuzulassen). In Ihrem Fall sieht es so aus, als ob diese Dateien während des Tests falsch oder nicht im Klassenpfad abgelegt werden.

Wenn dies passiert, Debugging ich normalerweise durch RemoteServiceServlet#getSerializationPolicy (Verweis auf GWT 2.8.1 und nicht 2.6, aber ich denke, dass dieser Teil nicht viel geändert hat). Sie werden schließlich in landen, wo es versucht, einige Dateien zu laden, und Sie können sehen, auf welchen Pfaden es versucht, und warum diese Dateien fehlen.

+0

Sie haben Recht. Ich habe dort einen Haltepunkt hinzugefügt, und wenn ich eine Anfrage von meiner App aus teste, ist der strongname ähnlich wie "E52F7D678A782A8A4B2A35A157692026", aber wenn ich den Dienst von meinem JUnit aus versuche, ist der strongName null und es gibt einen Fehler, der wird ignoriert. Diese Richtlinien, wie kann ich sie sowohl in meiner App als auch in meinem Test finden? – krakig

+0

Ich glaube nicht, dass der starke Name Null ist, ist in Ordnung; Sie sollten dies zuerst überprüfen, bevor Sie sich über die Dateien Gedanken machen. Der starke Name wird von der Clientanforderung gelesen (siehe 'ServerSerializationStreamReader.prepareToRead'). Wenn dies als null endet, sendet Ihr Client möglicherweise ungültige Anforderungen, oder Ihr Proxy verhält sich merkwürdig. Überprüfen und sehen Sie, wo dieser starke Name als null erscheint (vielleicht verweigert Ihr Proxy oder macht Dinge mit Anfragen mit x-gwt-rpc Inhaltstyp?) – Andrei

+0

Mit dem SyncProxy ist der folgende Header, der an die Serverseite gesendet wird, null: 'X -GWT-Permutation'. Und dann, im 'RemoteServiceServlet', ist der' serializationpolicyFilePath' gleich "/ector/null.gwt.rpc", also muss ich herausfinden, warum mein 'strongname' null ist. – krakig

Verwandte Themen