Статьи

Работа с веб-службами JAX-WS: создание клиента веб-службы

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

Чтобы получить доступ к веб-сервису, нам нужно знать артефакты сервиса и его местоположение.

Артефакты службы описаны в документе, называемом файлом WSDL (язык описания веб-службы). Файл WSDL содержит информацию, относящуюся к службе, такую ​​как типы, операции службы, информация о привязке и типе порта. Более подробная информация об этой и других задействованных технологиях будет обсуждаться в следующей статье. Но некоторые детали WSDL обсуждаются ниже.

Зачем нам нужен WSDL?

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

Как это выглядит?

Файл WSDL — это не что иное, как документ XML, описывающий операции веб-службы, типы данных и их местоположение. Пример файла WSDL, созданного для нашего простого веб-сервиса, приведен ниже.

<?xml version="1.0" encoding="UTF-8"?>
<!--Published by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.2.5-b01 . -->
<!-- Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.2.5-b01 . -->
<definitions targetNamespace="http://sample.jaxws.ws.blog.accrd.com/"
    name="SimpleWebServiceService">
    <types>
        <xs:element name="sayHello" type="tns:sayHello" />
        <xs:element name="sayHelloResponse" type="tns:sayHelloResponse" />
        <xs:complexType name="sayHello">
            <xs:sequence>
                <xs:element name="arg0" type="xs:string" minOccurs="0" />
            </xs:sequence>
        </xs:complexType>
        <xs:complexType name="sayHelloResponse">
            <xs:sequence>
                <xs:element name="return" type="xs:string" minOccurs="0" />
            </xs:sequence>
        </xs:complexType>
    </types>
    <message name="sayHello">
        <part name="parameters" element="tns:sayHello" />
    </message>
    <message name="sayHelloResponse">
        <part name="parameters" element="tns:sayHelloResponse" />
    </message>
    <portType name="SimpleWebService">
        <operation name="sayHello">
            <input
                wsam:Action="http://sample.jaxws.ws.blog.accrd.com/SimpleWebService/sayHelloRequest"
                message="tns:sayHello" />
            <output
                wsam:Action="http://sample.jaxws.ws.blog.accrd.com/SimpleWebService/sayHelloResponse"
                message="tns:sayHelloResponse" />
        </operation>
    </portType>
    <binding name="SimpleWebServicePortBinding" type="tns:SimpleWebService">
        <soap:binding transport="http://schemas.xmlsoap.org/soap/http"
            style="document" />
        <operation name="sayHello">
            <soap:operation soapAction="" />
            <input>
                <soap:body use="literal" />
            </input>
            <output>
                <soap:body use="literal" />
            </output>
        </operation>
    </binding>
    <service name="SimpleWebServiceService">
        <port name="SimpleWebServicePort" binding="tns:SimpleWebServicePortBinding">
            <soap:address
                location="http://localhost:8080/SimpleWebService/SimpleWebService" />
        </port>
    </service>
</definitions>

Кто создает WSDL?

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

Что клиент (или потребитель веб-сервиса) делает с WSDL?

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

Как мы строим клиента?

Существуют разные способы доступа к веб-сервису.

Если вы хотите быстро протестировать веб-сервис, есть известный инструмент под названием SoapUI. SoapUI — это инструмент тестирования веб-сервисов с открытым исходным кодом. Это просто в использовании. Вы можете скачать его отсюда и попробовать.

Если вы хотите разработать его самостоятельно, давайте приступим к созданию клиента веб-службы Java, который будет иметь доступ к простому сервису, который мы создали в предыдущей статье .

Нам нужно выполнить следующие шаги для создания клиента веб-службы.

Шаг 1. Создайте необходимые артефакты веб-службы, такие как типы данных, типы портов и классы заглушек веб-служб на стороне клиента, используя URL-адрес WSDL.

Чтобы сгенерировать эти артефакты в Java, нам нужно вызвать инструмент wsimport, который поставляется с JDK 6 и более поздними версиями .

Примечание. Если вы планируете создать клиент веб-службы на других языках программирования (.NET, C ++, PHP и т. Д.), Процесс будет другим, и вам необходимо просмотреть соответствующую языковую документацию.

Синтаксис выполнения инструмента wsimport приведен ниже.

wsimport [параметры] <WSDL_URI>

Наиболее часто используемые параметры перечислены ниже:

-s: указать каталог, в котором нужно хранить сгенерированные исходные файлы java из WSDL.

-p: имя пакета, с которым нужно скопировать исходные файлы

-d: каталог, в котором должны храниться скомпилированные файлы классов.

-b <путь>: используется, когда нам нужно указать любые дополнительные файлы XSD вместе с WSDL_URI.

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

wsimport -s src -d bin -p com.accrd.blog.ws.jaxws.sample.client http: // localhost: 8080 / SimpleWebService / SimpleWebService? wsdl

Приведенная выше команда будет генерировать необходимые Java-артефакты в указанном пакете в папке ‘src’ в зависимости от элементов в WSDL. Скомпилированная версия сгенерированных артефактов сохраняется в папке «bin».

Шаг 2: Теперь создайте класс Java, который будет использовать сгенерированные артефакты и вызывать веб-сервис. Код для этого приведен ниже. Все важные строки документированы для лучшего понимания.

package com.accrd.blog.ws.jaxws.sample.client;
 
public class SimpleWSClient {
    /**
     * This is a Service object providing the client view or the factory for proxies of the Web service from which we generated this.
     * This is used to get the proxy(stub) or port of the web service created.
     */
    SimpleWebServiceService service = null ;
 
    public SimpleWSClient(){
        /**
         * Instantiate the web service client object.
         */
        service = new SimpleWebServiceService() ;
    }
 
    public void testService (String name){
        /*
         * Get the web service proxy or port from the web service client factory. This port is nothing but the stub for the web service created.
         * It facilitates us to invoke the web service methods remotely.
         */
        SimpleWebService servicePort = service.getSimpleWebServicePort() ;
 
        /*
         * Invoke the web service operation using the port or stub or proxy
         */
        String helloMessage = servicePort.sayHello(name) ;
 
        System.out.println("Response from web service call : "+helloMessage) ;
    }
 
    public static void main (String arags[]){
        SimpleWSClient client = new SimpleWSClient() ;
        client.testService("Accordess") ;
    }
 
}

Шаг 3: Теперь скомпилируйте и запустите этот класс как автономное приложение Java из командной строки или из вашей любимой IDE. Ответ на вызов веб-службы печатается.

> java com.accrd.blog.ws.jaxws.sample.client.SimpleWSClient
Ответ от вызова веб-службы: Здравствуйте, Accordess!

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

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

Наша следующая статья из этой серии посвящена истории, развитию и технологиям веб-сервисов.

 

От http://www.accordess.com/wpblog/2012/01/02/working-with-jax-ws-web-services-building-a-web-service-client/