SOAP Webservices в примере Java с использованием Eclipse

  1. SOAP веб-сервисы в Java
  2. Пример веб-службы SOAP
  3. SOAP Webservices в Java с использованием Eclipse
  4. Тест Eclipse SOAP Web Service
  5. Веб-сервис SOAP WSDL и конфигурации
  6. О Панкадж

Мыльные веб-сервисы в Java могут быть разработаны различными способами. Мы узнали о JAX-WS SOAP Web Services В нашем последнем уроке сегодня мы узнаем, как мы можем создать веб-сервис SOAP и его клиентскую программу с использованием Eclipse. Здесь мы не будем использовать JAX-WS, мы будем использовать Apache Axis, который интегрирован в Eclipse и обеспечивает быстрый и простой способ преобразования приложения в веб-службу Java и создания клиентских заглушек с тестовой страницей JSP для целей тестирования.

SOAP веб-сервисы в Java

SOAP веб-сервисы в Java

Я использую Eclipse Mars Release (4.5.0) для этого урока, но я думаю, что эти шаги будут работать и с более старыми версиями Eclipse. Также убедитесь, что вы добавили Apache Tomcat или любой другой контейнер сервлетов в качестве сервера в Eclipse. Давайте начнем с нашей реализации Eclipse Web Service .

Пример веб-службы SOAP

Давайте начнем с нашего примера веб-службы SOAP в Eclipse. Прежде всего, мы создадим простой динамический веб-проект в Eclipse, который будет содержать бизнес-логику для нашего приложения.

Нажмите на кнопку «Далее» выше, и вы получите следующую страницу, на которой будет указано название вашего веб-проекта и время выполнения . Обратите внимание, что я использую Apache Tomcat 8, вы также можете использовать любой другой стандартный контейнер сервлетов.

Нажмите «Далее», и вам будет предложено указать «Корень контекста» и местоположение каталога контента. Вы можете оставить их по умолчанию.

Нажмите Finish, и Eclipse создаст для вас скелет проекта. Давайте начнем с нашей бизнес-логики. Поэтому для нашего примера мы хотели бы опубликовать веб-сервис, который можно использовать для добавления / удаления / получения объекта. Итак, первый шаг - создать модель bean.


копия

пакет com.journaldev.jaxws.beans; импорт java.io.Serializable; открытый класс Person реализует Serializable {private static final long serialVersionUID = -5577579081118070434L; личное строковое имя; частный возраст; private int id; public String getName () {возвращаемое имя; } public void setName (String name) {this.name = name; } public int getAge () {вернуть возраст; } public void setAge (int age) {this.age = age; } public int getId () {return id; } public void setId (int id) {this.id = id; } @Override public String toString () {return id + "::" + name + "::" + age; }}

Обратите внимание, что выше приведен простой Java-бин, мы реализуем интерфейс Serializable, потому что мы будем передавать его по сети. Мы также предоставили реализацию метода toString, которая будет использоваться при печати этого объекта на стороне клиента.

Следующим шагом является создание классов обслуживания, поэтому у нас будет интерфейс PersonService и простой класс реализации PersonServiceImpl.


копия

пакет com.journaldev.jaxws.service; import com.journaldev.jaxws.beans.Person; открытый интерфейс PersonService {public boolean addPerson (Person p); public boolean deletePerson (int id); public Person getPerson (int id); public Person [] getAllPersons (); }

Ниже приведен класс обслуживания реализации, мы используем Map для хранения объектов Person в качестве источника данных. В программировании реального мира мы хотели бы сохранить их в таблицах базы данных.


копия

пакет com.journaldev.jaxws.service; import java.util.HashMap; импорт java.util.Map; import java.util.Set; import com.journaldev.jaxws.beans.Person; открытый класс PersonServiceImpl реализует PersonService {частная статическая карта <Integer, Person> Person = new HashMap <Integer, Person> (); @Override public boolean addPerson (Person p) {if (persons.get (p.getId ())! = Null) return false; people.put (p.getId (), p); вернуть истину; } @Override public boolean deletePerson (int id) {if (people.get (id) == null) return false; persons.remove (ID); вернуть истину; } @Override public Person getPerson (int id) {return people.get (id); } @Override public Person [] getAllPersons () {Set <Integer> ids = people.keySet (); Person [] p = new Person [ids.size ()]; int i = 0; for (Целочисленный идентификатор: идентификаторы) {p [i] = people.get (id); я ++; } return p; }}

Вот и все для нашей бизнес-логики, так как мы будем использовать их в веб-сервисе, здесь нет смысла создавать веб-страницы. Обратите внимание, что в приведенном выше коде у нас нет ссылок на какие-либо классы веб-сервисов.

SOAP Webservices в Java с использованием Eclipse

Как только наша бизнес-логика будет готова, следующим шагом будет использование Eclipse для создания приложения веб-службы из этого. Создайте новый проект и выберите мастер веб-службы.

Нажмите кнопку «Далее», и вы получите страницу, на которой необходимо указать веб-сервис и его клиентские данные. Это самая важная страница в создании веб-сервиса. Убедитесь, что вы выбрали «Тип веб-службы» в качестве «Веб-служба восходящего компонента Java», потому что мы реализуем подход снизу вверх. Есть два способа создать веб-сервис:

  1. Подход «последний контракт» или «снизу вверх»: в этом подходе мы сначала создаем реализацию, а затем генерируем из нее файл WSDL. Наша реализация вписывается в эту категорию.
  2. Подход сначала контракта или нисходящий. В этом подходе мы сначала создаем контракт веб-сервиса, т.е. файл WSDL, а затем создаем его реализацию.

файл WSDL, а затем создаем его реализацию

В реализации сервиса предоставьте классу реализации PersonServiceImpl полностью секретный путь. Убедитесь, что вы перемещаете ползунок в поле «Тип сервиса и клиента» влево, чтобы он мог генерировать клиентскую программу, а также пользовательский интерфейс для тестирования нашего веб-сервиса. Проверьте настройки в реализации веб-службы, вы должны предоставить правильные данные для времени выполнения сервера, времени выполнения веб-службы и проекта службы. Обычно они заполняются автоматически, и вам не нужно вносить здесь какие-либо изменения.

Для клиентских конфигураций вы можете указать имя клиентского проекта так, как вам нравится. Я оставил его по умолчанию как SOAPExampleClient. Если вы нажмете на ссылку для выполнения веб-службы, вы получите различные варианты, как показано на рисунке ниже. Однако я оставил его как по умолчанию.

Нажмите кнопку «Далее», и тогда вы сможете выбрать методы, которые вы хотите использовать в качестве веб-службы. Вы также сможете выбрать стиль веб-службы в качестве документа или литерала. Вы можете изменить имя документа WSDL, но хорошо иметь его с именем класса реализации, чтобы избежать путаницы в дальнейшем.

Нажмите кнопку «Далее», и вы получите страницу запуска сервера, нажмите кнопку «Начать сервер», а затем кнопка «Далее» активируется.

Нажмите кнопку «Далее», и вы получите страницу для запуска «Проводника веб-служб».

Нажмите кнопку Launch, и она откроет новое окно в браузере, где вы можете протестировать свой веб-сервис, прежде чем переходить к части клиентского приложения. Это похоже на изображение ниже для нашего проекта.

Здесь мы можем провести некоторое тестирование работоспособности, но для нашего простого приложения я готов приступить к созданию клиентского приложения. Нажмите кнопку «Далее» во всплывающем окне веб-служб Eclipse, и вы получите страницу с исходной папкой для клиентского приложения.

Нажмите на кнопку Далее, и вы получите различные варианты для выбора в качестве объекта тестирования. Я собираюсь продолжить работу с JSP JAX-RPC, чтобы клиентское приложение создавало страницу JSP, которую мы можем использовать.

Обратите внимание на добавленные методы getEndpoint () и setEndpoint (String), которые мы можем использовать для получения URL-адреса конечной точки веб-службы и можем установить для него другой URL-адрес в случае, если мы переместим наш сервер на другую конечную точку URL-адреса.

Нажмите кнопку Готово, и Eclipse создаст проект клиента в вашей рабочей области, а также запустит тестовую страницу JSP клиента, как показано ниже.

Нажмите кнопку Готово, и Eclipse создаст проект клиента в вашей рабочей области, а также запустит тестовую страницу JSP клиента, как показано ниже

Вы можете скопировать URL-адрес и открыть его в любом браузере. Давайте протестируем некоторые из сервисов, которые мы представили, и посмотрим результаты.

Тест Eclipse SOAP Web Service

  • addPerson

    addPerson

  • getPerson

    getPerson

  • getAllPersons

    Обратите внимание, что данные Person не печатаются в разделе результатов, это потому, что это автоматически сгенерированный код, и нам нужно немного его изменить, чтобы получить желаемый результат.

    Откройте Result.jsp в клиентском проекте, и вы увидите, что он использует регистр переключателя для генерации результата. Для метода getAllPersons () это был случай 42 в моем случае. Обратите внимание, что это может быть совершенно иначе в вашем случае. Я просто изменил код для случая 42, как показано ниже.


    копия

    случай 42: gotMethod = true; com.journaldev.jaxws.beans.Person [] getAllPersons42mtemp = samplePersonServiceImplProxyid.getAllPersons (); if (getAllPersons42mtemp == null) {%> <% = getAllPersons42mtemp%> <%} else {String tempreturnp43 = null; if (getAllPersons42mtemp! = null) {java.util.List <com.journaldev.jaxws.beans.Person> listreturnp43 = java.util.Arrays.asList (getAllPersons42mtemp); // tempreturnp43 = listreturnp43.toString (); for (com.journaldev.jaxws.beans.Person p: listreturnp43) {int id = p.getId (); int age = p.getAge (); String name = p.getName (); %> <% = id%> :: <% = name%> :: <% = age%> <%}}} break;

    После этого мы получим вывод ниже, обратите внимание, что Eclipse выполняет горячее развертывание здесь, поэтому мне не пришлось повторно развертывать мое приложение.

Похоже, что наш веб-сервис и клиентские приложения работают нормально, поэтому потратьте некоторое время на изучение заглушек на стороне клиента, сгенерированных Eclipse, чтобы понять больше.

Веб-сервис SOAP WSDL и конфигурации

Наконец, вы заметите, что файл WSDL создается в проекте веб-службы, как показано ниже.

Код PersonServiceImpl.wsdl:


копия

<? xml version = "1.0" encoding = "UTF-8"?> <wsdl: definitions targetNamespace = "http://service.jaxws.journaldev.com" xmlns: apachesoap = "http://xml.apache.org / xml-soap "xmlns: impl =" http://service.jaxws.journaldev.com "xmlns: intf =" http://service.jaxws.journaldev.com "xmlns: tns1 =" http: // beans. jaxws.journaldev.com "xmlns: wsdl =" http://schemas.xmlsoap.org/wsdl/ "xmlns: wsdlsoap =" http://schemas.xmlsoap.org/wsdl/soap/ "xmlns: xsd =" http : //www.w3.org/2001/XMLSchema "> <! - WSDL, созданный Apache Axis версия: 1.4 Построена 22 апреля 2006 г. (06:55:48 PDT) -> <wsdl: types> <схема elementFormDefault = "qualified" targetNamespace = "http://service.jaxws.journaldev.com" xmlns = "http://www.w3.org/2001/XMLSchema"> <import namespace = "http: //beans.jaxws .journaldev.com "/> <element name =" addPerson "> <complexType> <sequence> <element name =" p "type =" tns1: Person "/> </ sequence> </ complexType> </ element> < element name = "addPersonResponse"> <complexType> <sequence> <element name = "addPersonReturn" type = "xsd: boolean" /> </ sequence> </ co mplexType> </ element> <element name = "deletePerson"> <complexType> <sequence> <element name = "id" type = "xsd: int" /> </ sequence> </ complexType> </ element> <element name = "deletePersonResponse"> <complexType> <sequence> <element name = "deletePersonReturn" type = "xsd: boolean" /> </ sequence> </ complexType> </ element> <element name = "getPerson"> <complexType > <sequence> <element name = "id" type = "xsd: int" /> </ sequence> </ complexType> </ element> <element name = "getPersonResponse"> <complexType> <sequence> <имя элемента = "getPersonReturn" type = "tns1: Person" /> </ sequence> </ complexType> </ element> <element name = "getAllPersons"> <complexType /> </ element> <element name = "getAllPersonsResponse"> <complexType > <sequence> <element maxOccurs = "unbounded" name = "getAllPersonsReturn" type = "tns1: Person" /> </ sequence> </ complexType> </ element> </ schema> <schema elementFormDefault = "qualised" targetNamespace = "http://beans.jaxws.journaldev.com" xmlns = "http://www.w3.org/2001/XMLSchema"> <complexType name = "Person"> <seque nce> <имя элемента = "возраст" type = "xsd: int" /> <имя элемента = "id" type = "xsd: int" /> <имя элемента = "name" nillable = "true" type = "xsd : string "/> </ sequence> </ complexType> </ schema> </ wsdl: types> <wsdl: message name =" addPersonResponse "> <wsdl: part element =" impl: addPersonResponse "name =" parameters "> </ wsdl: part> </ wsdl: message> <wsdl: message name = "getAllPersonsResponse"> <wsdl: part element = "impl: getAllPersonsResponse" name = "parameters"> </ wsdl: part> </ wsdl: message > <wsdl: message name = "deletePersonResponse"> <wsdl: part element = "impl: deletePersonResponse" name = "parameters"> </ wsdl: part> </ wsdl: message> <wsdl: message name = "addPersonRequest"> <wsdl: part element = "impl: addPerson" name = "параметры"> </ wsdl: part> </ wsdl: message> <wsdl: message name = "getPersonResponse"> <wsdl: part element = "impl: getPersonResponse" name = "parameters"> </ wsdl: part> </ wsdl: message> <wsdl: message name = "getPersonRequest"> <wsdl: part element = "impl: getPerson" name = "parameters"> </ wsdl: part > </ wsdl: message> <wsdl: message name = "удалить PersonRequest "> <wsdl: part element =" impl: deletePerson "name =" параметры "> </ wsdl: part> </ wsdl: message> <wsdl: message name =" getAllPersonsRequest "> <wsdl: part element =" impl : getAllPersons "name =" parameters "> </ wsdl: part> </ wsdl: message> <wsdl: portType name =" PersonServiceImpl "> <wsdl: имя операции =" addPerson "> <wsdl: input message =" impl: addPersonRequest "name =" addPersonRequest "> </ wsdl: input> <wsdl: output message =" impl: addPersonResponse "name =" addPersonResponse "> </ wsdl: output> </ wsdl: operation> <wsdl: operation name =" deletePerson "> <wsdl: input message =" impl: deletePersonRequest "name =" deletePersonRequest "> </ wsdl: input> <wsdl: output message =" impl: deletePersonResponse "name =" deletePersonResponse "> </ wsdl: output> < / wsdl: operation> <wsdl: operation name = "getPerson"> <wsdl: input message = "impl: getPersonRequest" name = "getPersonRequest"> </ wsdl: input> <wsdl: output message = "impl: getPersonResponse" name = "getPersonResponse"> </ wsdl: output> </ wsdl: operation> <wsdl: operation name = "getAllPersons"> <wsdl: input message = "impl: getAllPersonsRequest" name = "getAllPersonsRequest"> </ wsdl: input> <wsdl: output message = "impl: getAllPersonsResponse" name = "getAllPersonsResponse"> </ wsdl: output> </ wsdl: операция / wsdl: portType> <wsdl: binding name = "PersonServiceImplSoapBinding" type = "impl: PersonServiceImpl"> <wsdlsoap: binding style = "document" transport = "http://schemas.xmlsoap.org/soap/http" /> <wsdl: operation name = "addPerson"> <wsdlsoap: operation soapAction = "" /> <wsdl: input name = "addPersonRequest"> <wsdlsoap: body use = "literal" /> </ wsdl: input> <wsdl: output name = "addPersonResponse"> <wsdlsoap: body use = "literal" /> </ wsdl: output> </ wsdl: operation> <wsdl: имя операции = "deletePerson"> <wsdlsoap: operation soapAction = "" /> <wsdl: input name = "deletePersonRequest"> <wsdlsoap: body use = "literal" /> </ wsdl: input> <wsdl: output name = "deletePersonResponse"> <wsdlsoap: body use = "literal" /> </ wsdl: output> </ wsdl: operation> <wsdl: operation name = "getPerson"> <wsdlsoap: operation soapAction = "" /> <wsdl: input name = "getPersonRe quest "> <wsdlsoap: body use =" literal "/> </ wsdl: input> <wsdl: output name =" getPersonResponse "> <wsdlsoap: body use =" literal "/> </ wsdl: output> </ wsdl : operation> <wsdl: operation name = "getAllPersons"> <wsdlsoap: operation soapAction = "" /> <wsdl: input name = "getAllPersonsRequest"> <wsdlsoap: body use = "literal" /> </ wsdl: input> <wsdl: output name = "getAllPersonsResponse"> <wsdlsoap: body use = "literal" /> </ wsdl: output> </ wsdl: operation> </ wsdl: binding> <wsdl: service name = "PersonServiceImplService"> < wsdl: привязка порта = "impl: PersonServiceImplSoapBinding" name = "PersonServiceImpl"> <wsdlsoap: address location = "http: // localhost: 8080 / SOAPExample / services / PersonServiceImpl" /> </ wsdl: port> </ wsdl: service > </ wsdl: определения>

Если вы откроете его в режиме дизайна в Eclipse, он будет выглядеть как на картинке ниже.

Если вы откроете его в режиме дизайна в Eclipse, он будет выглядеть как на картинке ниже

Вы также можете получить доступ к файлу WSDL веб-службы через браузер, добавив ? Wsdl к конечной точке веб-службы.

Wsdl к конечной точке веб-службы

Вы также заметите, что web.xml изменен для использования Apache Axis в качестве фронт-контроллера для веб-службы.


копия

<? xml version = "1.0" encoding = "UTF-8"?> <веб-приложение xmlns: xsi = "http://www.w3.org/2001/XMLSchema-instance" xmlns = "http: // xmlns .jcp.org / xml / ns / javaee "xsi: schemaLocation =" http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1 .xsd "id =" WebApp_ID "version =" 3.1 "> <display-name> SOAPExample </ display-name> <welcome-file-list> <welcome-file> index.html </ welcome-file> <welcome- file> index.htm </ welcome-file> <welcome-file> index.jsp </ welcome-file> <welcome-file> default.html </ welcome-file> <welcome-file> default.htm </ welcome -file> <welcome-file> default.jsp </ welcome-file> </ welcome-file-list> <servlet> <display-name> Apache-Axis Servlet </ display-name> <servlet-name> AxisServlet < / servlet-name> <servlet-class> org.apache.axis.transport.http.AxisServlet </ servlet-class> </ servlet> <servlet-mapping> <servlet-name> AxisServlet </ servlet-name> <url -pattern> / servlet / AxisServlet </ url-pattern> </ servlet-mapping> <servlet-mapping> <servlet-name> AxisServlet </ servlet-name> <url-pattern> *. jws </ url- pattern> </ servlet-mapping> <servlet-mapping> <servlet-name> AxisServlet </ servlet-name> <url-pattern> / services / * </ url-pattern> </ servlet-mapping> <servlet> < display-name> Сервлет администрирования Axis </ display-name> <имя сервлета> AdminServlet </ servlet-name> <класс сервлета> org.apache.axis.transport.http.AdminServlet </ servlet-class> <load- при запуске> 100 </ load-on-startup> </ servlet> <servlet-mapping> <servlet-name> AdminServlet </ servlet-name> <url-pattern> / servlet / AdminServlet </ url-pattern> < / servlet-mapping> </ web-app>

На рисунке ниже показан веб-сервис и клиентский проект со всеми автоматически сгенерированными заглушками и страницами JSP для тестирования веб-сервиса.

На рисунке ниже показан веб-сервис и клиентский проект со всеми автоматически сгенерированными заглушками и страницами JSP для тестирования веб-сервиса

Это все для мыльных веб-сервисов в примере java с использованием Eclipse, поскольку вы можете видеть, что вся сложная часть была выполнена Eclipse автоматически, и все наше внимание было сосредоточено на написании бизнес-логики для нашего веб-сервиса.

Это все для мыльных веб-сервисов в примере java с использованием Eclipse, поскольку вы можете видеть, что вся сложная часть была выполнена Eclipse автоматически, и все наше внимание было сосредоточено на написании бизнес-логики для нашего веб-сервиса

О Панкадж

Я люблю технологии с открытым исходным кодом и пишу о своем опыте, связанном с ними. Вы можете связаться со мной напрямую на facebook , щебет , а также YouTube ,

Encoding = "UTF-8"?
Encoding = "UTF-8"?