Рабочий каталог расположен в
Следующая технология, которая будет нами рассмотрена, появилась относительно недавно, однако уже получила достаточно широкое распространение, и по всей видимости, ее популярность будет все возрастать.
Web-сервисы - новое слово в технологии распределенных систем. Спецификация Open Net Environment (ONE) корпорации Sun Microsystems и инициатива . Net корпорации Microsoft обеспечивают инфраструктуры для написания и развертывания Web -сервисов. В настоящий момент имеется несколько определений Web -сервиса. Web -сервисом может быть любое приложение, имеющее доступ к Web, например, Web -страница с динамическим содержимым. В более узком смысле Web -сервис - это приложение, которое предоставляет открытый интерфейс, пригодный для использования другими приложениями в Web.
Спецификация ONE Sun требует, чтобы Web -сервисы были доступны через HTTP и другие Web -протоколы, чтобы дать возможность обмениваться информацией посредством XML -сообщений и чтобы их можно было найти через специальные сервисы - сервисы поиска. Для доступа к Web -сервисам разработан специальный протокол - Simple Object Access Protocol (SOAP),который представляет средства взаимодействия на базе XML для многих Web -сервисов. Web -сервисы особенно привлекательны тем, что могут обеспечить высокую степень совместимости между различными системами.
Гипотетический Web -сервис, разработанный в соответствии с архитектурой ONE Sun, может принимать форму, в которой реестр сервисов публикует описание Web -сервиса в виде документа Universal Description, Discovery and Integration (UDDI).
Огромный потенциал Web -сервисов определяется не технологией, примененной для их создания. HTTP, XML и другие протоколы, используемые Web -сервисами, не новы. Web -сервисов подразумевает, что разработчики могут быстро создавать большие приложения и более крупные Web -сервисы из меньших Web -сервисов. Спецификация Sun Open Net Environment описывает архитектуру для создания интеллектуальных Web-сервисов.Интеллектуальные Web -сервисы задействуют общее операционное окружение. Совместно используя контекст, интеллектуальные Web -сервисы могут выполнять стандартную аутентификацию для финансовых транзакций, предоставлять рекомендации и указания в зависимости от географического местоположения компаний, участвующих в
Для того чтобы создать приложение, являющееся Web -сервисом, необходимо применить целый ряд технологий.
Взаимосвязь этих технологий условно представлена на рис. 10.1.
(рис 10.1) Взаимосвязь технологийПо сути, Web -сервисы являются одним из вариантов реализации Web -сервисов, является отказ от бинарного XML -сообщений. Поскольку XML -сообщения представляют собой текстовые файлы, транспортный протокол передачи может быть самый различный - XML -сообщения можно передавать по HTTP -, SMTP -, FTP -протоколам, причем использование различных транспортных протоколов прозрачно для приложений.
Как уже говорилось, протокол, обеспечивающий возможность взаимодействия Web -сервисов, называется ( Simple Object ). Он определен на основе XML. обеспечивает взаимодействие распределенных систем, независимо от объектной модели или используемой платформы. Данные в рамках передаются в виде XML -документов особого формата. не навязывает какого-либо определенного транспортного протокола. Однако в реальных приложениях наиболее часто реализуется передача -сообщений по протоколу HTTP. Также широко распространено использование в качестве транспортного протокола SMTP, FTP и даже "чистого" TCP.
Итак, определяет механизм, с помощью которого Web -сервисы могут вызывать функции друг друга. В каком-то смысле работа этого протокола напоминает вызов удаленной процедуры - вызывающая сторона знает имя Web -сервиса, имя его метода, параметры, которые метод принимает, оформляет вызов этого метода в виде -сообщения и отсылает его Web -сервису.
Однако описанный подход годится лишь в том случае, если заранее известны "сигнатуры" методов, которые реализует Web -сервис. Но как быть, если это не так? Для решения этой проблемы в модель Web -сервиса введен дополнительный слой - слой описания интерфейсов сервисов. Этот слой представлен в виде описания .
Согласно определению W3C, " - формат XML для описания полностью описывает интерфейс Web -сервиса с внешним миром. Он предоставляет информацию об услугах, которые можно получить, воспользовавшись методами сервиса, и способах обращения к этим методам. Таким образом, в случае если сигнатура метода Web -сервиса точно не известна (например, она изменилась со временем), у целевого Web -сервиса может быть запрошено -описание - файл, в котором эта информация будет содержаться.
Следующим слоем технологии является сервис Universal Description, Discovery and Integration (UDDI).Эта технология предполагает ведение реестра Web -сервисов. Подключившись к этому реестру, потребитель сможет найти Web -сервисы, которые наилучшим образом подходят для решения его задач. Технология дает возможность поиска и публикации нужного сервиса, причем эти операции могут быть выполнены как человеком, так и другим Web -сервисом или специальной программой-клиентом. , в свою очередь, также представляет собой Web -сервис.
Таким образом, Web -сервисы являются еще одной реализацией системного XML ) и стандартных коммуникационных протоколов.
В настоящее время Web -сервисы являются очень активно продвигаемой технологией и позиционируются как средство решения целого ряда задач.
Следует отметить, что с их применением могут строиться и так называемые "стандартные" приложения, где в качестве Web -сервиса оформляется серверная часть.
Базовым протоколом, обеспечивающим взаимодействие в среде Web -сервисов, является протокол .
Протокол разработали корпорации IBM, Lotus Development Corporation, Microsoft, Develop-Mentor и Userland Software. Этот протокол основан на HTTP-XML. Он позволяет приложениям взаимодействовать между собой через Internet, используя для этого XML -документы, называемые сообщениями . Протокол совместим с любой объектной моделью, поскольку он включает только те функции и методы, которые абсолютно необходимы для формирования коммуникационной инфраструктуры.
Таким образом, является независимым от платформы и конкретных приложений, а для его реализации может применяться любой язык программирования. поддерживает практически любой транспортный протокол. также поддерживает любые методы кодирования данных, которые позволяют приложениям, основанным на , посылать в сообщениях информацию практически любого типа (например, изображения, объекты, документы и т.д.).
Сообщение содержит конверт, который описывает содержимое, предполагаемого содержит инструкции по обработке для приложений, которые принимают сообщение. Заголовок также может содержать информацию о маршрутизации. С помощью заголовка header поверх могут надстраиваться более сложные -сообщения содержит специфичные для приложения данные, предназначенные для предполагаемого
Технология Web -сервисов - очень серьезная технология в том смысле, что для того, чтобы ее продемонстрировать, необходимо выполнить достаточно много разного рода подготовительных действий.
Как и в других случаях, когда мы знакомились с новой технологией, вначале мы рассмотрим простой пример и на нем проиллюстрируем все основные особенности проектирования и реализации Web -сервисов, и лишь затем перейдем к реализации нашего приложения.
Web -сервисы для своего выполнения требуют определенной среды или сервера приложений. В настоящий момент имеется большое количество таких серверов, как коммерческих, так и общедоступных, обладающих большей или меньшей функциональностью. В приведенных ниже примерах используется один из таких серверов, разработанный фирмой Sun, - Sun Java System , который может быть загружен с сайта производителя. Соответственно, весь материал, относящийся к развертыванию и конфигурированию Web -сервисов, адаптирован именно для этого сервера приложений. Для других серверов процедуры, которые необходимо провести для выполнения этих действий, могут отличаться.
Инсталляция сервера приложений
Sun Java System поставляется в виде инсталляционного пакета, сформированного для инсталляции на основных используемых платформах.
Для наших целей вполне подойдет инсталляция с параметрами по умолчанию. Необходимо только обратить внимание на три параметра:
Web -сервис;Web -сервиса в сервере приложений нужны административные права.После установки Sun Java System может быть запущен с помощью командного файла asadmin (на платформе Windows этот командный файл называется asadmin.bat).
Корректность установки и запуска сервера можно проверить, обратившись по адресу http://localhost:8080 (в случае если обращение происходит с той же машины, на которой установлен сервер; в противном случае обращение будет выглядеть следующим образом: httр://<имя_машины_ на_которой_установлен_сервер>:8080).
Поскольку Sun Java System , кроме прочего, реализует функциональность Web - является HTTP, практически все серверы приложений обеспечивают обработку этого протокола
(рис 10.2) Стартовая страницаБолее содержательная информация может быть получена при обращении и регистрации в административной консоли (рис. 10.3).
(рис 10.3) Регистрация в административной консолиВ данном случае выделен пункт "Web Services", с которым мы будем в дальнейшем Sun Java System - сложный продукт с богатыми возможностями. В данном разделе будут описаны только те из них, которые используются при выполнении наших примеров Web -сервиса не зарегистрировано (их список пуст).
Убедившись, что сервер приложений установлен и запущен, мы можем приступать к реализации нашего первого Web -сервиса.
Установка необходимых приложений
Для первого примера мы воспользуемся кодом, поставляемым в составе пакета The Java Web Services Tutorial (он может быть загружен с сайта фирмы Sun ). Пакет представляет собой архив, содержащий развернутую документацию по разработке Web -сервисов и несколько примеров. Вот одним из этих примеров, называющимся helloservice, мы и воспользуемся в качестве иллюстрации.
Этот пример представляет собой реализацию простейшего Web -сервиса, который содержит единственный метод, принимающий и возвращающий значение типа String.Пример располагается в папке <tutorial.home> /examples/jaxws/helloservice, где <tutorial.home> - директория, в которую был установлен пакет The Java Web Services .
Прежде чем компилировать, устанавливать и выполнять пример, необходимо настроить некоторые параметры, которые определены в файле build.properties,лежащем в <tutorial.home>/examples/common.Определить нужно следующие параметры:
The Java Web Services Tutorial .В случае если установка сервера проводилась по умолчанию, никаких других изменений в этом файле делать не нужно. В случае если Sun Java System установлен в директории H:/Java/AppServer/,а The Java Web Services Tutorial - в директории H:/Java/wstutorial20_new/,файл build.properties будет иметь следующий вид (пример 10.1):
javaee.home=H:/Java/AppServer/
]avaee.tutorial.home= H:/Java/jwstutorial20_new/
admin.password.file=${javaee.tutorial.home}/exаmples/common/admin-
password.txt
admin.host=localhost
admin.user=admin
admin.port=4848
https.port=8181
domain.resources="domain.resources"
domain.resources.port=8080
# Database properties are in derby.properties
db.vendor=derby
Для того чтобы иметь возможность инсталлировать разработанный Web -сервис в сервер приложений, необходимо также в файле admin-password.txt (находящемся в <tutorial.home>/examples/common/) указать пароль для учетной записи администратора.
Исходный код Web-сервиса
После того, как указанные настройки будут закончены, можно приступить непосредственно к примеру.
Файл с исходным кодом Web -сервиса располагается в директории src, называется Hello.java и имеет следующий вид (пример 10.2):
1 // Hello.java
2 package helloservice.endpoint;
3
4 import javax.jws.WebMethod;
5 import javax.jws.WebService;
6
7 @WebService()
8 public class Hello {
9 private String message = new String("Hello, ");
10
11 @WebMethod()
12 public String sayHello(String name) {
13 return message + name + ".";
14 }
15 }
Первое, что обращает на себя внимание, - удивительная краткость написанного кода. Но не стоит обольщаться: дело в том, что технология разработки Web -сервисов, которую мы будем использовать, просто скрывает от разработчика большую часть работы по реализации Web -сервиса. Фактически, все, что должен сделать разработчик, - реализовать код самих вызываемых методов; абсолютно всю работу по реализации механизмов, позволяющих вызывать эти методы удаленно, берет на себя используемая нами технология.
Итак, рассмотрим пример подробнее.
Во-первых, определяется пакет, в который будет помещен класс Hello, пакет называется helloservice. (строка 2). Затем импортируются две аннотации - javax.jws.WebMethod (строка 4) и javax.jws.WebService (строка 5). Поскольку механизм аннотаций является в java относительно новым, видимо имеет смысл сказать о нем несколько слов.
Аннотации java предоставляют разработчику механизм, позволяющий включать в код некие метаданные.Метаданные - это дополнительная информация, которая может быть добавлена к классам, интерфейсам, полям и методам - так называемые "данные о данных". Метаданные доступны как на этапе компиляции, так и во время исполнения через механизм рефлексии. Вот эти данные, которые мы можем добавить к классам, интерфейсам, полям и методам, и называются аннотациями.
Для аннотации вводится понятие области видимости, или времени жизни. Область видимости выбирается из перечисления java.lang.annotation. RetentionPolicy и может принимать следующие значения:
SOURCE - аннотация будет удалена компилятором;CLASS - аннотация будет записана в байт-код класса, но не будет использоваться Java -машиной;RUNTIME - аннотация будет записана в байт-код и будет доступна во время исполнения через механизм рефлексии.Одна из замечательных возможностей, которую открывает перед разработчиками механизм аннотаций, заключается в том, что с их помощью могут быть построены средства автоматического внесения в код нужной функциональности.
В нашем конкретном примере аннотации используются именно с этой целью. Ориентируясь на них, специальная утилита wsgen генерирует
Первая аннотация, которая используется применительно ко всему классу, - аннотация WebService (строка 7). Эта аннотация нужна для того чтобы указать, что данный класс в дальнейшем будет опубликован в качестве Web -сервиса. Есть некоторые ограничения, связанные с применением этой аннотации. Методы, которые предполагается опубликовать, должны быть аннотированы как javax.jws.WebMethod,они должны быть объявлены как static или final.В качестве принимаемых и возвращаемых параметров должны использоваться параметры совместимых с JAX-B типов (все Web -сервис, не может быть объявлен как final,кроме того, он не должен быть абстрактным, должен иметь публичный конструктор по умолчанию и не переопределять метод finalize.
Все эти ограничения связаны с тем, что разрабатываемый класс будет выполняться не самостоятельно, а будет, фактически, встроен в сервер, следовательно, сервер должен полностью контролировать процесс его создания (загрузки) и уничтожения. В случае если при загрузке и/или выгрузке объекта необходимо предпринимать какие-то дополнительные действия, могут применяться аннотации javax.annotation.PostConstruct и javax.annotation.PreDestroy.Метод, аннотированный как PostConstruct,будет вызван сервером приложений до того, как объекту первый раз будет передан запрос клиента. Метод, аннотированный как PreDestroy,вызывается перед уничтожением объекта.
Рассматриваемый класс Hello удовлетворяет всем указанным ограничениям. Кроме того, он объявляет единственный метод, аннотированный как WebMethod (строка 11), который принимает параметр типа String и возвращает его же с присоединенной в начале константной строкой.
Собственно, на этом разработка Web -сервиса заканчивается. Следующее, что необходимо сделать, - откомпилировать его, пропустить через утилиту wsgen для генерации вспомогательных классов, создать war-file,содержащий в себе откомпилированное приложение и необходимые ресурсы, и затем разместить и зарегистрировать его на сервере приложений.
В комплекте с примерами, поставляемыми в пакете The Java Web Services Tutorial,поставляются также скрипты для их компиляции. Эти скрипты предназначены для специального инструментального средства компиляции, которое называется Ant является популярнейшим средством в сообществе разработчиков Java. Специально разработанный с учетом возможности использования на различных платформах, он идеально подходит для Java. Ant является свободно распространяемым средством и может быть загружен с сайта http://ant.apache.org/.
Разработчики примеров для пакета The Java Web Services Tutorial постарались на славу, и теперь для компиляции и установки приложения необходимо выполнить лишь несколько простых команд. Мы воспользуемся этим обстоятельством, а затем подробно рассмотрим, что стоит за каждой из этих простых команд и какие действия при этом выполняются.
Компиляция и инсталляция на сервере приложений
Итак, первое, что предстоит сделать, - откомпилировать приложение. Для компиляции в настройках сборки определена специальная цель (target) - build.
Набрав в командной строке команду asant build (asant - вызов командного файла, запускающего ant, build - имя цели, которую он должен выполнить), получим следующий вывод:
Buildfile: build.xml javaee-home-test: init: prepare: [echo] Creating the required directories.... [mkdir] Created dir: H:\Java\jwstutorial20_new\examples\ jaxws\helloserviceuild compile-service: [echo] Compiling the server-side source code ... [javac] Compiling 1 source file to H:\Java\ jwstutorial20_new\examples\jaxws\helloserviceuild [wsgen] command line: wsimport -classpath H:\Java\AppServer\lib\activation.jar; H:\Java\AppServer\lib\admin-cli.jar; H:\Java\AppServer\lib\appserv-admin.jar; H:\Java\AppServer\lib\appserv-cmp.jar; H:\Java\AppServer\lib\appserv-deployment-client.jar; H:\Java\AppServer\lib\appserv-ext.jar; H:\Java\AppServer\lib\appserv-jstl.jar; H:\Java\AppServer\lib\appserv-jwsacc.jar; H:\Java\AppServer\lib\appserv-launch.jar; H:\Java\AppServer\lib\appserv-rt.jar; H:\Java\AppServer\lib\appserv-tags.jar; H:\Java\AppServer\lib\appserv-upgrade.jar; H:\Java\AppServer\lib\appserv-ws.jar; H:\Java\AppServer\lib\com-sun-commons-launcher.jar; H:\Java\AppServer\lib\com-sun-commons-logging.jar; H:\Java\AppServer\lib\dbschema.jar; H:\Java\AppServer\lib\j2ee-svc.jar; H:\Java\AppServer\lib\j2ee.jar; H:\Java\AppServer\lib\javaee.jar; H:\Java\AppServer\lib\jhall.jar; H:\Java\AppServer\lib\jmxremote_optional.jar; H:\Java\AppServer\lib\jsf-impl.jar; H:\Java\AppServer\lib\mail.jar; H:\Java\AppServer\lib\sun-appserv-ant.jar; H:\Java\AppServer\lib\toplink-essentials-agent.jar; H:\Java\AppServer\lib\toplink-essentials.jar; H:\Java\AppServer\jdk\lib\tools.jar; H:\Java\jwstutorial20_new\examples\jaxws\helloserviceuild -d H:\Java\jwstutorial20_new\examples\jaxws\helloservice\ build -keep -s H:\Java\jwstutorial20_new\examples\jaxws\helloservice\ build -verbose helloservice.endpoint.Hello [wsgen] Note: ap round: 1 [wsgen] [ProcessedMethods Class: helloservice.endpoint.Hello] [wsgen] [should process method: sayHello hasWebMethods: true ] [wsgen] [endpointReferencesInterface: false] [wsgen] [declaring class has WebSevice: true] [wsgen] [returning: true] [wsgen] [WrapperGen - method: sayHello(java.lang.String)] [wsgen] [method.getDeclaringType(): helloservice.endpoint.Hello] [wsgen] [requestWrapper: helloservice.endpoint.jaxws.SayHello] [wsgen] [ProcessedMethods Class: java.lang.Object] [wsgen] helloservice\endpoint\jaxws\SayHello.java [wsgen] helloservice\endpoint\jaxws\SayHelloResponse.java [wsgen] Note: ap round: 2 [wsgen] [completing model for endpoint: helloservice.endpoint.Hello] [wsgen] [ProcessedMethods Class: helloservice.endpoint.Hello] [wsgen] [should process method: sayHello hasWebMethods: true ] [wsgen] [endpointReferencesInterface: false] [wsgen] [declaring class has WebSevice: true] [wsgen] [returning: true] [wsgen] [WebServiceReferenceCollector - method: sayHello(java.lang.String)] [wsgen] [ProcessedMethods Class: java.lang.Object] build-service: build: BUILD SUCCESSFUL Total time: 9 seconds
Поскольку мы намеренно включили опцию вывода отладочной информации для ant,вывод получился довольно обширный.
Первое, что делается для компиляции программы, - создается специальная директория build,в которую будут помещены откомпилированные модули. Она создается в , который компилирует наш класс Hello.java,а результат компиляции кладет в директорию build.Поскольку класс Hello определен в пакете helloservice.endpoint,в директории build будет создана соответствующая система каталогов и файл Hello.class будет помещен в каталог ./build/ helloservice/endpoint.
Следующим шагом вызывается утилита wsgen,которая формирует вспомогательные классы. По умолчанию исходные коды этих классов после компиляции уничтожаются, однако, выставив опцию keep=true (эта и другие опции могут быть установлены в файле build.properties),исходные коды можно сохранить. Помещаются они в пакет jaxws того же пакета, которому принадлежит и класс. Соответственно, для нашего примера исходные файлы (а затем и откомпилированные классы) будут располагаться в директории ./build/ helloservice/endpoint/jaxws.
После того как утилита wsgen отработала, мы имеем откомпилированный пакет helloservice.endpoint.jaxws,содержащий необходимые вспомогательные классы. На этом шаге компиляция нашего Web -сервиса закончена. Следующим этапом необходимо подготовить модуль развертывания. В нашем случае это делается с помощью команды:
asant create-war
Вывод получаем следующий:
Buildfile: build.xml prepare-assemble: [echo] Creating the assemble directory.... [mkdir] Created dir: H:\Java\jwstutorial20_new\examples\ jaxws\helloservice\assemble [mkdir] Created dir: H:\Java\jwstutorial20_new\examples\ jaxws\helloservice\assemble\war create-war: [echo] Creating the WAR ... [war] Building war: H:\Java\jwstutorial20_new\examples\ jaxws\helloservice\assemble\war\hello-jaxws.war BUILD SUCCESSFUL Total time: 3 seconds
Создается отдельный каталог assemble,в нем создается каталог war, в котором формируется файл hello-jaxws.war.Этот файл представляет собой архив, в который помещены откомпилированные файлы нашего приложения и некоторые вспомогательные файлы. Теперь у нас полностью готов модуль развертывания, который мы можем инсталлировать в сервере приложений. Инсталляция может быть выполнена командой:
asant deploy
Результат выполнения команды следующий:
Buildfile: build.xml deploy: admin_command_common: [echo] Doing admin task deploy assemble/war/hello-jaxws.war [sun-appserv-admin] Executing: deploy --port 4848 --host localhost --passwordfile "H:\Java\jwstutorial20_new\examples\ common\admin-password.txt" --user admin assemble/war/ hello-jaxws.war [sun-appserv-admin] Command deploy executed successfully. BUILD SUCCESSFUL Total time: 43 seconds
Чтобы убедиться в том, что инсталляция приложения прошла успешно, можно воспользоваться консолью администратора:
(рис 10.4) Проверка инсталляции приложенияВ процессе инсталляции, кроме прочего, был сгенерирован -файл, описывающий установленный Web -сервис. Как уже говорилось, этот файл содержит полное описание Web -сервиса, включая названия его методов, а также количество и типы передаваемых и возвращаемых параметров. Этот файл является важной составляющей частью технологии, поскольку он позволяет строить приложения, осуществляющие динамические вызовы методов Web -сервисов. Кроме того, этот файл может быть использован для автоматической генерации вспомогательных классов (классов- proxy ) для обращения к Web -сервису.
-файл для нашего Web -сервиса может быть получен по адресу http://localhost:8080/helloservice/hello?wsdl - пример 10.3.
<?xml version="1.0" encoding="UTF-8" ?>
- <definitions xmlns:tns="http://endpoint.helloservice/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns="http://schemas.xmlsoap.org/wsdl/"
targetNamespace="http://endpoint.helloservice/"
name="HelloService">
- <types>
- <xsd:schema>
<xsd:import namespace="http://endpoint.helloservice/"
schemaLocation=
"http://localhost:8080/helloservice/hello?xsd=1" />
</xsd:schema>
</types>
- <message name="sayHello">
<part element="tns:sayHello" name="parameters" />
</message>
- <message name="sayHelloResponse">
<part element="tns:sayHelloResponse"
name="parameters" />
</message>
- <portType name="Hello">
- <operation name="sayHello">
<input message="tns:sayHello" />
<output message="tns:sayHelloResponse" />
</operation>
</portType>
- <binding type="tns:Hello"
name="HelloPortBinding">
<soap:binding style="document"
transport= "http://schemas.xmlsoap.org/soap/http" />
- <operation name="sayHello">
<soap:operation soapAction="" />
- <input>
<soap:body use="literal" />
</input>
- <output>
<soap:body use="literal" />
</output>
</operation>
</binding>
- <service name="HelloService">
- <port binding="tns:HelloPortBinding"
name="HelloPort">
<soap:address location="http://localhost:8080/helloservice/
hello" />
</port>
</service>
</definitions>
Тестирование Web-сервиса
Итак, наш Web -сервис успешно инсталлирован. Осталось только убедиться в том, что он действительно работает. Чуть позже мы напишем специальное приложение-клиент, которое будет обращаться к нашему Web -сервису, а пока воспользуемся средствами, предоставляемыми нам Sun Java System Application Server.Дело в том, что этот сервер приложений способен самостоятельно динамически выстроить среду для вызова методов инсталлированных в нем Web -сервисов. Всей необходимой информацией, а именно: имена публикуемых методов, количество и тип принимаемых и возвращаемых методами параметров - он обладает.
(рис 10.5) Описание Web-сервиса в административной консолиДля того чтобы воспользоваться указанной возможностью, нужно выбрать нужный нам сервис в списке сервисов (в правой части окна браузера) и нажать кнопку "Test" (рис. 10.5).
(рис 10.6) Тестирование Web-сервисаОткроется новое окно браузера (рис. 10.6), в котором отобразится динамически построенная сервером страница. На этой странице перечислены все опубликованные методы Web -сервиса (в нашем случае - один метод sayHello) и реализован интерфейс для их вызова. Если ввести в соответствующее поле строку и нажать кнопку - вызовется метод Web -сервиса и введенное значение будет передано ему в качестве параметра. Кроме всего прочего, на результирующей странице отобразятся -сообщения, соответственно, отправленные Web -сервису и пришедшие от него в качестве ответа.
Результирующая страница будет иметь следующий вид (пример. 10.4).
На странице (пример. 10.4) видны значения и типы переданных параметров, ответ, который возвратил метод Web -сервиса, - как и ожидалось, ответ представляет собой строку "Hello, Web-service test", - а также отправленный и полученный пакеты.
Таким образом, разработанный нами Web -сервис успешно инсталлирован в сервере приложений и может обрабатывать запросы клиентов, в чем мы убедились, использовав тестовое окружение, предоставляемое сервером приложений.
sayHello Method invocation Method parameter(s) Type Value java.lang.String Web-service test Method returned java.lang.String : "Hello, Web-service test." SOAP Request <?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv= "http://schemas.xmlso-ap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns1="http://endpoint.helloservice/"> <soapenv:Body> <ns1:sayHello> <arg0>Web-service test</arg0> SOAP Response <?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/ soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns1="http://endpoint.helloservice/"> <soapenv:Body> <ns1:sayHelloResponse> <return>Hello, Web-service test.</return> </ns1:sayHelloResponse> </soapenv:Body> </soapenv:Envelope> </ns1:sayHello> </soapenv:Body> </soapenv:Envelope>
Рабочий каталог расположен в
Следующая технология, которая будет нами рассмотрена, появилась относительно недавно, однако уже получила достаточно широкое распространение, и по всей видимости, ее популярность будет все возрастать.
Web-сервисы - новое слово в технологии распределенных систем. Спецификация Open Net Environment (ONE) корпорации Sun Microsystems и инициатива . Net корпорации Microsoft обеспечивают инфраструктуры для написания и развертывания Web -сервисов. В настоящий момент имеется несколько определений Web -сервиса. Web -сервисом может быть любое приложение, имеющее доступ к Web, например, Web -страница с динамическим содержимым. В более узком смысле Web -сервис - это приложение, которое предоставляет открытый интерфейс, пригодный для использования другими приложениями в Web.
Спецификация ONE Sun требует, чтобы Web -сервисы были доступны через HTTP и другие Web -протоколы, чтобы дать возможность обмениваться информацией посредством XML -сообщений и чтобы их можно было найти через специальные сервисы - сервисы поиска. Для доступа к Web -сервисам разработан специальный протокол - Simple Object Access Protocol (SOAP),который представляет средства взаимодействия на базе XML для многих Web -сервисов. Web -сервисы особенно привлекательны тем, что могут обеспечить высокую степень совместимости между различными системами.
Гипотетический Web -сервис, разработанный в соответствии с архитектурой ONE Sun, может принимать форму, в которой реестр сервисов публикует описание Web -сервиса в виде документа Universal Description, Discovery and Integration (UDDI).
Огромный потенциал Web -сервисов определяется не технологией, примененной для их создания. HTTP, XML и другие протоколы, используемые Web -сервисами, не новы. Web -сервисов подразумевает, что разработчики могут быстро создавать большие приложения и более крупные Web -сервисы из меньших Web -сервисов. Спецификация Sun Open Net Environment описывает архитектуру для создания интеллектуальных Web-сервисов.Интеллектуальные Web -сервисы задействуют общее операционное окружение. Совместно используя контекст, интеллектуальные Web -сервисы могут выполнять стандартную аутентификацию для финансовых транзакций, предоставлять рекомендации и указания в зависимости от географического местоположения компаний, участвующих в
Для того чтобы создать приложение, являющееся Web -сервисом, необходимо применить целый ряд технологий.
Взаимосвязь этих технологий условно представлена на рис. 10.1.
(рис 10.1) Взаимосвязь технологийПо сути, Web -сервисы являются одним из вариантов реализации Web -сервисов, является отказ от бинарного XML -сообщений. Поскольку XML -сообщения представляют собой текстовые файлы, транспортный протокол передачи может быть самый различный - XML -сообщения можно передавать по HTTP -, SMTP -, FTP -протоколам, причем использование различных транспортных протоколов прозрачно для приложений.
Как уже говорилось, протокол, обеспечивающий возможность взаимодействия Web -сервисов, называется ( Simple Object ). Он определен на основе XML. обеспечивает взаимодействие распределенных систем, независимо от объектной модели или используемой платформы. Данные в рамках передаются в виде XML -документов особого формата. не навязывает какого-либо определенного транспортного протокола. Однако в реальных приложениях наиболее часто реализуется передача -сообщений по протоколу HTTP. Также широко распространено использование в качестве транспортного протокола SMTP, FTP и даже "чистого" TCP.
Итак, определяет механизм, с помощью которого Web -сервисы могут вызывать функции друг друга. В каком-то смысле работа этого протокола напоминает вызов удаленной процедуры - вызывающая сторона знает имя Web -сервиса, имя его метода, параметры, которые метод принимает, оформляет вызов этого метода в виде -сообщения и отсылает его Web -сервису.
Однако описанный подход годится лишь в том случае, если заранее известны "сигнатуры" методов, которые реализует Web -сервис. Но как быть, если это не так? Для решения этой проблемы в модель Web -сервиса введен дополнительный слой - слой описания интерфейсов сервисов. Этот слой представлен в виде описания .
Согласно определению W3C, " - формат XML для описания полностью описывает интерфейс Web -сервиса с внешним миром. Он предоставляет информацию об услугах, которые можно получить, воспользовавшись методами сервиса, и способах обращения к этим методам. Таким образом, в случае если сигнатура метода Web -сервиса точно не известна (например, она изменилась со временем), у целевого Web -сервиса может быть запрошено -описание - файл, в котором эта информация будет содержаться.
Следующим слоем технологии является сервис Universal Description, Discovery and Integration (UDDI).Эта технология предполагает ведение реестра Web -сервисов. Подключившись к этому реестру, потребитель сможет найти Web -сервисы, которые наилучшим образом подходят для решения его задач. Технология дает возможность поиска и публикации нужного сервиса, причем эти операции могут быть выполнены как человеком, так и другим Web -сервисом или специальной программой-клиентом. , в свою очередь, также представляет собой Web -сервис.
Таким образом, Web -сервисы являются еще одной реализацией системного XML ) и стандартных коммуникационных протоколов.
В настоящее время Web -сервисы являются очень активно продвигаемой технологией и позиционируются как средство решения целого ряда задач.
Следует отметить, что с их применением могут строиться и так называемые "стандартные" приложения, где в качестве Web -сервиса оформляется серверная часть.
Базовым протоколом, обеспечивающим взаимодействие в среде Web -сервисов, является протокол .
Протокол разработали корпорации IBM, Lotus Development Corporation, Microsoft, Develop-Mentor и Userland Software. Этот протокол основан на HTTP-XML. Он позволяет приложениям взаимодействовать между собой через Internet, используя для этого XML -документы, называемые сообщениями . Протокол совместим с любой объектной моделью, поскольку он включает только те функции и методы, которые абсолютно необходимы для формирования коммуникационной инфраструктуры.
Таким образом, является независимым от платформы и конкретных приложений, а для его реализации может применяться любой язык программирования. поддерживает практически любой транспортный протокол. также поддерживает любые методы кодирования данных, которые позволяют приложениям, основанным на , посылать в сообщениях информацию практически любого типа (например, изображения, объекты, документы и т.д.).
Сообщение содержит конверт, который описывает содержимое, предполагаемого содержит инструкции по обработке для приложений, которые принимают сообщение. Заголовок также может содержать информацию о маршрутизации. С помощью заголовка header поверх могут надстраиваться более сложные -сообщения содержит специфичные для приложения данные, предназначенные для предполагаемого
Технология Web -сервисов - очень серьезная технология в том смысле, что для того, чтобы ее продемонстрировать, необходимо выполнить достаточно много разного рода подготовительных действий.
Как и в других случаях, когда мы знакомились с новой технологией, вначале мы рассмотрим простой пример и на нем проиллюстрируем все основные особенности проектирования и реализации Web -сервисов, и лишь затем перейдем к реализации нашего приложения.
Web -сервисы для своего выполнения требуют определенной среды или сервера приложений. В настоящий момент имеется большое количество таких серверов, как коммерческих, так и общедоступных, обладающих большей или меньшей функциональностью. В приведенных ниже примерах используется один из таких серверов, разработанный фирмой Sun, - Sun Java System , который может быть загружен с сайта производителя. Соответственно, весь материал, относящийся к развертыванию и конфигурированию Web -сервисов, адаптирован именно для этого сервера приложений. Для других серверов процедуры, которые необходимо провести для выполнения этих действий, могут отличаться.
Инсталляция сервера приложений
Sun Java System поставляется в виде инсталляционного пакета, сформированного для инсталляции на основных используемых платформах.
Для наших целей вполне подойдет инсталляция с параметрами по умолчанию. Необходимо только обратить внимание на три параметра:
Web -сервис;Web -сервиса в сервере приложений нужны административные права.После установки Sun Java System может быть запущен с помощью командного файла asadmin (на платформе Windows этот командный файл называется asadmin.bat).
Корректность установки и запуска сервера можно проверить, обратившись по адресу http://localhost:8080 (в случае если обращение происходит с той же машины, на которой установлен сервер; в противном случае обращение будет выглядеть следующим образом: httр://<имя_машины_ на_которой_установлен_сервер>:8080).
Поскольку Sun Java System , кроме прочего, реализует функциональность Web - является HTTP, практически все серверы приложений обеспечивают обработку этого протокола
(рис 10.2) Стартовая страницаБолее содержательная информация может быть получена при обращении и регистрации в административной консоли (рис. 10.3).
(рис 10.3) Регистрация в административной консолиВ данном случае выделен пункт "Web Services", с которым мы будем в дальнейшем Sun Java System - сложный продукт с богатыми возможностями. В данном разделе будут описаны только те из них, которые используются при выполнении наших примеров Web -сервиса не зарегистрировано (их список пуст).
Убедившись, что сервер приложений установлен и запущен, мы можем приступать к реализации нашего первого Web -сервиса.
Установка необходимых приложений
Для первого примера мы воспользуемся кодом, поставляемым в составе пакета The Java Web Services Tutorial (он может быть загружен с сайта фирмы Sun ). Пакет представляет собой архив, содержащий развернутую документацию по разработке Web -сервисов и несколько примеров. Вот одним из этих примеров, называющимся helloservice, мы и воспользуемся в качестве иллюстрации.
Этот пример представляет собой реализацию простейшего Web -сервиса, который содержит единственный метод, принимающий и возвращающий значение типа String.Пример располагается в папке <tutorial.home> /examples/jaxws/helloservice, где <tutorial.home> - директория, в которую был установлен пакет The Java Web Services .
Прежде чем компилировать, устанавливать и выполнять пример, необходимо настроить некоторые параметры, которые определены в файле build.properties,лежащем в <tutorial.home>/examples/common.Определить нужно следующие параметры:
The Java Web Services Tutorial .В случае если установка сервера проводилась по умолчанию, никаких других изменений в этом файле делать не нужно. В случае если Sun Java System установлен в директории H:/Java/AppServer/,а The Java Web Services Tutorial - в директории H:/Java/wstutorial20_new/,файл build.properties будет иметь следующий вид (пример 10.1):
javaee.home=H:/Java/AppServer/
]avaee.tutorial.home= H:/Java/jwstutorial20_new/
admin.password.file=${javaee.tutorial.home}/exаmples/common/admin-
password.txt
admin.host=localhost
admin.user=admin
admin.port=4848
https.port=8181
domain.resources="domain.resources"
domain.resources.port=8080
# Database properties are in derby.properties
db.vendor=derby
Для того чтобы иметь возможность инсталлировать разработанный Web -сервис в сервер приложений, необходимо также в файле admin-password.txt (находящемся в <tutorial.home>/examples/common/) указать пароль для учетной записи администратора.
Исходный код Web-сервиса
После того, как указанные настройки будут закончены, можно приступить непосредственно к примеру.
Файл с исходным кодом Web -сервиса располагается в директории src, называется Hello.java и имеет следующий вид (пример 10.2):
1 // Hello.java
2 package helloservice.endpoint;
3
4 import javax.jws.WebMethod;
5 import javax.jws.WebService;
6
7 @WebService()
8 public class Hello {
9 private String message = new String("Hello, ");
10
11 @WebMethod()
12 public String sayHello(String name) {
13 return message + name + ".";
14 }
15 }
Первое, что обращает на себя внимание, - удивительная краткость написанного кода. Но не стоит обольщаться: дело в том, что технология разработки Web -сервисов, которую мы будем использовать, просто скрывает от разработчика большую часть работы по реализации Web -сервиса. Фактически, все, что должен сделать разработчик, - реализовать код самих вызываемых методов; абсолютно всю работу по реализации механизмов, позволяющих вызывать эти методы удаленно, берет на себя используемая нами технология.
Итак, рассмотрим пример подробнее.
Во-первых, определяется пакет, в который будет помещен класс Hello, пакет называется helloservice. (строка 2). Затем импортируются две аннотации - javax.jws.WebMethod (строка 4) и javax.jws.WebService (строка 5). Поскольку механизм аннотаций является в java относительно новым, видимо имеет смысл сказать о нем несколько слов.
Аннотации java предоставляют разработчику механизм, позволяющий включать в код некие метаданные.Метаданные - это дополнительная информация, которая может быть добавлена к классам, интерфейсам, полям и методам - так называемые "данные о данных". Метаданные доступны как на этапе компиляции, так и во время исполнения через механизм рефлексии. Вот эти данные, которые мы можем добавить к классам, интерфейсам, полям и методам, и называются аннотациями.
Для аннотации вводится понятие области видимости, или времени жизни. Область видимости выбирается из перечисления java.lang.annotation. RetentionPolicy и может принимать следующие значения:
SOURCE - аннотация будет удалена компилятором;CLASS - аннотация будет записана в байт-код класса, но не будет использоваться Java -машиной;RUNTIME - аннотация будет записана в байт-код и будет доступна во время исполнения через механизм рефлексии.Одна из замечательных возможностей, которую открывает перед разработчиками механизм аннотаций, заключается в том, что с их помощью могут быть построены средства автоматического внесения в код нужной функциональности.
В нашем конкретном примере аннотации используются именно с этой целью. Ориентируясь на них, специальная утилита wsgen генерирует
Первая аннотация, которая используется применительно ко всему классу, - аннотация WebService (строка 7). Эта аннотация нужна для того чтобы указать, что данный класс в дальнейшем будет опубликован в качестве Web -сервиса. Есть некоторые ограничения, связанные с применением этой аннотации. Методы, которые предполагается опубликовать, должны быть аннотированы как javax.jws.WebMethod,они должны быть объявлены как static или final.В качестве принимаемых и возвращаемых параметров должны использоваться параметры совместимых с JAX-B типов (все Web -сервис, не может быть объявлен как final,кроме того, он не должен быть абстрактным, должен иметь публичный конструктор по умолчанию и не переопределять метод finalize.
Все эти ограничения связаны с тем, что разрабатываемый класс будет выполняться не самостоятельно, а будет, фактически, встроен в сервер, следовательно, сервер должен полностью контролировать процесс его создания (загрузки) и уничтожения. В случае если при загрузке и/или выгрузке объекта необходимо предпринимать какие-то дополнительные действия, могут применяться аннотации javax.annotation.PostConstruct и javax.annotation.PreDestroy.Метод, аннотированный как PostConstruct,будет вызван сервером приложений до того, как объекту первый раз будет передан запрос клиента. Метод, аннотированный как PreDestroy,вызывается перед уничтожением объекта.
Рассматриваемый класс Hello удовлетворяет всем указанным ограничениям. Кроме того, он объявляет единственный метод, аннотированный как WebMethod (строка 11), который принимает параметр типа String и возвращает его же с присоединенной в начале константной строкой.
Собственно, на этом разработка Web -сервиса заканчивается. Следующее, что необходимо сделать, - откомпилировать его, пропустить через утилиту wsgen для генерации вспомогательных классов, создать war-file,содержащий в себе откомпилированное приложение и необходимые ресурсы, и затем разместить и зарегистрировать его на сервере приложений.
В комплекте с примерами, поставляемыми в пакете The Java Web Services Tutorial,поставляются также скрипты для их компиляции. Эти скрипты предназначены для специального инструментального средства компиляции, которое называется Ant является популярнейшим средством в сообществе разработчиков Java. Специально разработанный с учетом возможности использования на различных платформах, он идеально подходит для Java. Ant является свободно распространяемым средством и может быть загружен с сайта http://ant.apache.org/.
Разработчики примеров для пакета The Java Web Services Tutorial постарались на славу, и теперь для компиляции и установки приложения необходимо выполнить лишь несколько простых команд. Мы воспользуемся этим обстоятельством, а затем подробно рассмотрим, что стоит за каждой из этих простых команд и какие действия при этом выполняются.
Компиляция и инсталляция на сервере приложений
Итак, первое, что предстоит сделать, - откомпилировать приложение. Для компиляции в настройках сборки определена специальная цель (target) - build.
Набрав в командной строке команду asant build (asant - вызов командного файла, запускающего ant, build - имя цели, которую он должен выполнить), получим следующий вывод:
Buildfile: build.xml javaee-home-test: init: prepare: [echo] Creating the required directories.... [mkdir] Created dir: H:\Java\jwstutorial20_new\examples\ jaxws\helloserviceuild compile-service: [echo] Compiling the server-side source code ... [javac] Compiling 1 source file to H:\Java\ jwstutorial20_new\examples\jaxws\helloserviceuild [wsgen] command line: wsimport -classpath H:\Java\AppServer\lib\activation.jar; H:\Java\AppServer\lib\admin-cli.jar; H:\Java\AppServer\lib\appserv-admin.jar; H:\Java\AppServer\lib\appserv-cmp.jar; H:\Java\AppServer\lib\appserv-deployment-client.jar; H:\Java\AppServer\lib\appserv-ext.jar; H:\Java\AppServer\lib\appserv-jstl.jar; H:\Java\AppServer\lib\appserv-jwsacc.jar; H:\Java\AppServer\lib\appserv-launch.jar; H:\Java\AppServer\lib\appserv-rt.jar; H:\Java\AppServer\lib\appserv-tags.jar; H:\Java\AppServer\lib\appserv-upgrade.jar; H:\Java\AppServer\lib\appserv-ws.jar; H:\Java\AppServer\lib\com-sun-commons-launcher.jar; H:\Java\AppServer\lib\com-sun-commons-logging.jar; H:\Java\AppServer\lib\dbschema.jar; H:\Java\AppServer\lib\j2ee-svc.jar; H:\Java\AppServer\lib\j2ee.jar; H:\Java\AppServer\lib\javaee.jar; H:\Java\AppServer\lib\jhall.jar; H:\Java\AppServer\lib\jmxremote_optional.jar; H:\Java\AppServer\lib\jsf-impl.jar; H:\Java\AppServer\lib\mail.jar; H:\Java\AppServer\lib\sun-appserv-ant.jar; H:\Java\AppServer\lib\toplink-essentials-agent.jar; H:\Java\AppServer\lib\toplink-essentials.jar; H:\Java\AppServer\jdk\lib\tools.jar; H:\Java\jwstutorial20_new\examples\jaxws\helloserviceuild -d H:\Java\jwstutorial20_new\examples\jaxws\helloservice\ build -keep -s H:\Java\jwstutorial20_new\examples\jaxws\helloservice\ build -verbose helloservice.endpoint.Hello [wsgen] Note: ap round: 1 [wsgen] [ProcessedMethods Class: helloservice.endpoint.Hello] [wsgen] [should process method: sayHello hasWebMethods: true ] [wsgen] [endpointReferencesInterface: false] [wsgen] [declaring class has WebSevice: true] [wsgen] [returning: true] [wsgen] [WrapperGen - method: sayHello(java.lang.String)] [wsgen] [method.getDeclaringType(): helloservice.endpoint.Hello] [wsgen] [requestWrapper: helloservice.endpoint.jaxws.SayHello] [wsgen] [ProcessedMethods Class: java.lang.Object] [wsgen] helloservice\endpoint\jaxws\SayHello.java [wsgen] helloservice\endpoint\jaxws\SayHelloResponse.java [wsgen] Note: ap round: 2 [wsgen] [completing model for endpoint: helloservice.endpoint.Hello] [wsgen] [ProcessedMethods Class: helloservice.endpoint.Hello] [wsgen] [should process method: sayHello hasWebMethods: true ] [wsgen] [endpointReferencesInterface: false] [wsgen] [declaring class has WebSevice: true] [wsgen] [returning: true] [wsgen] [WebServiceReferenceCollector - method: sayHello(java.lang.String)] [wsgen] [ProcessedMethods Class: java.lang.Object] build-service: build: BUILD SUCCESSFUL Total time: 9 seconds
Поскольку мы намеренно включили опцию вывода отладочной информации для ant,вывод получился довольно обширный.
Первое, что делается для компиляции программы, - создается специальная директория build,в которую будут помещены откомпилированные модули. Она создается в , который компилирует наш класс Hello.java,а результат компиляции кладет в директорию build.Поскольку класс Hello определен в пакете helloservice.endpoint,в директории build будет создана соответствующая система каталогов и файл Hello.class будет помещен в каталог ./build/ helloservice/endpoint.
Следующим шагом вызывается утилита wsgen,которая формирует вспомогательные классы. По умолчанию исходные коды этих классов после компиляции уничтожаются, однако, выставив опцию keep=true (эта и другие опции могут быть установлены в файле build.properties),исходные коды можно сохранить. Помещаются они в пакет jaxws того же пакета, которому принадлежит и класс. Соответственно, для нашего примера исходные файлы (а затем и откомпилированные классы) будут располагаться в директории ./build/ helloservice/endpoint/jaxws.
После того как утилита wsgen отработала, мы имеем откомпилированный пакет helloservice.endpoint.jaxws,содержащий необходимые вспомогательные классы. На этом шаге компиляция нашего Web -сервиса закончена. Следующим этапом необходимо подготовить модуль развертывания. В нашем случае это делается с помощью команды:
asant create-war
Вывод получаем следующий:
Buildfile: build.xml prepare-assemble: [echo] Creating the assemble directory.... [mkdir] Created dir: H:\Java\jwstutorial20_new\examples\ jaxws\helloservice\assemble [mkdir] Created dir: H:\Java\jwstutorial20_new\examples\ jaxws\helloservice\assemble\war create-war: [echo] Creating the WAR ... [war] Building war: H:\Java\jwstutorial20_new\examples\ jaxws\helloservice\assemble\war\hello-jaxws.war BUILD SUCCESSFUL Total time: 3 seconds
Создается отдельный каталог assemble,в нем создается каталог war, в котором формируется файл hello-jaxws.war.Этот файл представляет собой архив, в который помещены откомпилированные файлы нашего приложения и некоторые вспомогательные файлы. Теперь у нас полностью готов модуль развертывания, который мы можем инсталлировать в сервере приложений. Инсталляция может быть выполнена командой:
asant deploy
Результат выполнения команды следующий:
Buildfile: build.xml deploy: admin_command_common: [echo] Doing admin task deploy assemble/war/hello-jaxws.war [sun-appserv-admin] Executing: deploy --port 4848 --host localhost --passwordfile "H:\Java\jwstutorial20_new\examples\ common\admin-password.txt" --user admin assemble/war/ hello-jaxws.war [sun-appserv-admin] Command deploy executed successfully. BUILD SUCCESSFUL Total time: 43 seconds
Чтобы убедиться в том, что инсталляция приложения прошла успешно, можно воспользоваться консолью администратора:
(рис 10.4) Проверка инсталляции приложенияВ процессе инсталляции, кроме прочего, был сгенерирован -файл, описывающий установленный Web -сервис. Как уже говорилось, этот файл содержит полное описание Web -сервиса, включая названия его методов, а также количество и типы передаваемых и возвращаемых параметров. Этот файл является важной составляющей частью технологии, поскольку он позволяет строить приложения, осуществляющие динамические вызовы методов Web -сервисов. Кроме того, этот файл может быть использован для автоматической генерации вспомогательных классов (классов- proxy ) для обращения к Web -сервису.
-файл для нашего Web -сервиса может быть получен по адресу http://localhost:8080/helloservice/hello?wsdl - пример 10.3.
<?xml version="1.0" encoding="UTF-8" ?>
- <definitions xmlns:tns="http://endpoint.helloservice/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns="http://schemas.xmlsoap.org/wsdl/"
targetNamespace="http://endpoint.helloservice/"
name="HelloService">
- <types>
- <xsd:schema>
<xsd:import namespace="http://endpoint.helloservice/"
schemaLocation=
"http://localhost:8080/helloservice/hello?xsd=1" />
</xsd:schema>
</types>
- <message name="sayHello">
<part element="tns:sayHello" name="parameters" />
</message>
- <message name="sayHelloResponse">
<part element="tns:sayHelloResponse"
name="parameters" />
</message>
- <portType name="Hello">
- <operation name="sayHello">
<input message="tns:sayHello" />
<output message="tns:sayHelloResponse" />
</operation>
</portType>
- <binding type="tns:Hello"
name="HelloPortBinding">
<soap:binding style="document"
transport= "http://schemas.xmlsoap.org/soap/http" />
- <operation name="sayHello">
<soap:operation soapAction="" />
- <input>
<soap:body use="literal" />
</input>
- <output>
<soap:body use="literal" />
</output>
</operation>
</binding>
- <service name="HelloService">
- <port binding="tns:HelloPortBinding"
name="HelloPort">
<soap:address location="http://localhost:8080/helloservice/
hello" />
</port>
</service>
</definitions>
Тестирование Web-сервиса
Итак, наш Web -сервис успешно инсталлирован. Осталось только убедиться в том, что он действительно работает. Чуть позже мы напишем специальное приложение-клиент, которое будет обращаться к нашему Web -сервису, а пока воспользуемся средствами, предоставляемыми нам Sun Java System Application Server.Дело в том, что этот сервер приложений способен самостоятельно динамически выстроить среду для вызова методов инсталлированных в нем Web -сервисов. Всей необходимой информацией, а именно: имена публикуемых методов, количество и тип принимаемых и возвращаемых методами параметров - он обладает.
(рис 10.5) Описание Web-сервиса в административной консолиДля того чтобы воспользоваться указанной возможностью, нужно выбрать нужный нам сервис в списке сервисов (в правой части окна браузера) и нажать кнопку "Test" (рис. 10.5).
(рис 10.6) Тестирование Web-сервисаОткроется новое окно браузера (рис. 10.6), в котором отобразится динамически построенная сервером страница. На этой странице перечислены все опубликованные методы Web -сервиса (в нашем случае - один метод sayHello) и реализован интерфейс для их вызова. Если ввести в соответствующее поле строку и нажать кнопку - вызовется метод Web -сервиса и введенное значение будет передано ему в качестве параметра. Кроме всего прочего, на результирующей странице отобразятся -сообщения, соответственно, отправленные Web -сервису и пришедшие от него в качестве ответа.
Результирующая страница будет иметь следующий вид (пример. 10.4).
На странице (пример. 10.4) видны значения и типы переданных параметров, ответ, который возвратил метод Web -сервиса, - как и ожидалось, ответ представляет собой строку "Hello, Web-service test", - а также отправленный и полученный пакеты.
Таким образом, разработанный нами Web -сервис успешно инсталлирован в сервере приложений и может обрабатывать запросы клиентов, в чем мы убедились, использовав тестовое окружение, предоставляемое сервером приложений.
sayHello Method invocation Method parameter(s) Type Value java.lang.String Web-service test Method returned java.lang.String : "Hello, Web-service test." SOAP Request <?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv= "http://schemas.xmlso-ap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns1="http://endpoint.helloservice/"> <soapenv:Body> <ns1:sayHello> <arg0>Web-service test</arg0> SOAP Response <?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/ soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns1="http://endpoint.helloservice/"> <soapenv:Body> <ns1:sayHelloResponse> <return>Hello, Web-service test.</return> </ns1:sayHelloResponse> </soapenv:Body> </soapenv:Envelope> </ns1:sayHello> </soapenv:Body> </soapenv:Envelope>
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.