Использование веб-службы JSON из клиентского приложения Java
Я занимаюсь разработкой клиентского Java-приложения, обладающего небольшой функциональностью, которая требует получения данных от некоторых веб-сервисов, которые передаются в JSON (некоторые RESTful, некоторые нет). Нет JavaScript, нет веб-браузера, просто обычный JAR-файл, который будет работать локально с Swing для GUI.
Это не новая или уникальная проблема; несомненно, должны быть некоторые библиотеки с открытым исходным кодом, которые будут обрабатывать передачу данных JSON по HTTP. Я уже нашел некоторые, которые будут анализировать JSON, но у меня возникли проблемы с поиском тех, которые будут обрабатывать HTTP-связь для использования веб-службы JSON.
До сих пор я нашел Apache Axis2, который, по-видимому, может иметь хотя бы часть решения, но я не вижу достаточно документации, чтобы узнать, будет ли он делать то, что мне нужно, или как его использовать. Возможно, часть проблемы в том, что у меня нет опыта работы с веб-сервисами, поэтому я не могу найти решение, когда увижу его. Я надеюсь, что некоторые из вас могут указать мне правильное направление. Примеры будут полезны.
4 ответа
Apache HttpClient 4.0 - лучший в своем деле, и его легко освоить.
Если вы хотите проще, вы можете использовать HtmlUnit, который имитирует поведение браузеров, чтобы вы могли легко получить контент (и проанализировать его в Html, javascript и css, вы также можете выполнить код javascript для контента, чтобы вы могли, вероятно, анализировать файлы JSON с использованием JSON.parse или любые другие эквивалентные функции) любой страницы в Интернете.
поэтому для HtmlUnit приведен пример кода:
WebClient wc = new WebClient(BrowserVersion.FIREFOX_3_6);
HtmlPage page = wc.getPage("http://urlhere");
page.executeJavaScript("JS code here");
но это может быть довольно тяжелым для ваших требований, поэтому настоятельно рекомендуем использовать библиотеку HttpClient. Я уверен, что вы могли бы найти много библиотек JSON для Java, но вот одна для вас json-lib
Если вы хотите немного больше комфорта, чем иметь дело с URLConnection, посмотрите Resty для Java. Простой, легкий, но все же довольно новый.
http://beders.github.com/Resty
Вот пример для JSON:
Resty r = new Resty();
String name = r.json("http://ws.geonames.org/postalCodeLookupJSON?"+
"postalcode=66780&country=DE").get("postalcodes[0].placeName").toString();
Нет зависимостей. Одна маленькая банка, и вы готовы идти.
Я сделал это с помощью простой библиотеки Java JSON. Используйте библиотеку Google.
URL url = new URL("http://www.siteconsortium.com/services/hello.php");
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
JSONParser parser=new JSONParser();
Object object = parser.parse(in);
JSONArray array = (JSONArray) object;
JSONObject object2 = (JSONObject)array.get(0);
System.out.println(object2.get("hello"));
Если веб-сервис использует OAuth и токен доступа, вы не можете использовать приведенный выше пример.
Приятно видеть, что ваши веб-сервисы RESTful. Веб-службы RESTful довольно просты в разработке и использовании. Ну... вам не нужно предпринимать никаких дополнительных усилий для передачи данных JSON по сети... Данные в формате JSON включены в формате XML, встроены в заголовок HTTP. Следующий фрагмент кода поможет вам понять идею:
httpConnection = new HTTPConnectionManager(request);
HttpURLConnection httpURLConnection = httpConnection.connect();
int responseCode = httpURLConnection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
in = httpURLConnection.getInputStream();
int x;
StringBuilder stringBuilder = new StringBuilder();
while ((x = in.read()) != -1) {
stringBuilder.append((char) x);
}
XMLParser xmParser = new XMLParser();
....
....
}
В этом коде я получаю данные в формате XML от веб-сервисов. После получения данных в StringBuilder
объект, я разбираю XML. Таким же образом вы можете вызывать свои веб-сервисы с помощью этого кода и получать ваши данные JSON. Вы можете использовать доступные здесь API-интерфейсы javaJSON для извлечения данных из нотации JSON.
Надеюсь, код поможет вам...
PS: HTTPConnectionManager
, XMLParser
а также Request
(request
Объектные) классы не являются стандартными API. они написаны моей учетной записью для обработки нескольких вызовов веб-служб. Этот фрагмент кода просто чтобы дать вам мою идею.