Главная » Java, Web, XML » Инструменты создания описаний WS DL

0

Описания WSDL в листингах 4.2 и 4.5 сделаны вручную. Однако строгая формализация языка WSDL позволяет автоматизировать этот процесс. Многие инструментальные средства создания Web-служб содержат утилиты, которые автоматически создают WSDL-файлы, описывающие готовые Web- службы. Например, уже упоминавшееся в главе 3 средство создания Web- служб Apache Axis содержит в своем составе класс Java2wsDL, создающий WSDL-файл по классу или интерфейсу Java, описывающему Web-службу. Пакет IBM WSTK, в состав которого входит Axis, содержит утилиту java2wsdl, создающую и запускающую объект этого класса. Она работает из командной строки. Достаточно набрать в командной строке

$ java2wsdl EchoServlce

и будет создан файл EchoService.wsdl, содержащий по одному элементу <portType> для каждого открытого метода класса, указанного в командной строке. В листинге 4.6 показан этот файл.

Листинг 4.6. Описание Web-службы EchoService, сделанноеАх1з

<?xml version="1.0" encoding="UTF-8" ?>

<wsdl:definitions targetNamespace=

"http://localhost:8080/axis/EchoService.jws/axis/EchoService.jws"

xmlns="http://schemas.xmlsoap.org/wsdl/"

xmlns : apachesoap= "http://xml.apache, org/xml-soap"

xmlns: impl=

"http://localhost:8080/axis/EchoService.jws/axis/EchoService.jws-impl" xmlns:intf=

"http://localhost:8080/axis/EchoService.jws/axis/EchoService.jws" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2 0 01/XMLSchema">

<wsdl: types> <schema

targetNamespace="http: //www.w3.org/2001/XMLSchema" xmlns="http: //www.w3.org/2001/XMLSchema">

<import namespace="http://schemas.xmlsoap.org/soap/encoding/" />

<element name="any" nillable="true" type="xsd:any" />

</schema>

</wsdl:types>

<wsdl:message name="getEchoRequest">

<wsdl:part name="req" type="xsd:any" /> </wsdl:message>

<wsdl:message name="getEchoResponse">

<wsdl:part name="return" type="xsd:any" /> </wsdl:message>

<wsdl:portType name="EchoService">

<wsdl:operation name="getEcho" parameterOrder="req">

<wsdl:input message="intf:getEchoRequest"

name="getEchoRequest" />

<wsdl:output mes sage="int f:getEchoResponse"

name="getEchoResponse" />

</wsdl:operation> </wsdl:portType>

<wsdl:binding name="EchoServiceSoapBinding" type="intf:EchoService">

<wsdlsoap:binding style="rpc"

/>

<wsdl:operation name="getEcho">

<wsdlsoap:operation soapAction="" /> <wsdl:input name="getEchoRequest"> <wsdlsoap:body encodingStyle=

"http: //schemas .xmlsoap. arg/scap/enccding/" namespace=

"http://localhost:8080/axis/EchoService.jws/axis/EchoService.jws"

use="encoded" />

</wsdl:input>

<wsdl:output name="getEchoResponse">

<wsdlsoap:body enccdingStyle=

"http://schemas.xmlsoap.org/soap/encoding/"

namespace=

"http://localhost:8080/axis/EchoService.jws/axis/EchoService.jws"

use="encoded" />

</wsdl:output> </wsdl:operation> </wsdl:binding>

<wsdl:service name="EchoServiceService">

<wsdl:port binding="intf:EchoServiceSoapBinding"

name="EchoService">

<wsdlsoap:address location=

"http://localhost:8080/axis/EchoService.jws" /> </wБdl:part> </wsdl:service> </wsdl:definitions>

Интересно, что Axis может выполнить и обратное действие: по имеющемуся WSDL-файлу класс wsDL2java создаст все классы Java, необходимые для работы Web-службы. В пакете IBM WSTK класс wsDL2java можно вызвать из командной строки утилитой wsdl2j ava. Например: $wsdl2java EchoService.wsdl

Такие же утилиты есть в составе уже упоминавшегося продукта GLUE фирмы The Mind Electric.

Пакет Microsoft SOAP Toolkit содержит графическую утилиту wsdlgen3.exe, вызываемую из стартового меню WSDL Generator, и утилиту командной строки wsdlstb3. ехе, которые создают WSDL-файлы.

Фирма Sun Microsystems готовит к выпуску пакет интерфейсов JWSDL (Java API for WSDL), преобразующих описание WSDL в классы Java и обратно. Это позволяет программно создавать, изменять, читать описания WSDL. Фирма IBM уже реализовала этот пакет в своем продукте WSTK, назвав набор интерфейсов и реализующих их классов WSDL4J (WSDL for Java). Этот набор можно использовать в составе WSTK или отдельно, загрузив его с сайта http://www-124.ibm.com/deveIoperworks/projects/wsdl4j/. Мы рассмотрим его подробнее в следующем разделе.

Самое ценное в описаниях WSDL то, что клиент Web-службы может обратиться не к ней самой, а к ее WSDL-описанию. В состав GLUE входит утилита командной строки invoke, обращающаяся к Web-службе по ее WSDL- описанию. Например, достаточно набрать в командной строке:

$ invoke http://some.com:8080/services/EchoService.wsdl Эхо и на консоли появится ответ Web-службы.

Фирма IBM выпускает пакет классов WSIF (Web Services Invocation Framework), работающий в Web-контейнере Tomcat под управлением Apache SOAP. С помощью этого пакета можно, в частности, сделать ту же работу:

$ java clients.Dynamiclnvoker \

http://some.com:8080/services/EchoService.wsdl \ getEcho Эхо

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

После окончания работы класса Dynamiclnvoker на КОНСОЛИ ПОЯВЛЯЮТСЯ сообщения WSIF и ответ сервера.

Литература:

Хабибуллин И. Ш. Разработка Web-служб средствами Java. — СПб.: БХВ-Петербург, 2003. — 400 с: ил.

По теме:

  • Комментарии