Jersey客户端API问题客户端、问题、Jersey、API

2023-09-06 15:31:42 作者:華燈初上、旧人可安

我写一个Android客户端,它调用的Web服务。该服务使用JAX-RS /泽西API编写的。我也想利用泽西客户端API在Android的一面。

I am writing an Android client which calls a web service. The service is written using JAX-RS / Jersey API. I'm also trying to use Jersey-Client API on the android side.

        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;

我已经测试Web服务外,它似乎是工作的罚款。当我试图从我的应用程序调用它,我得到一个NullPointerException异常的ClientResponse线。

I have tested the web service externally, and it seems to be working fine. When I try to call it from within my application, I'm getting a NullPointerException at the ClientResponse line.

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)

这是我在做什么错的任何想法?

Any ideas on what I'm doing wrong?

推荐答案

我也是新泽西新手,但我认为您的帖子code不工作的原因是FORMDATA必须在类型中的一种认可。我不完全确定的类型和在这个环境中接受命令的区别,但我pretty的肯定FORMDATA必须是你调用构建器支持的类型之一。例如。如果序列FORMDATA作为一个JSON对象,并设置类型/接受JSON那么这个code会工作。由于这是它可能是调用一些bodymethodwriter以连载它变成一个可以接受的类型,但FORMDATA可是没有一个,这样的方法调用返回null。事实上,它看起来像它调用的valueOf尝试获取数据出来FORMDATA的序列化,但返回null。

I am also a Jersey newbie, but I think that the reason your post code does not work is that formData must be in one of the types accepted. I'm not totally sure on the difference between the type and the accept commands in this contexts, but I am pretty sure that formData must be of one of the types that your invocation builder supports. E.g. if you serialised formData as a JSON object and set type/accept to JSON then this code would work. As it is it is probably calling some bodymethodwriter to serialise it into an acceptable type but formData doesnt have one so the method call returns null. In fact, it looks like its calling ValueOf to try to obtain the data out of formData for serialisation, but that returns null.