jersey: получить ответ от веб-сервиса в виде файла json

У nni есть проблема с вызовом веб-службы с помощью клиента Джерси. Я успешно попробовал в качестве теста: "http://query.yahooapis.com/v1/public/yql?q=select%20item%20from%20weather.forecast%20where%20location%3D%2248907%22&format=json< /а>"

используя этот код:

Client client = Client.create();
WebResource webResource = client.resource("http://query.yahooapis.com/v1/public/yql?q=select%20item%20from%20weather.forecast%20where%20location%3D%2248907%22&format=json");
ClientResponse response = webResource.accept("application/json").get(ClientResponse.class);
if (response.getStatus() != 200) {
throw new RuntimeException("Failed : HTTP error code : " + response.getStatus());
}
String json = response.getEntity(String.class);
System.out.println(json);

но я не могу этого сделать, когда вызываю веб-службу Amazon: http://ws.amazon.com/widgets/q?Operation=GetResults&Keywords=cool&SearchIndex=All&multipageStart=0&InstanceId=0&multipageCount=10&TemplateId=8002&ServiceVersion=20070822&MarketPlace=США

Это потому, что я получаю файл json в качестве ответа?

Любая помощь, пожалуйста?


person user2762275    schedule 27.09.2013    source источник


Ответы (1)


После экспериментов с веб-службой Amazon с различными формами HTTP-запросов. Наконец-то я понял, что проблема связана со значением User-Agent, отправленным в заголовке HTTP.

По какой-то причине Amazon Rest Service не может обработать наличие символа точки . в заголовке HTTP в User-Agent.

При отправке HTTP-запроса с расширением . как показано ниже

GET http://ws.amazon.com/widgets/q?Operation=GetResults&Keywords=cool&SearchIndex=All&multipageStart=0&InstanceId=0&multipageCount=10&TemplateId=8002&ServiceVersion=20070822&MarketPlace=US HTTP/1.1
User-Agent: Java.
Host: ws.amazon.com
Connection: keep-alive

Amazon WS отправляет ответ HTTP без содержимого тела

HTTP/1.1 200 OK
Date: Fri, 27 Sep 2013 19:29:54 GMT
Server: Server
Content-Length: 0
Vary: Accept-Encoding,User-Agent
Cneonction: close
Content-Type: text/plain

Если . удален из Content-Type, тело ответа содержит подробный Json Content. Скорее всего, это похоже на проблему с реализацией Amazon Rest Service.

Вы можете изменить код следующим образом, чтобы увидеть содержимое Json и избавиться от проблемы.

 ClientResponse response = webResource.header("User-Agent", "SomeAgentNameWithoutPeriodChar").get(ClientResponse.class);
person Arun    schedule 27.09.2013
comment
Он также возвращает jsonp. Мне всегда приходилось фильтровать это перед разбором. - person Nathaniel Johnson; 27.09.2013
comment
Я настоятельно рекомендую Fiddler для тестирования этих сервисов. Если на Linux, используйте wireshark. - person Nathaniel Johnson; 27.09.2013
comment
в любом случае сделать это без Fiddler? - person user2762275; 27.09.2013