Технология создания веб-сервисов на базе стандарта JAX-WS & JAXB

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    1 Group

    Технология создания веб-сервисов на базе стандарта JAX-WS & JAXB - Presentation Transcript

    1. Технология создания веб-сервисов на базе стандарта JAX-WS & JAXB Малышкин Фёдор ( [email_address] ) 9 ноября 2007
    2. Введение
      • Веб-сервис – это метод коммуникации с использованием огромного количества протоколов и данными в виде структурированного XML.
      • Название пошло от основного протокола передачи, использовавшегося на заре создания технологии – HTTP.
      • Сейчас в качестве протоколов передачи кроме HTTP, могут использоваться JMS ( протокол передачи сообщений Java), SMTP , TCP…
      • Даже данные могут передаваться не в виде XML.
      • Так что понятие «веб-сервис» имеет очень расплывчатое значение на сегодняшний день и включает в себя огромное количество понятий.
      • Но разговор будет идти о стандарте описания веб-сервиса – о WSDL …
    3. WSDL
      • WSDL – Web Service Description Language.
      • WSDL является XML словарём, который позволяет описать веб-сервис в языке независимом от платформы и от реализации.
      • Данная лекция описывает стандарт WSDL 1.1 , который доступен по адресу [TODO].
    4. Логическая структура WSDL
      • <wsdl:definitions ....>
      • <!– Импорт определений из других источников -->
      • <wsdl:import ..../>
      • <!– Определение типов используемых только в этом WSDL -->
      • <wsdl:types ..../>
      • <!– Определение сообщений используемых веб-сервисом -->
      • <wsdl:message .../>
      • <!– Определение интерфейсов и операций -->
      • <wsdl:portType .../>
      • <!– Привязка интерфейсов и операций к конкретному протоколу -->
      • <wsdl:binding ..../>
      • <!– Определение сервиса как коллекции интерфейсов и определение адреса сервиса -->
      • <wsdl:service ..../>
      • </wsdl:definitions>
    5. Элементы WSDL
      • import – позволяет частям веб-сервиса быть распределёнными между несколькими файлами и быть скомпонованными в различной конфигурации в зависимости от потребностей авторов веб-сервиса.
      • Использование данной техники распространено в крупных проектах, многие веб-сервисы имеют общие типы данных и отличаются только в деталях реализации или привязки к протоколу.
    6. Элементы WSDL
      • types – определяет типы используемые веб-сервисами.
      • <types>
      • <xs:complexType name=&quot;requestHeaderType&quot;>
      • <xs:all>
      • <xs:element name=&quot;sessionId&quot; type=&quot;xs:string&quot;>
      • </xs:all>
      • </xs:complexType>
      • <xs:complexType name=&quot;responseHeaderType&quot;>
      • <xs:all>
      • <xs:element name=&quot;sessionId&quot; type=&quot;xs:string&quot;>
      • </xs:element>
      • </xs:all>
      • </xs:complexType>
      • … ..
    7. Элементы WSDL
      • types – определяет типы используемые веб-сервисами.
    8. Элементы WSDL
      • message - описывает данные, которые путешествуют между веб-сервисом и клиентом в терминах, описанных в элементе Types .
      • <message name=&quot;startSessionRequest&quot;>
      • <part name=&quot;request&quot; element=&quot;tns:startSessionRequest&quot;/>
      • </message>
      • <message name=&quot;startSessionResponse&quot;>
      • <part name=&quot;response&quot; element=&quot;tns:startSessionResponse&quot;/>
      • </message>
      • <message name=&quot;getRegionImageRequest&quot;>
      • <part name=&quot;request&quot; element=&quot;tns:getRegionImageRequest&quot;/>
      • </message>…
    9. Элементы WSDL
      • portType – определяет опреации, которые веб-сервис обеспечивает.
      • <portType name=&quot;GPSMonitorScreenProjectionEndpoint&quot;>
      • <operation name=&quot;startSession&quot;>
      • <input message=&quot;tns:startSessionRequest&quot;/>
      • <output message=&quot;tns:startSessionResponse&quot;/>
      • </operation>
      • <operation name=&quot;addRoute&quot;>
      • <input message=&quot;tns:addRouteRequest&quot;/>
      • <output message=&quot;tns:addRouteResponse&quot;/>
      • <fault name=&quot;fault&quot; message=&quot;tns:addRouteFault&quot;/>
      • </operation>
    10. Элементы WSDL
      • binding – определяет, как операции и сообщения, описанные в message и portType , привязываются к конкретному протоколу.
      • <binding name=&quot;GPSMonitorScreenProjectionEndpointBinding&quot; type=&quot;tns:GPSMonitorScreenProjectionEndpoint&quot;>
      • <soap:binding style=&quot;document&quot; transport=&quot;http://schemas.xmlsoap.org/soap/http&quot;/>
      • <operation name=&quot;startSession&quot;>
      • <soap:operation/>
      • <input><soap:body use=&quot;literal&quot;/></input>
      • <output><soap:body use=&quot;literal&quot;/></output>
      • </operation>
      • <operation name=&quot;addRoute&quot;><soap:operation/>
    11. Элементы WSDL
      • service – группирует ранее описанные порты и этим определяет сервис.
      • <service name=&quot;GPSMonitorScreenProjectionService&quot;>
      • <port name=&quot;GPSMonitorScreenProjectionEndpointPort&quot; binding=&quot;tns:GPSMonitorScreenProjectionEndpointBinding&quot;>
      • <soap:address location=&quot;http://mg-sv01/&quot;/>
      • </port>
      • </service>
    12. Разработка «обычных» веб-сервисов
      • Класс Java:
      • @WebService
      • public class UsualWS {
      • @WebMethod
      • public String method01(String data) {
      • // парсинг XML
      • // работа над данными
      • String result = результат работы
      • return result ;
      • }
      • }
    13. Разработка «обычных» веб-сервисов
      • Генерация с помощью WSGEN необходимых артефактов и WSDL
      • Развёртывание
      • И вызов через клиента или другое средство. Например через XMLSpy:
    14. Потери «обычных» веб-сервисов
      • «Обычные» веб-сервисами отличаются от «нормальных» только одним – отсутствием информации о структуре передаваемого XML.
      • Информация о том, что передаётся и в каком виде, должна быть у пользователя веб-сервиса ЗАРАНЕЕ. Использовать веб-сервис без этого не предоставляется возможным.
    15. Пример «стандартного» веб-сервиса
      • Загружаем WSDL «нормального» веб-сервиса в XMLSpy и пробуем вызвать.
    16. Преимущества «стандартных» веб-сервисов
      • Доступ к информации о структуре XML на стадии анализа веб-сервиса.
      • Чёткое описание веб-сервиса на уровне интерфейсов взаимодействия.
      • Возможность генерации клиента другим программистом независимо от автора.
      • Совместимость клиента и сервиса (изменении сервиса в рамках допустимого).
      • Возможность генерации специальных класса для указанных типов, облегчающих работу с XML .
      • Устранение необходимости работы экранирования строк, на наличие служебных символов.
    17. Пример сгенерированного клиента для «стандартного» веб-сервиса
      • @WebMethod
      • @WebResult(name = &quot;addRouteResponse&quot;, targetNamespace = &quot;http://gpsmonitor.net.magnetosoft.ru/&quot;, partName = &quot;response&quot;)
      • public AddRouteResponseType addRoute(@WebParam(name = &quot;addRouteRequest&quot;, targetNamespace = &quot;http://gpsmonitor.net.magnetosoft.ru/&quot;, partName = &quot;request&quot;)
      • AddRouteRequestType request)
      • throws AddRouteFault;
      • @WebMethod
      • @WebResult(name = &quot;getScaleResponse&quot;, targetNamespace = &quot;http://gpsmonitor.net.magnetosoft.ru/&quot;, partName = &quot;response&quot;)
      • public ScaleResponseType getScale(@WebParam ( name = &quot;getScaleRequest&quot;, targetNamespace = &quot;http://gpsmonitor.net.magnetosoft.ru/&quot;, partName = &quot;request&quot;)
      • GetScaleRequest request)
      • throws GetScaleFault;
    18. Пример сгенерированного клиента для «стандартного» веб-сервиса
      • Каждый метод имеет в качестве параметров и возвращаемого результат сгенерированные классы, обрамлённые JAXB аннотациями.
      • При вызове метода классы с наполненными данными преобразуются в XML , а результат из XML разбирается в те же сгенерированные классы.
      • Как результат - необходимость работы с XML , переносящимся между веб-сервисами, отпадает полностью.
    19. Создание « стандартного » веб-сервиса. Вариант 1.
      • Создание WSDL
      • Генерация артефактов с помощью WSIMPORT
      • Создание реализации сгенерированного интерфейса сервиса
      • P.S.: Данный вариант детально не рассматривается, так как требует детального знания языка описания XML – « XML Schema » . Именно на его основе сделаны модули « Search », « Catalogue » платформы MAGNET .
    20. Создание « стандартного » веб-сервиса. Вариант 2.
      • Создание классов носителей-данных для обмена. Классы носители-данных для обмена являются обычными JavaBean’ ами, с аннотациями JAXB , которые определяют в какой XML они превратятся.
      • package edu.sefer.home.ws;
      • import java.math.BigDecimal;
      • import javax.xml.bind.annotation.XmlElement;
      • import javax.xml.bind.annotation.XmlRootElement;
      • @XmlRootElement
      • public class XmlResult {
      • @XmlElement
      • int result;
      • @XmlElement
      • BigDecimal resultBD;
      • }
    21. Создание « стандартного » веб-сервиса. Вариант 2.
      • package edu.sefer.home.ws;
      • import java.util.Date;
      • import javax.xml.bind.annotation.XmlElement;
      • import javax.xml.bind.annotation.XmlRootElement;
      • @XmlRootElement
      • public class XmlData {
      • @XmlElement
      • String inputString;
      • @XmlElement
      • Date inputDate;
      • @XmlElement
      • int inputInt;
      • }
    22. Создание « стандартного » веб-сервиса. Вариант 2.
      • Создания класса веб-сервиса, подобно обычному подходу, но с входящими и выходящими параметрами в виде классов носителей-данных.
      • package edu.sefer.home.ws;
      • import javax.jws.WebMethod;
      • import javax.jws.WebService;
      • @WebService
      • public class UsualWS {
      • @WebMethod
      • public XmlResult method01(XmlData data) {
      • return null;
      • }
      • }
    23. Создание « стандартного » веб-сервиса. Вариант 2.
      • Генерация артефактов с использованием WSGEN , подобно обычному подходу.
      • <wsgen verbose=&quot;false&quot; debug=&quot;true&quot; keep=&quot;true&quot; destdir=&quot;${project.build.outputDirectory}&quot; resourcedestdir=&quot;${basedir}/target/wsdl&quot; sourcedestdir=&quot;${project.build.sourceDirectory}&quot; sei=&quot;edu.sefer.home.ws.UsualWS&quot; genwsdl=&quot;true&quot;>
      • <classpath>
      • <path refid=&quot;jwdp.classpath&quot;/>
      • <pathelement location=&quot;${project.build.directory}/classes&quot;/>
      • </classpath>
      • </wsgen>
    24. Создание « стандартного » веб-сервиса. Вариант 2.
      • Развёртывание и вызов…
    25. Создание « стандартного » веб-сервиса. Вариант 3.
      • Генерация или создание WSDL схемы вручную.
      • Использование интерфейса « javax.xml.ws.Provider » на серверной стороне
      • Использование интерфейса « javax.xml.ws.Dispatch » на клиентской стороне
      • Использование типа « xsd:anyType » для описания ЛЮБОГО XML, если его структура не зафиксирована.
      • P.S.: Данный вариант детально не рассматривается, так как требует детального знания языка описания XML – « XML Schema » и деталей работы соответствующих интерфейсов. Но именно на его основе сделан модуль « EntityManager » платформы MAGNET .
    26. Выводы
      • Варианты 1 и 2 наиболее удобны, если интерфейсы взаимодействия уже оговорены и устоялись.
      • Вариант же 3 позволяет передавать динамически компонуемый XML максимально быстро и использовать его максимально эффективно и гибко.
      • Хотя надо так же заметить, что при использовании некоторых подходов, передавать динамический XML можно и в вариантах 1 и 2. Но надо заметить, что дополнительная нагрузка (на обработку сообщений на уровне самой библиотеки) при этом возрастает многократно.
    27. Вопросы?
      • ?

    + Fedor MalyshkinFedor Malyshkin, 2 years ago

    custom

    2641 views, 0 favs, 0 embeds more stats

    Технология создания веб-сер more

    More info about this document

    © All Rights Reserved

    Go to text version

    • Total Views 2641
      • 2641 on SlideShare
      • 0 from embeds
    • Comments 0
    • Favorites 0
    • Downloads 12
    Most viewed embeds

    more

    All embeds

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories

    Groups / Events