Проблема с клиентом в Джерси - PullRequest
4 голосов
/ 26 марта 2011

Я пишу клиент для Android, который вызывает веб-сервис. Сервис написан с использованием JAX-RS / Jersey API. Я также пытаюсь использовать Jersey-Client API на стороне Android.

        Client client = Client.create();
        WebResource webResource = client.resource(server + "/api/restaurant_info/update");
        MultivaluedMap formData = new MultivaluedMapImpl();
        formData.add("id", id);
        formData.add("f", Boolean.toString(f));
        formData.add("fId", fId);
        ClientResponse response = webResource.type(MediaType.APPLICATION_FORM_URLENCODED).accept(MediaType.APPLICATION_JSON).post(ClientResponse.class, formData);
        RestInfo restInfo = response.getEntity(RestInfo.class);
        return restInfo;

Я протестировал веб-сервис извне, и он, кажется, работает нормально. Когда я пытаюсь вызвать его из моего приложения, я получаю исключение NullPointerException в строке ClientResponse.

03-26 14:15:43.735: WARN/System.err(1060): java.lang.NullPointerException
03-26 14:15:43.745: WARN/System.err(1060):     at javax.ws.rs.core.MediaType.valueOf(MediaType.java:119)
03-26 14:15:43.745: WARN/System.err(1060):     at com.sun.jersey.api.client.PartialRequestBuilder.type(PartialRequestBuilder.java:92)
03-26 14:15:43.755: WARN/System.err(1060):     at com.sun.jersey.api.client.WebResource.type(WebResource.java:309)
03-26 14:15:43.755: WARN/System.err(1060):     at com.era.external.era.ERAService.updateRestaurantFranchise(ERAService.java:80)
03-26 14:15:43.755: WARN/System.err(1060):     at com.era.android.RestaurantActivity$4.onItemSelected(RestaurantActivity.java:201)
03-26 14:15:43.755: WARN/System.err(1060):     at android.widget.AdapterView.fireOnSelected(AdapterView.java:856)
03-26 14:15:43.766: WARN/System.err(1060):     at android.widget.AdapterView.access$200(AdapterView.java:41)
03-26 14:15:43.766: WARN/System.err(1060):     at android.widget.AdapterView$SelectionNotifier.run(AdapterView.java:827)
03-26 14:15:43.776: WARN/System.err(1060):     at android.os.Handler.handleCallback(Handler.java:587)
03-26 14:15:43.776: WARN/System.err(1060):     at android.os.Handler.dispatchMessage(Handler.java:92)
03-26 14:15:43.776: WARN/System.err(1060):     at android.os.Looper.loop(Looper.java:123)
03-26 14:15:43.786: WARN/System.err(1060):     at android.app.ActivityThread.main(ActivityThread.java:3948)
03-26 14:15:43.786: WARN/System.err(1060):     at java.lang.reflect.Method.invokeNative(Native Method)
03-26 14:15:43.796: WARN/System.err(1060):     at java.lang.reflect.Method.invoke(Method.java:521)
03-26 14:15:43.796: WARN/System.err(1060):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782)
03-26 14:15:43.796: WARN/System.err(1060):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540)
03-26 14:15:43.806: WARN/System.err(1060):     at dalvik.system.NativeStart.main(Native Method)

Есть идеи, что я делаю не так?

Ответы [ 3 ]

0 голосов
/ 31 мая 2011

Android имеет виртуальную машину Dalvik, а не оригинальную JVM. Я думаю, что это причина того, почему Jersey Client API не работает в ОС Android. но я уверена!

0 голосов
/ 06 ноября 2013

Я также новичок в Джерси, но я думаю, что причина, по которой ваш почтовый индекс не работает, в том, что formData должен быть в одном из принятых типов. Я не совсем уверен в разнице между командами type и accept в этом контексте, но я почти уверен, что formData должен относиться к одному из типов, поддерживаемых вашим конструктором вызовов. Например. если вы сериализовали formData как объект JSON и задали тип / accept для JSON, тогда этот код работал бы. Возможно, он вызывает некоторый bodymethodwriter, чтобы сериализовать его в приемлемый тип, но у formData такого нет, поэтому вызов метода возвращает нуль. Фактически, это похоже на вызов ValueOf, чтобы попытаться получить данные из formData для сериализации, но это возвращает ноль.

0 голосов
/ 07 апреля 2011

Судя по трассировке стека, вероятно, что-то происходит при

  • ERAService line 80 в методе updateRestaurantFranchise
  • RestaurantActivity в строке 201 в onItemSelectedметод
...