Использование веб-службы 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. они написаны моей учетной записью для обработки нескольких вызовов веб-служб. Этот фрагмент кода просто чтобы дать вам мою идею.

Другие вопросы по тегам