2016-09-17 9 views
1

Я тестирую приложение Android, которое подключено к моему локальному маршрутизатору. В той же сети WiFi также работают некоторые веб-службы Java, используя Restlets. Я подтвердил, что приложение Android может попасть в сервисный фильтр и даже получить ответ от фильтра службы. Однако, похоже, это не похоже на службу Restlet.Android не может связаться с сервисом Restlet, запущенным в той же сети

Полный URL к сервису:

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

где 192.168.0.148 это локальный IP-адрес компьютера под управлением веб-служб Restlet.

У меня есть служба отображенной в моем Restlet Application класса следующим образом:

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

web.xml Моего файл имеет соответствующие сопоставления для маршрутизации либо с шаблоном /service/ в сервлет Restlet.

Я могу успешно воспользоваться этой услугой при тестировании из пользовательского интерфейса SOAP, используя тот же URL, что и выше. Фактически, все веб-службы были протестированы сквозным образом с использованием интерфейса SOAP и полностью функциональны.

По какой-то причине, Android приложение может ударить фильтр обслуживания, когда, но когда она достигает:

chain.doFilter(request, response); 

запрос заканчивается теряется в пространстве, и ничто не возвращается.

Я подозреваю, что это проблема с конфигурацией Reslets, хотя я точно не знаю, что здесь происходит.

+0

Опубликуйте код, который вы используете для подключения к серверу. Получаете ли вы ошибку тайм-аута? Можете ли вы зарегистрироваться с сервера, чтобы узнать, есть ли там запрос? – nasch

+0

@nasch Как я уже говорил, приложение Android может отправлять и получать, пока ответ отправляется из фильтра. Но когда цепочка фильтров пересылается, она никогда не попадает в службу '/ login'. –

ответ

0

У меня практически нет обратной связи ни с сообществом SO, ни с Restlets, что на самом деле имеет смысл, учитывая, что все, что я сообщал в вопросе, верное. Я решил подключить источники Restlet к своей IntelliJ IDE и выполнить код. Я видел, что в журналах Tomcat содержался код ответа 415, и, проверив фактическое исключение внутри Restlets, я увидел ошибку, в которой указано, что тип носителя, который я опубликовал, был неожиданным. Увидев это, я сразу понял, что я сделал неправильно, что было:

  • не отправляет надлежащий JSON в службу авторизации
  • не объявляя типа контента, чтобы быть JSON в заголовке Почта
  • и используя Restlet услуги все из которых ожидают JSON


Для тех, кто сталкивается с подобной проблемой, как с помощью Restlets с JSON, следующий 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. 

 Смежные вопросы

  • Нет связанных вопросов^_^