Содержание
- 2. SOAP Интернет объединяет в себе много различных платформ, а информация содержится в разнообразных источниках данных. Концепция
- 3. Основные положения модели веб-сервисов Веб-сервисы являются концепцией создания таких приложений, функции которых можно использовать при помощи
- 5. XML является фундаментом для создания большинства технологий, связанных с веб-сервисами. Для удаленного взаимодействия с веб-сервисами используется
- 6. Согласно определению W3C, веб-сервисы это приложения, которые доступны по протоколам, которые являются стандартными для Интернет. Нет
- 7. Веб-сервисы позиционируются как программное обеспечение промежуточного слоя. Использовать веб-сервисы могут как клиентские приложения, непосредственно работающие с
- 9. 2. Веб-сервисы как средство интеграции. То есть, использование веб-сервиса как способа доступа удаленных клиентов к внутренней
- 10. Рассмотрим пример создания и развертывания Веб –сервиса. Пусть Веб-сервис возвращает строку клиенту. Тогда класс, реализующий данный
- 11. Таким образом, логика Веб-сервиса заключена в методе myMethod. Клиент, вызывающий данный Веб-сервис будет иметь следующий вид
- 12. //Создаем клиента для использование Web-сервиса Service service = new Service(); //Создаем класс динамического связывания клиента с
- 13. //Определяем тип возвращаемого методом значения,в XML формате call.setReturnType(org.apache.axis.encoding. XMLType.XSD_STRING); //Вызываем метод String ret = (String)call.invoke( new
- 14. Рассмотрим процедуру развертывания данного Веб-сервиса. Для использования данного Веб-сервиса необходимы: Apache Tomcat Apache axis(axis2) Пакет Xerces-J-bin.2.11.0.zip(сайт
- 15. 2. Копируем папку axis из директории c:\axis\webapp в директорию c:\tomcat\webapp 3. Копируем все jar файлы из
- 16. 5. Создаем папку c:\axis\samples\mysimple\ и копируем туда файлы Client.java и HelloService.java 6. Копилируем данные файлы >javac
- 17. Файл deploy.wsdd имеет вид: providers/java"> value="samples.mysimple.HelloService"/>
- 18. Файл undeploy.wsdd имеет вид: xmlns="http://xml.apache.org/axis/wsdd/"> 8. Создаем папку mysimple в каталоге c:\tomcat\webapps\axis\WEB- INF\classes\samples\ 9. Копируем в
- 19. 11. Развертываем Веб-сервис c:\axis\samples\mysimple\>java –cp “все необходимые jar файлы из папки c:\tomcat\webapps\axis\WEB-INF\lib\” org.apache.axis.client.AdminClient deploy.wsdd На экране
- 20. 12. Запускаем клиент >java –cp “все необходимые jar файлы из папки c:\tomcat\webapps\axis\WEB-INF\lib\” samples.mysimple.Client Общая структура SOAP
- 22. Пример SOAP сообщения: xmlns:t="www.example.com"> 2011 February 12 18:02:00
- 23. Конверт (SOAP Envelope) SOAP Envelope является самым «верхним» элементом SOAP сообщения. Содержит корневой элемент XML-документа. Описывается
- 24. Envelope может иметь необязательный дочерний элемент Header c тем же пространством имен — заголовок. Если этот
- 25. Заголовок SOAP (SOAP Header) Первый прямой дочерний элемент конверта. Не обязательный. Заголовок кроме атрибутов xmlns может
- 26. Атрибут encodingStyle В SOAP-сообщениях могут передаваться данные различных типов (числа, даты, массивы, строки и т.п.). Определение
- 27. Атрибут actor Тип данных URI. Задает адрес конкретного SOAP-сервера, которому предназначено сообщение. SOAP-сообщение может пройти через
- 28. В версии 1.2 атрибут actor заменен атрибутом role, потому что в этой версии SOAP каждый узел
- 29. Роль http://www.w3.org/2003/05/soap-envelope/role/none не должен играть ни один SOAP-узел. Атрибут mustUnderstand Тип данных — boolean. По умолчанию
- 30. Атрибут relay Тип данных — boolean. Показывает, что заголовочный блок, адресованный SOAP- посреднику, должен быть передан
- 31. Рассмотрим пример: env:role="http://www.w3.org/2003/05/ soapenvelope/role/ultimateReceiver" env:mustUnderstand="true"> 5
- 32. SOAP-сообщения с вложениями Существуют ситуации, когда клиент и сервер должны обмениваться данными в формате, отличном от
- 34. Этот протокол определяет пересылку SOAP-сообщения внутри MIME-сообщения, состоящего из нескольких частей. Первая часть MIME-сообщения- часть SOAP
- 35. Рассмотрим пример: MIME-Version: 1.0 Content-Type: Multipart/Related; boundary=MIME_boundary; type="application/xop+xml"; start=" "; start-info="text/xml" Content-Description: An XML document with
- 36. Content-Type: application/xop+xml; charset=UTF-8; type="text/xml" Content-Transfer-Encoding: 8bit Content-ID: soapmsg.xml@daily-moon.com . . . . . . xmlns:xop='http://www.w3.org/2004/08/xop/include‘ href='cid:http://leonardo.com/mona_liza.jpg'/>
- 37. --MIME_boundary Content-Type: image/jpg Content-Transfer-Encoding: binary Content-ID: // двоичное представление файла изображения --MIME_boundary--
- 38. Axis2 В основе инфраструктуры Web-сервисов Apache Axis2 лежит новая модель XML документов AXIOM, обеспечивающая эффективную обработку
- 39. API модели AXIOM ближе всего к DOM по общим свойствам, но имеет собственные характерные черты. Например,
- 40. Такое структурирование методов доступа и навигации отвечает работе по построению дерева по требованию, поскольку это значит,
- 41. Естественно, можно использовать SAX и DOM для взаимодействия с AXIOM. AXIOM использует “builder”, чтобы построить XML
- 42. Eran Chinthaka Axis2 Ambalangoda, Sri Lanka Ajith Harshana Axis2 Kuliyapitiya, Sri Lanka
- 43. Предположим пользователь хочет получить проект первого служащего. Таким образом, в памяти достаточно построить модель представляющую только
- 44. import org.apache.axiom.om.*; import org.apache.axiom.om.impl.builder .StAXOMBuilder; import java.io.*; import javax.xml.stream.*; import java.util.*; public class Main { public
- 45. //Получаем дочерние элементы у первого Employees OMElement employeesChild=childElement.getFirstElement(); int i=0; for (Iterator iter = employeesChild.getChildElements(); iter.hasNext();)
- 46. Одним из наиболее интересных свойств AXIOM является его встроенная поддержка стандартов W3C XOP и MTOM, используемых
- 47. XOP работает с данными, представленными в системе кодировки символов с основанием 64. Base64 кодировка преобразует любые
- 48. Язык WSDL Для описания интерфейса программной компоненты, включая спецификацию корректных сообщений, был разработан язык WSDL (Web
- 50. Описание типов передаваемых данных. При использовании кодирования SOAP Document оно состоит из схемы XML, определяющей корректные
- 51. Описание типов портов (идентификаторов программных компонент), с каждым из которых связывается некоторый набор операций. Описание привязок
- 52. Рассмотрим описание на языке WSDL интерфейса компоненты, которое содержит два сервиса – сложение двух чисел и
- 53. В элементе wsdl:types описываются все типы данных. Тип Add будет связан со входящим сообщением сервиса сложения
- 54. name="a" type="s:int" /> name="b" type="s:int" /> name="AddResult" type="s:int" />
- 55. Типы SumList и SumListResponse предназначены для сообщений сервиса сложения списка чисел. name="list" type="tns:ArrayOfInt" />
- 56. name="int" type="s:int" /> name="SumListResult" type="s:int" />
- 57. В элементах wsdl:message типы данных связываются с идентификаторами сообщений. element="tns:SumListResponse" />
- 58. В элементе wsdl:portType описываются абстрактные операции и используемые ими сообщения. xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> Операция Add складывает два числа
- 59. xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> Операция SumList складывает несколько чисел
- 60. В элементе wsdl:binding операции связываются с транспортным протоколом (HTTP), версией протокола SOAP (1.2) и типом кодирования
- 61. soapAction="http://summa.test/webservices/SumList" style="document" />
- 62. В элементе wsdl:service интерфейс программной компоненты связывается с типом порта, с некоторой привязкой, а также с
- 63. Стоит заметить, что в настоящий момент существует два различных способа представления информации в теле пакета SOAP
- 64. Получение кода из WSDL В состав Axis2 входит инструмент WSDL2Java, служащий для формирования кода из описания
- 65. -o path — Определяет директорию, в которой будут создаваться классы и файлы (по умолчанию используется рабочая
- 66. Формирование WSDL из кода В состав Axis2 также входит инструмент Java2WSDL, который вы можете использовать для
- 67. В Axis2 (начиная с версии 1.2) реализована полная поддержка нескольких вариантов связывания и готовится поддержка еще
- 68. В WSDL2Java реализована полная поддержка формирования кода ADB, в том числе формирование классов модели данных, соответствующих
- 69. Создадим абстрактный класс, в котором определена операция сложения package hello; public abstract class Hello{ public abstract
- 70. package hello; public class Result{ private int res; public void setRes(int r){ res=r; } public int
- 71. Как результат получим следующий wsdl файл: elementFormDefault="qualified" targetNamespace="http://hello/xsd">
- 72. elementFormDefault="qualified" targetNamespace="http://hello"> type="ax21:Input"/> type="ax21:Result"/>
- 73. element="ns:addResponse"/> wsaw:Action="urn:add"/> wsaw:Action="urn:addResponse"/>
- 74. type="ns:HelloPortType"> transport="http://schemas.xmlsoap.org/soap/http" style="document"/> style="document"/>
- 75. type="ns:HelloPortType"> transport="http://schemas.xmlsoap.org/soap/http" style="document"/> style="document"/>
- 76. type="ns:HelloPortType"> part="parameters"/> part="parameters"/>
- 77. binding="ns:HelloSoap11Binding"> location="http://localhost:8080/axis2/services/Hello"/> binding="ns:HelloSoap12Binding"> location="http://localhost:8080/axis2/services/Hello"/> binding="ns:HelloHttpBinding"> location="http://localhost:8080/axis2/services/Hello"/>
- 78. 5. Создаем скелет Web сервиса на основе wsdl файла Hello.wsdl, созданного на предыдущем шаге. wsdl2java -uri
- 79. 7. Компилируем и создаем пакет Hello.aar, используя ant. build.xml создается автоматически. 8. Генерируем клиентский stub wsdl2java
- 80. 11.Разворачиваем Web сервис, заходя по ссылке http://localhost:8086/axis2/axis2-admin/upload и выбирая файл Hello.aar. 12. Клиент, обращающийся к Web
- 81. HelloStub.AddResponse resp=stub.add(add); System.out.println(resp.get_return().getRes()); } catch (org.apache.axis2.AxisFault e) { e.printStackTrace }catch(java.rmi.RemoteException e){ e.printStackTrace(); } } } После
- 82. XMLBeans XMLBeans - это общая среда обработки XML, в состав которой входит слой связывания данных. Она
- 83. XMLBeans отличается от ADB тем, что в ней добавляется класс для документа, который содержит класс ввода
- 84. Рассмотрим тот же пример с сложением двух целых чисел, что и в случае ADB. Шаги 1-4
- 85. package hello; public class HelloSkeleton{ public hello.AddResponseDocument add( hello.AddDocument add ) { hello.AddDocument.Add addd=add.getAdd(); hello.xsd.Input inp=addd.getArgs0();
- 86. Шаг 7. Компилируем и создаем пакет Hello.aar, используя ant. build.xml создается автоматически. Шаг 8. Генерируем клиентский
- 87. Шаг 9-11 аналогичны ADB. Шаг 12. Клиент, обращающийся к Web сервису будет иметь вид: public static
- 88. hello.AddResponseDocument resp= stub.add(adds); System.out.println(resp.getAddResponse() .getReturn().getRes()); }catch (org.apache.axis2.AxisFault e) { e.printStackTrace(); }catch(java.rmi.RemoteException e){ e.printStackTrace(); } } На
- 89. Restful services Архитектура REST отличается своей простотой, требуя от приложений обеспечить только возможность приема сообщений с
- 90. JAX-RS задает унифицированный способ описания ресурсов на основе своей модели программирования. Он включает пять основных компонентов:
- 91. Корневые ресурсы Корневыми ресурсами являются Java-классы, отмеченные аннотацией @Path. Эта аннотация включает атрибут value, задающий путь
- 92. Дочерние ресурсы Дочерними ресурсами (subresources) являются Java-классы, полученные в результате вызова локатора. Они аналогичны корневым ресурсам
- 93. Пример дочернего ресурса в JAX-RS import javax.ws.rs.GET; public class Department { @GET public String getDepartmentName() {
- 94. Пример метода ресурса в JAX-RS import java.util.List; import javax.ws.rs.GET; import javax.ws.rs.Path; @Path(value="/contacts") public class ContactsResource {
- 95. Методы дочерних ресурсов Методы дочерних ресурсов аналогичны методам ресурсов за тем исключением, что они дополнительно отмечены
- 96. Локаторы дочерних ресурсов Локаторы дочерних ресурсов представляют собой методы, служащие для уточнения того, какой ресурс должен
- 97. Пример локатора дочернего ресурса в JAX-RS @Path(value="/contacts") public class ContactsResource { @GET public List getContactss() {
- 98. Аннотации Рассмотрим основные аннотации и варианты их применения. Аннотация @Path Аннотация @Path используется для описания пути
- 99. @Path(value="/contacts") public class ContactsResource { @GET @Path(value="/{emailAddress:.+@.+\\.[a-z]+}") public ContactInfo getByEmailAddress( @PathParam(value="emailAddress") String emailAddress) { ... }
- 100. Аннотации @GET, @POST, @PUT, @DELETE, @HEAD Аннотации @GET, @POST, @PUT, @DELETE и @HEAD соответствуют типам HTTP-запросов.
- 101. Объявление новой аннотации, соответствующей HTTP-запросам типа GET import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import
- 102. Аннотации @Consumes и @Produces Аннотация @Consumes задает типы содержимого MIME, принимаемые ресурсом, а @Produces – типы
- 103. Примеры использования аннотаций @Consumes/@Produces @Path(value="/contacts") public class ContactsResource { @GET @Path(value="/{emailAddress:.+@.+\\.[a-z]+}") @Produces(value={"text/xml", "application/json"}) public ContactInfo getByEmailAddress(
- 104. Методы getByEmailAddress и addContactInfo, могут обрабатывать запросы с типом содержимого text/xml и application/json. Представление входящего или
- 105. Провайдеры Провайдерами в JAX-RS называются компоненты, определяющие три ключевых аспекта в поведении приложения: связывание с данными,
- 106. Провайдер MessageBodyWriter Экземпляры этого класса используются средой выполнения JAX-RS для сериализации представления возвращаемого клиенту ресурса. Реализации
- 107. @Provider @Produces("text/xml") public class ContactInfoWriter implements MessageBodyWriter { public long getSize(java.lang.Class type, java.lang.reflect.Type genericType, java.lang.annotation.Annotation[] annotations,
- 108. Класс ContactInfoWriter будет вызываться средой JAX-RS перед сериализацией возвращаемых клиенту ресурсов. Если метод isWriteable провайдера возвращает
- 109. Провайдер MessageBodyReader Провайдеры MessageBodyReaders выполняют функцию, обратную по отношению к MessageBodyWriter. Реализации JAX-RS самостоятельно поддерживают восстановление
- 110. @Provider @Consumes("text/xml") public class ContactInfoReader implements MessageBodyReader { public boolean isReadable(java.lang.Class type, java.lang.reflect.Type genericType, java.lang.annotation.Annotation[] annotations,
- 111. Подобно методу MessageBodyWriter.isWriteable, метод isReadable класса ContactInfoReader будет вызываться средой JAX-RS чтобы определить, способен ли провайдер
- 112. Классы, описывающие конфигурацию Выше были рассмотрены классы ресурсов JAX-RS, а также некоторые из классов-провайдеров (MessageBodyReader и
- 113. public class ContactInfoApplicaiton extends Application { public Set > getClasses() { Set > classes = new
- 114. Среда выполнения JAX-RS вызывает метод getClasses для получения списка классов, предоставляющих все необходимые метаданные. Применение синглетонов
- 115. Рассмотрим пример простейшего Rest сервиса(используется jersey 2.0) package ua.rest; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; import
- 116. Web.xml для этого сервиса имеет вид FirstRestFulApplication Rest org.glassfish.jersey.servlet.ServletContainer jersey.config.server.provider.packages ua.rest // где искать классы с
- 117. WebSockets Метод WebSockets, который появился в HTML5. WebSockets создает двунаправленные, дуплексные каналы связи. Соединение открывается посредством
- 118. Временная диаграмма на иллюстрирует связь с использованием WebSockets
- 119. JavaScript позволяет использовать WebSockets, если эту возможность поддерживает браузер. var ws = new WebSocket('ws://127.0.0.1:8080/async'); ws.onopen =
- 120. Отправляемые и получаемые данные могут быть любого типа. WebSockets можно рассматривать как TCP сокеты, так что
- 121. Response Headers Connection:Upgrade Sec-WebSocket-Location:ws://127.0.0.1:8080/async Sec-WebSocket-Origin:http://localhost:8080 Upgrade:WebSocket (Challenge Response):AC:23:A5:7E:5D:E5:04:6A:B5:F8:CC:E7:AB:6D:1A:39 Все заголовки используются процессом рукопожатия WebSocket для установки
- 122. На стороне сервера получим(используются WebSockets Tomcat): @ServerEndpoint("/ws") public class WebSocket { @OnOpen public void onOpen(Session session){
- 123. @OnMessage public void onMessage(String message, Session session, boolean last){ System.out.println("Message from " + session.getId() + ":
- 124. Клиент может иметь следующий вид: var socket = new WebSocket("ws://localhost:8084/WebApplication13/ws"); socket.onopen = function() { alert("Соединение установлено.");
- 125. socket.onerror = function(error) { alert("Ошибка " + error.message); }; function send() { var s = document.getElementById("in").value;
- 127. Скачать презентацию