Loading...
Flash Player 9 (or above) is needed to view slideshows. We have detected that you do not have it on your computer.To install it, go here
 
Post to Twitter Post to Twitter
Myspace Hi5 Friendster Xanga LiveJournal Facebook Blogger Tagged Typepad Freewebs BlackPlanet gigya icons
SlideShare is now available on LinkedIn. Add it to your LinkedIn profile.

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

From fedor.malyshkin, 4 months ago Add as contact

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

719 views | 0 comments | 0 favorites | 7 downloads | 0 embeds (Stats)

Categories

Technology

Groups/Events

Embed in your blog options close
Embed (wordpress.com) Exclude related slideshows Embed in your blog

More Info

This slideshow is Public
Total Views: 719 on Slideshare: 719 from embeds: 0
Flagged as inappropriate Flag as inappropriate

Flag as inappropriate

Select your reason for flagging this slideshow as inappropriate.

If needed, use the feedback form to let us know more details.

Slideshow Transcript

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