What is java web service api

Веб-сервисы. Шаг 1. Что такое веб-сервис и как с ним работать?

Java-университет

Веб-сервисы. Шаг 1. Что такое веб-сервис и как с ним работать? - 1

Заголовок топика – это действительно вопрос, т.к. я сам не знаю, что это и впервые попробую поработать с этим в рамках настоящей статьи. Единственное, что могу гарантировать, что код, представленный ниже, будет работать, однако мои фразы будут лишь предположениями и догадками о том, как я сам все это понимаю. Итак, поехали…

Введение

  1. SOAP. Прежде чем вызвать удаленную процедуру, нужно этот вызов описать в XML файле формата SOAP. SOAP – это просто одна из многочисленных XML разметок, которая используется в веб-сервисах. Все, что мы хотим куда-то отправить через HTTP, сначала превращается в XML описание SOAP, потом засовывается в HTTP пакет и посылается на другой компьютер в сети по TCP/IP.
  2. WSDL. Есть веб-сервис, т.е. программа, методы которой можно удаленно вызывать. Но стандарт требует, чтобы к этой программе прилагалось описание, в котором сказано, что «да, вы не ошиблись – это действительно веб-сервис и можно у него вызвать такие-то такие-то методы». Такое описание представляется еще одним файлом XML, который имеет другой формат, а именно WSDL. Т.е. WSDL – это просто XML файл описания веб-сервиса и больше ничего.

Общий подход

  1. Описать интерфейс нашего веб-сервиса
  2. Реализовать этот интерфейс
  3. Запустить наш веб-сервис
  4. Написать клиента и удаленно вызвать нужный метод веб-сервиса

Сервер

Запустим IDEA и создадим новый проект Create New Project. Укажем имя HelloWebService и нажмем кнопку Next, далее кнопку Finish. В папке src создадим пакет ru.javarush.ws. В этом пакете создадим интерфейс HelloWebService :

 package ru.javarush.ws; // это аннотации, т.е. способ отметить наши классы и методы, // как связанные с веб-сервисной технологией import javax.jws.WebMethod; import javax.jws.WebService; import javax.jws.soap.SOAPBinding; // говорим, что наш интерфейс будет работать как веб-сервис @WebService // говорим, что веб-сервис будет использоваться для вызова методов @SOAPBinding(style = SOAPBinding.Style.RPC) public interface HelloWebService < // говорим, что этот метод можно вызывать удаленно @WebMethod public String getHelloString(String name); >

В этом коде классы WebService и WebMethod являются так называемыми аннотациям и ничего не делают, кроме как помечают наш интерфейс и его метод, как веб-сервис. Это же относится и к классу SOAPBinding . Разница лишь в том, что SOAPBinding – это аннотация с параметрами. В данном случае используется параметр style со значением, говорящим, что веб-сервис будет работать не через сообщения-документы, а как классический RPC, т.е. для вызова метода. Давайте реализуем логику нашего интерфейса и создадим в нашем пакете класс HelloWebServiceImpl . Кстати, замечу, что окончание класса на Impl – это соглашение в Java, по которому так обозначают реализацию интерфейсов (Impl – от слова implementation, т.е. реализация). Это не требование и вы вольны назвать класс как хотите, но правила хорошего тона того требуют:

 package ru.javarush.ws; // таже аннотация, что и при описании интерфейса, import javax.jws.WebService; // но здесь используется с параметром endpointInterface, // указывающим полное имя класса интерфейса нашего веб-сервиса @WebService(endpointInterface = "ru.javarush.ws.HelloWebService") public class HelloWebServiceImpl implements HelloWebService < @Override public String getHelloString(String name) < // просто возвращаем приветствие return "Hello, " + name + "!"; >> 

Запустим наш веб-сервис как самостоятельный сервер, т.е. без участия всяких Tomcat и серверов приложений (это тема отдельного разговора). Для этого в структуре проекта в папке src создадим пакет ru.javarush.endpoint , а в нем создадим класс HelloWebServicePublisher с методом main :

 package ru.javarush.endpoint; // класс, для запуска веб-сервера с веб-сервисами import javax.xml.ws.Endpoint; // класс нашего веб-сервиса import ru.javarush.ws.HelloWebServiceImpl; public class HelloWebServicePublisher < public static void main(String. args) < // запускаем веб-сервер на порту 1986 // и по адресу, указанному в первом аргументе, // запускаем веб-сервис, передаваемый во втором аргументе Endpoint.publish("http://localhost:1986/wss/hello", new HelloWebServiceImpl()); >> 

Теперь запустим этот класс, нажав Shift+F10. В консоли ничего не появится, но сервер запущен. В этом можно убедиться набрав в браузере строку http://localhost:1986/wss/hello?wsdl. Открывшаяся страница, с одной стороны, доказывает, что у нас на компьютере (localhost) запустился веб-сервер (http://) на порту 1986, а, с другой стороны, показывает WSDL описание нашего веб-сервиса. Если вы остановите приложение, то описание станет недоступно, как и сам веб-сервис, поэтому делать этого не будем, а перейдем к написанию клиента.

Читайте также:  Css div выравнивание прав

Клиент

В папке проекта src создадим пакет ru.javarush.client , а в нем класс HelloWebServiceClient с методом main :

 package ru.javarush.client; // нужно, чтобы получить wsdl описание и через него // дотянуться до самого веб-сервиса import java.net.URL; // такой эксепшн возникнет при работе с объектом URL import java.net.MalformedURLException; // классы, чтобы пропарсить xml-ку c wsdl описанием // и дотянуться до тега service в нем import javax.xml.namespace.QName; import javax.xml.ws.Service; // интерфейс нашего веб-сервиса (нам больше и нужно) import ru.javarush.ws.HelloWebService; public class HelloWebServiceClient < public static void main(String[] args) throws MalformedURLException < // создаем ссылку на wsdl описание URL url = new URL("http://localhost:1986/wss/hello?wsdl"); // Параметры следующего конструктора смотрим в самом первом теге WSDL описания - definitions // 1-ый аргумент смотрим в атрибуте targetNamespace // 2-ой аргумент смотрим в атрибуте name QName qname = new QName("http://ws.javarush.ru/", "HelloWebServiceImplService"); // Теперь мы можем дотянуться до тега service в wsdl описании, Service service = Service.create(url, qname); // а далее и до вложенного в него тега port, чтобы // получить ссылку на удаленный от нас объект веб-сервиса HelloWebService hello = service.getPort(HelloWebService.class); // Ура! Теперь можно вызывать удаленный метод System.out.println(hello.getHelloString("JavaRush")); >> 

Максимум комментариев по коду я дал в листинге. Добавить мне нечего, поэтому запускаем (Shift+F10). Мы должны в консоли увидеть текст: Hello, JavaRush! Если не увидели, то видимо забыли запустить веб-сервис.

Заключение

В данном топике был представлен краткий экскурс в веб-сервисы. Еще раз скажу, что многое из того, что я написал – это мои догадки по поводу того, как это работает, и поэтому мне не стоит сильно доверять. Буду признателен, если знающие люди меня поправят, ведь тогда я чему-нибудь научусь. UPD. Продолжаем разговор

Источник

Оцените статью