2016-09-17 1 views
1

Ich teste gerade eine Android-App, die mit meinem lokalen Router verbunden ist. Auf demselben WiFi-Netzwerk werden auch einige Java-Webdienste mit Restlets ausgeführt. Ich habe überprüft, dass die Android-App den Dienstfilter treffen und sogar eine Antwort vom Dienstfilter erhalten kann. Es kann jedoch nicht scheinen, den Restlet-Service in Frage zu stellen.Android kann den Restlet-Dienst, der auf demselben Netzwerk läuft, nicht erreichen

Die vollständige URL zum Service ist:

http://192.168.0.148:8080/MyApp/service/login 

wo 192.168.0.148 die lokale Adresse des Computers, den Web-Service Restlet mit IP ist.

Ich habe das in meiner Restlet Application Klasse abgebildet Service wie folgt:

router.attach("/login", LoginResource.class); 

Meine web.xml Datei mit dem Muster der entsprechenden Zuordnungen zu routen alles hat /service/ zum Restlet Servlet.

Ich kann diesen Dienst erfolgreich beim Testen von SOAP UI mit genau der gleichen URL, die ich oben angegeben. In der Tat wurden alle Web Services Ende-zu-Ende mit SOAP UI getestet und sind voll funktionsfähig.

Aus irgendeinem Grund kann die Android App den Service-Filter treffen, wenn aber wenn es erreicht:

chain.doFilter(request, response); 

die Anfrage landet im Raum verloren, und wird nichts zurückgegeben.

Ich vermute, dass dies weitgehend ein Reslets-Konfigurationsproblem ist, obwohl ich nicht genau weiß, was hier passiert.

+0

Geben Sie den Code ein, mit dem Sie sich mit dem Server verbinden. Erhalten Sie einen Zeitüberschreitungsfehler? Können Sie vom Server ausloggen, um zu sehen, ob die Anfrage dort ankommt? – nasch

+0

@nasch Wie schon erwähnt, kann die Android App senden und empfangen, solange die Antwort vom Filter gesendet wird. Aber wenn die Filterkette weitergeleitet wird, kommt sie niemals zum Dienst '/ login'. –

Antwort

0

Ich habe praktisch kein Feedback, weder von der SO-Community noch von Restlets, was eigentlich Sinn macht, da alles, was ich in der Frage gemeldet habe, korrekt ist. Ich beschloss, die Restlet-Quellen an meine IntelliJ-IDE anzuhängen und den Code durchzugehen. Ich hatte gesehen, dass die Tomcat-Logs einen Antwortcode von 415 enthielten, und bei der Überprüfung der tatsächlichen Ausnahme in Restlets sah ich einen Fehler, der besagte, dass der von mir gepostete Medientyp unerwartet war. Darauf sah, wusste ich sofort, was hatte ich falsch gemacht, was war:

  • nicht richtig JSON an den Login-Dienst
  • nicht erklärt, den Inhaltstyp zu senden JSON werden im Header der Post
  • und mit Restlet Dienste von denen alle erwarten JSON


Für alle, die als ähnliches Problem mit Restlets mit JSON steht, wird die folgende Android Code hat alles ohne Probleme arbeiten:

String endpoint = "http://192.168.0.148:8080/MyApp/service/login"; 
URL obj = new URL(endpoint); 
HttpURLConnection con = (HttpURLConnection) obj.openConnection(); 
con.setRequestMethod("POST"); 
con.setDoInput(true); 
con.setDoOutput(true); 
con.setRequestProperty("Content-Type", "application/json; charset=UTF-8"); 

JSONObject json = new JSONObject(); 
json.put("username", username); 
json.put("password", password); 
// etc. 
Verwandte Themen