Мы используем 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
Кто-нибудь сталкивался с подобной проблемой и знает решение этой проблемы?