Статьи

Работа с веб-сервисами JAX-WS: часть 1

На рынке доступно множество платформ для разработки веб-сервисов на основе платформы Java. Однако большинство из этих платформ соответствуют спецификации JAX-WS (JSR-000224). Эта серия будет посвящена официальной эталонной реализации JAX-WS, разработанной Metro Community в Oracle (ранее известной как Sun).

Начало работы с разработкой простого веб-сервиса

Требуется программное обеспечение:

  • Java SE 1.6 и выше
  • Реализация JAX-WS Reference 2.2.5 (доступна здесь )
  • Apache Tomcat версии 6 и выше.

Веб-сервис может быть разработан двумя способами,

1. Нисходящий подход

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

2. Подход снизу вверх

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

Мы следуем второму подходу, то есть подходу «снизу вверх» для простоты и более быстрого готового рабочего примера.

Что делать?

Создайте класс POJO (простой старый объект Java) и аннотируйте его с помощью WebService, как указано ниже

package com.accrd.blog.ws.jaxws.sample;

import javax.jws.WebService;

@WebService(name="SimpleWebService")
public class SimpleWebService {

}

Это делает java-класс веб-сервисом с именем «SimpleWebService». Мы можем добавить необходимую функциональность в класс, чтобы служба могла служить какой-то цели.

Давайте добавим метод, который принимает в качестве входных данных имя String и возвращает сообщение «привет».

package com.accrd.blog.ws.jaxws.sample;

import javax.jws.WebService;

@WebService(name="SimpleWebService")
public class SimpleWebService {

    public String sayHello (String name){
        return "Hello, "+ name + "!" ;
    }

}

Теперь у веб-службы есть задача, и доступная операция делает это: вы передаете имя («веб-служба»), и оно возвращает приветственное сообщение с указанным именем («Здравствуйте, веб-служба!»).

Вот и все. Веб-сервис готов к развертыванию.

Вы можете развернуть это двумя способами,

1. Автономное развертывание. При таком подходе вам просто нужно иметь основной метод и вызывать Endpoint.publish (url, provider) . Это упоминается ниже. Это создает среду выполнения веб-службы, которая поставляется с Java SE 6, и развертывает ее на облегченном http-сервере. Сервис доступен по URL-адресу, указанному как входные данные для метода публикации.

package com.accrd.blog.ws.jaxws.sample;

import javax.jws.WebService;
import javax.xml.ws.Endpoint;

@WebService(name="SimpleWebService")
public class SimpleWebService {

    public String sayHello (String name){
        return "Hello, "+ name + "!" ;
    }

    public static void main (String args[]){
        Endpoint.publish("http://localhost:8080/SimpleWebService", new SimpleWebService ()); ;
    }

}

2. Развертывание в сервлет-контейнере. При таком подходе мы можем развернуть веб-сервис, создав стандартный файл .war веб-приложения java и развернув его на веб-сервере, который имеет поддержку контейнера сервлетов, например Tomcat или Jetty. , Этот подход объясняется ниже с использованием Apache Tomcat версии 6.

1. Убедитесь, что вы загрузили и распаковали эталонную реализацию JAX-WS (доступна здесь ).

2. Убедитесь, что вы скачали и установили Apache Tomcat версии 6.

3. Задайте для переменной среды JAVA_HOME указатель на папку установки JDK 1.6 или выше.

4. Создайте стандартное веб-приложение на Java с вашей любимой IDE (например, Eclipse или NetBeans).

5. Создайте / измените дескриптор развертывания веб-приложения (web.xml) со следующим содержимым.

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
  <display-name>SimpleWebService</display-name>

  <listener>
    <listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class>
  </listener>
  <servlet>
    <servlet-name>SimpleWebService</servlet-name>
    <servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>SimpleWebService</servlet-name>
    <url-pattern>/SimpleWebService</url-pattern>
  </servlet-mapping>

</web-app>

WSServletContenxtListener:

Упомянутый выше класс слушателя ( com.sun.xml.ws.transport.http.servlet.WSServletContextListener ) является прослушивателем контекста веб-службы, который инициализирует контекст веб-службы при инициализации контекста приложения и создает делегат веб-службы, который используется. делегировать все будущие запросы веб-сервисов и направлять их к соответствующей реализации конечной точки, определенной в файле sun-jaxws.xml, указанном ниже. Это сохраняет созданный делегат в контексте сервлета контейнера, так что к делегату могут обращаться другие сервлеты.

WSServlet:

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

Класс ( com.sun.xml.ws.transport.http.servlet.WSServlet ) действует как диспетчер отправки, который направляет запрос в соответствующий класс реализации через делегат, полученный из контекста сервлета, созданного слушателем, как указано выше.

6. Создайте другой требуемый дескриптор развертывания веб-службы ( sun-jaxws.xml ) в папке WEB-INF. Этот файл необходим эталонной реализации JAX-WS для сопоставления класса реализации сервиса с интерфейсом сервиса. Содержание этого файла упомянуто ниже.

<?xml version="1.0" encoding="UTF-8"?>
<endpoints
    xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime"
    version="2.0">

    <endpoint
        name="SimpleWebService"
        implementation="com.accrd.blog.ws.jaxws.sample.SimpleWebService"
        url-pattern="/SimpleWebService" />

</endpoints>

Дескриптор sun-jaxws.xml. Каждое определение конечной точки в этом дескрипторе указывает имя веб-службы, класс реализации и шаблон URL-адреса, который маршрутизирует к этому вызову веб-службы. Это читается прослушивателем контекста и передается созданному им делегату веб-службы, чтобы делегат знал, какой класс реализации вызывать при поступлении запроса веб-службы.

7. Скопируйте библиотеки, доступные в <JAX-WS_INSTALL_DIR> / lib, в папку WEB-INF / lib.

8. Убедитесь, что файл класса веб-сервиса скопирован в WEB-INF / classes согласно структуре пакета.

9. Теперь создайте файл war и скопируйте его в папку <TOMCAT_INSTALL_DIR> / webappas и запустите Tomcat.

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

Убедившись, что сервер запущен без ошибок, мы можем получить доступ к развернутой веб-службе по адресу http: // localhost: 8080 / SimpleWebService / SimpleWebService

WSDL для развернутой веб-службы доступен по адресу http: // localhost: 8080 / SimpleWebService / SimpleWebService? Wsdl

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

Проект исходного кода Eclipse Indigo для этой статьи можно скачать здесь .

 

С http://www.accordess.com/wpblog/2011/12/28/working-with-jax-ws-web-services-part-1/