2013-09-27 4 views
0

У nni возникла проблема с вызовом веб-службы с использованием джерси-клиента. я успешно попробовал как тест с: «http://query.yahooapis.com/v1/public/yql?q=select%20item%20from%20weather.forecast%20where%20location%3D%2248907%22&format=json»Джерси: получить ответ от веб-службы как 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); 

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

это потому, что я получить json-файл в качестве ответа?

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

ответ

0

После эксперимента с веб-службой 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); 
+0

Неа, я ничего не получаю – user2762275

+0

Он также возвращает JSONP. Я всегда должен был отфильтровать это перед разбором. –

+0

Я очень рекомендую Fiddler для тестирования этих услуг. Если на linux, используйте wirehark. –

Смежные вопросы