NullPointerException возникает, когда ApacheHttpClientHandler используется с Jersey1.18 для запроса POST.

Мы используем REST API, используя Джерси 1.18. Мы хотим использовать Jakarta Commons HttpClient 3.1 в качестве серверной части при использовании REST API. Поэтому мы используем ApacheHttpClientHandler для получения объекта Jersey Client от HttpClient. Он отлично работает для запроса GET. Однако, когда мы делаем вызов POST-запроса, мы получаем исключение NullPointer Exception. Ниже приведен фрагмент кода с сообщением об ошибке:

/*Код для вызова POST, который с помощью ApacheHttpClientHandler выдает NPE */

import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.client.apache.ApacheHttpClientHandler;

HttpClient httpClient = new HttpClient();
ApacheHttpClientHandler clientHandler = new ApacheHttpClientHandler(httpClient);
String url = "http://petstore.swagger.wordnik.com:80/api/store/order";
WebResource.Builder builder = new Client(clientHandler).resource(url).accept("application/json").entity("{}", "application/json");
ClientResponse clientResponse = null;
try {
        clientResponse = builder.post(ClientResponse.class);
    } finally {
        if (clientResponse != null) {
            clientResponse.close();
        }
    }

System.out.println("Status: " + clientResponse.getStatus());

Ошибка, которую мы получаем:

Exception in thread "main" java.lang.NullPointerException code
at com.sun.jersey.api.client.RequestWriter$RequestEntityWriterImpl.<init>(RequestWriter.java:186)
at com.sun.jersey.api.client.RequestWriter.getRequestEntityWriter(RequestWriter.java:248)
at     com.sun.jersey.client.apache.DefaultApacheHttpMethodExecutor.executeMethod(DefaultApacheHttpMethodExecutor.java:121)
at     com.sun.jersey.client.apache.ApacheHttpClientHandler.handle(ApacheHttpClientHandler.java:175)
at com.sun.jersey.api.client.Client.handle(Client.java:652)
at com.sun.jersey.api.client.WebResource.handle(WebResource.java:682)
at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74)
at com.sun.jersey.api.client.WebResource$Builder.post(WebResource.java:560)

Если мы изменим создание клиента с new Client(clientHandler) на просто new Client(), то получим ожидаемый ответ 200.

Файлы jar, которые у нас есть в нашем пути к классам

  • Commons-httpclient-3.1.jar
  • Джерси-клиент-1.18.jar
  • Джерси-Apache-клиент-1.18.jar
  • Commons-регистрация-1.0.4.jar
  • Джерси-ядро-1.18.jar
  • общий кодек-1.2.jar

Кто-нибудь сталкивался с подобной проблемой и знает решение этой проблемы?


person user2095867    schedule 08.08.2014    source источник
comment
Сначала протестируйте с REST-клиентом в Mozilla или любым другим клиентом, например SOAP UI для POST, и проверьте, приходят результаты или нет.   -  person prashant thakre    schedule 11.08.2014
comment
API работает нормально при вызове через любой REST-клиент в Mozilla или даже с джерси-клиентом без ApacheClientHandler. Проблема возникает только тогда, когда мы используем ApacheClientHandler с клиентом Джерси.   -  person user2095867    schedule 12.08.2014


Ответы (1)