Comments 30
Web-сервисы на Java
1. Класс сервиса:
2. Класс сервера:
3. Класс клиента:
Источник: archive.williamspublishing.com/cgi-bin/materials.cgi?isbn=978-5-8459-1482-8
По-сути, ничего сложного нет.
1. Класс сервиса:
package com.horstmann.corejava; import java.util.*; import javax.jws.*; /** * This class is the implementation for a Warehouse web service * @version 1.0 2007-10-09 * @author Cay Horstmann */ @WebService public class Warehouse { public Warehouse() { prices = new HashMap<String, Double>(); prices.put("Blackwell Toaster", 24.95); prices.put("ZapXpress Microwave Oven", 49.95); } public double getPrice(@WebParam(name="description") String description) { Double price = prices.get(description); return price == null ? 0 : price; } private Map<String, Double> prices; }
2. Класс сервера:
package com.horstmann.corejava; import javax.xml.ws.*; public class WarehouseServer { public static void main(String[] args) { Endpoint.publish("http://localhost:8080/WebServices/warehouse", new Warehouse()); } }
3. Класс клиента:
import java.rmi.*; import javax.naming.*; import com.horstmann.corejava.server.*; /** * The client for the warehouse program. * @version 1.0 2007-10-09 * @author Cay Horstmann */ public class WarehouseClient { public static void main(String[] args) throws NamingException, RemoteException { WarehouseService service = new WarehouseService(); Warehouse port = service.getPort(Warehouse.class); String descr = "Blackwell Toaster"; double price = port.getPrice(descr); System.out.println(descr + ": " + price); } }
Источник: archive.williamspublishing.com/cgi-bin/materials.cgi?isbn=978-5-8459-1482-8
По-сути, ничего сложного нет.
+7
А есть ли реализации WSDL (версия 1.x) клиентов (для PHP, Java) которые нормально понимают HTTP binding (REST)? Большинство с чем сталкивался нормально парсят только SOAP binding.
0
а это не оно, случаем? wso2.org/projects/wsf/php/features там много занятных либ есть очень, рекомендую посмотреть
+1
понял, увы, далеко не все, но было очень интересно.
надо разбираться.
надо разбираться.
+1
Как по мне, приведенные в статье примеры далеко не для начинающих. Возможно из-за использования фреймворков.
-1
WSDL, сгенерированный Zend'ом для более-менее развесистого сервера, просто неподъемен. Вы забыли, что SOAP еще обеспечивает более строгую типизацию и сильно удобен для сообщения между сервисами.
+1
Хм. Использование фреймворков в этой статье делает SOAP и REST концептуально неразличимыми для читателя.
0
> mikhailstadnik.com/ctws/currency.wsdl
А для WSDL файлика разве не должен отдаваться content-type application/xml или подобный?
А то, боюсь, не все клиенты смогут нормально его прочитать…
А для WSDL файлика разве не должен отдаваться content-type application/xml или подобный?
А то, боюсь, не все клиенты смогут нормально его прочитать…
+1
Zend_Rest выглядит действительно как RPC.
По моему REST URLдолжен выглядеть так: /rates/EUR-USD/2008-12-10/
* вызов просто /rates/ возвращает все доступные пары валют
* вызов /rates/EUR-USD/ возвращает все значения пары EUR-USD
По моему REST URLдолжен выглядеть так: /rates/EUR-USD/2008-12-10/
* вызов просто /rates/ возвращает все доступные пары валют
* вызов /rates/EUR-USD/ возвращает все значения пары EUR-USD
+3
А я не понял главного — для чего нужны все эти SOAP и XML-RPC :)
Уж не судите строго, а объясните подробнее, если не сложно.
Вот возьмём «склонятор» яндекса nano.yandex.ru/project/inflect/
Почему бы просто не сделать вот так
file_get_contents(«export.yandex.ru/inflect.xml?name=...»);
И потом разобрать пришедший xml?
Вот будет выглядеть реализация этого примера с помощью SOAP?
Уж не судите строго, а объясните подробнее, если не сложно.
Вот возьмём «склонятор» яндекса nano.yandex.ru/project/inflect/
Почему бы просто не сделать вот так
file_get_contents(«export.yandex.ru/inflect.xml?name=...»);
И потом разобрать пришедший xml?
Вот будет выглядеть реализация этого примера с помощью SOAP?
0
Посмотрите с другой стороны — предположите, что вам нужно сделать «склонятор» :)
Кроме того, современные инструменты позволяют не разбирать XML самому, если уж речь идет о клиенте.
Кроме того, современные инструменты позволяют не разбирать XML самому, если уж речь идет о клиенте.
0
Смотрю, но ничего не вижу :)
Я представляю себе задачу как простое получение параметра, формирование для него результата и его вывод в виде xml. Чтобы собрать и разобрать xml есть SimpleXML и т.п.
Т.е. я вижу тут xml как главного посредника, а зачем всё остальное… не мойму :)
Я представляю себе задачу как простое получение параметра, формирование для него результата и его вывод в виде xml. Чтобы собрать и разобрать xml есть SimpleXML и т.п.
Т.е. я вижу тут xml как главного посредника, а зачем всё остальное… не мойму :)
0
По сути вашего вопроса:
XML действительно посредник, но сам по себе XML — это формат без какой либо определенной структуры. А это значит что вам следует ее определять самому. И донести это до всех, кто захочет с вашей структурой работать.
А SOAP — это стандарт известный всем :) И многие языки УЖЕ имеют инструментарий по сборке и разбору структуры его XML (что в примерах к статье и показано).
А сам принцип о котором вы говорите — больше из концепции REST, которая именно так все и упрощает (получил параметр — отдал ресурс). В рамках веб — это всем понятно.
А сам SOAP больше завязан на теории ООП и удаленного вызова процедур (манипулирование с удаленными объектами, неизвестно на чем написанными).
XML действительно посредник, но сам по себе XML — это формат без какой либо определенной структуры. А это значит что вам следует ее определять самому. И донести это до всех, кто захочет с вашей структурой работать.
А SOAP — это стандарт известный всем :) И многие языки УЖЕ имеют инструментарий по сборке и разбору структуры его XML (что в примерах к статье и показано).
А сам принцип о котором вы говорите — больше из концепции REST, которая именно так все и упрощает (получил параметр — отдал ресурс). В рамках веб — это всем понятно.
А сам SOAP больше завязан на теории ООП и удаленного вызова процедур (манипулирование с удаленными объектами, неизвестно на чем написанными).
+1
SOAP по сути это стандарт, которого нужно придерживаться для того, чтобы Ваш сервис могли использовать клиенты, написаные на совершенно разных языках программирования и под различные платформы. Над SOAP есть множество стандартных настроек для решения типичных задач (authentication/reliable messaging/transactions/security tokens/etc), использование которых сделает ваш сервис совместимым с большим количеством клиентов.
В данном обзоре пропущена важная часть, связаная с веб-сервисами. Это WS-I Basic Profile — набор рекоммендаций и стандартов к SOAP, WSDL, UDDI для девелоперов веб-сервисов, предназначеная для того, чтобы увеличить interoperability(возможность взаимодействия\совместимость?) между приложениями.
Ну вообщем SOAP это стандартизированый XML c целым набором технологий, основная суть которых — повторюсь, interoperability.
В данном обзоре пропущена важная часть, связаная с веб-сервисами. Это WS-I Basic Profile — набор рекоммендаций и стандартов к SOAP, WSDL, UDDI для девелоперов веб-сервисов, предназначеная для того, чтобы увеличить interoperability(возможность взаимодействия\совместимость?) между приложениями.
Ну вообщем SOAP это стандартизированый XML c целым набором технологий, основная суть которых — повторюсь, interoperability.
+1
UFO just landed and posted this here
Очень хорошо, что этим занимаются люди. Я, в общем, никогда не писал вэб-сервисы на PHP, и даже наверное не планирую… но все-таки хорошо, что этим люди занимаются и показывают другим как это делать :)
0
Статья оказалась в тему, похоже в моей сфере веб-сервисам найдется применение. Но попытка сделать свой массо-габаритний макет на основе приведеных автором примеров не увенчалась успехом, пока. Пока-что основной трудностью для меня остается отладка (непонятно как обнаружить ошибки в сервере), код выполняется без ошибок, но ведет себя странно. Например, клиент выглядит так:
$client = new SoapClient('http://172.16.3.8/TestServer.wsdl');
$exist = $client->checkUser($_GET['login']);
var_dump($exist);
echo «REQUEST:\n». $client->__getLastRequest(). "\n";
echo «RESPONSE:\n». $client->__getLastResponse(). "\n";
var_dump($client->__getFunctions());
Выдает странное:
object(stdClass)[2]
REQUEST: RESPONSE:
array
0 => string 'checkUserResponse checkUser(checkUser $parameters)' (length=50)
Почему object(stdClass), почему запрос и ответ пустые?
Разбираюсь сам, но может кто подскажет направление, куда копать :)
$client = new SoapClient('http://172.16.3.8/TestServer.wsdl');
$exist = $client->checkUser($_GET['login']);
var_dump($exist);
echo «REQUEST:\n». $client->__getLastRequest(). "\n";
echo «RESPONSE:\n». $client->__getLastResponse(). "\n";
var_dump($client->__getFunctions());
Выдает странное:
object(stdClass)[2]
REQUEST: RESPONSE:
array
0 => string 'checkUserResponse checkUser(checkUser $parameters)' (length=50)
Почему object(stdClass), почему запрос и ответ пустые?
Разбираюсь сам, но может кто подскажет направление, куда копать :)
0
Я ошибаюсь, или здесь запросы вцикле?
Grabber::run() {
foreach…
}
( Grubber (models/Grabber.php) )
Grabber::run() {
foreach…
}
( Grubber (models/Grabber.php) )
0
Sign up to leave a comment.
Веб-сервисы в теории и на практике для начинающих