2016-09-17 3 views
1

私のローカルルータに接続されているAndroidアプリをテストしています。同じWiFiネットワーク上では、Restletsを使用していくつかのJava Webサービスも実行されています。私は、Androidアプリがサービスフィルタにヒットし、サービスフィルタからの応答を受け取ることもできることを確認しました。しかし、それは問題のRestletサービスを打つことはできないようです。Androidは同じネットワーク上で実行されているRestletサービスには届きません

サービスへの完全なURLは次のとおりです。192.168.0.148はRestletのWebサービスを実行しているコンピュータのローカルIPアドレスである

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

次のように私は私のRestlet Applicationクラスにマッピングされたサービスを持っている:

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

マイweb.xmlファイルはRestletのサーブレットへのパターン/service/とルート何に適切なマッピングを持っています。

上記のURLとまったく同じURLを使用してSOAP UIからテストすると、このサービスを正常に実行できます。実際、すべてのWebサービスはSOAP UIを使用してエンドツーエンドでテストされており、完全に機能しています。それが到達したときに

は、何らかの理由で、Androidアプリはときには、サービスフィルタを打つことができます。

chain.doFilter(request, response); 

要求はスペースで失われてしまい、そして何も返されませんされます。

私はここで何が起こっているのか正確にはわかりませんが、これは主にレスレット設定の問題であると思われます。

+0

サーバーへの接続に使用しているコードを投稿してください。タイムアウトエラーが発生しましたか?サーバーからログを取って、要求がそこに届くかどうか確認できますか? – nasch

+0

@nasch私が述べたように、Androidアプリは、応答がフィルタから送信される限り、送受信できます。しかし、フィルタチェーンが転送されると、 '/ login'サービスには決して行きません。 –

答えて

0

SOコミュニティまたはRestletsからのフィードバックは事実上ありません。質問で報告したすべてが正しいとすれば実際には意味があります。 RestletのソースをIntelliJ IDEに接続し、コードをステップ実行することにしました。私はTomcatのログに応答コード415が含まれていて、Restletsの実際の例外を調べると、私が投稿したメディアタイプが予期せぬものであったというエラーが表示されました。これを見てすると、私はすぐにあった、私は間違って行っていた知っていた:

  • は、コンテンツタイプがポスト
  • のヘッダにJSONであることを宣言していないログインサービスへの適切なJSONを送信しませんそして、JSONとRestletsを使用するのと同様の問題に直面している人にとってJSON


を期待するすべてがのRestletサービスを使用して、次のAndroidのコードは問題なく作業のすべてを得た:

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. 
関連する問題