Я использовал праздник Qingming Festival, чтобы просмотреть соответствующий контент веб -сервиса и кратко изложить его принцип работы. Для справки от нуждающихся друзей и самих себя в будущем. Если есть какая -либо неуместная статья, пожалуйста, попросите своих друзей дать ценные предложения, чтобы поощрять друг друга.
В веб -службах мы должны сначала понять значение связанных терминов: WSDL, UDDI .... Введение связанных терминов здесь не будет повторено, но основное внимание будет уделено принципу.
В веб -службе есть три роли: поставщик услуг, сервисная запрашивателя и посредник услуг. Соотношение между этими тремя показана на рисунке 1-1
Реализация полной веб -службы включает в себя следующие шаги:
◆ Провайдеры веб -услуг проектируют и внедряют веб -сервисы, а также публикуют правильную отладку веб -службы через посредника веб -службы и зарегистрируйте его в Центре регистрации UDDI; (Публиковать)
◆ Запрашивание веб -службы запрашивает конкретную службу у посредника веб -службы, а посредник запрашивает в регистрационном центре UDDI на основе запроса на поиск услуги, соответствующей запросу; (Открытие)
◆ Промежуточный посредник веб -службы возвращает информацию о описании веб -службы, которая соответствует условиям для регистрации веб -службы. Информация о описании написана в WSDL и может быть прочитана различными машинами, которые поддерживают веб -сервисы; (Открытие)
◆ Используйте информацию о описании (WSDL), возвращаемой из посредника веб -службы для создания соответствующих сообщений SOAP и отправки их поставщику веб -услуг для реализации звонка веб -службы; (Привязка)
◆ Поставщик веб -услуг выполняет соответствующую веб -службу в соответствии с сообщением SOAP и возвращает результат службы в запрашитель Web Service. (Привязка)
Рисунок 1-1 Архитектура веб-службы
Примечание. Функция WSDL - это руководство по веб -сервису. Запрашивающая служба генерирует соответствующее сообщение SOAP на основе этого WSDL. После получения сообщения запроса SOAP, поставщик услуг связывает услугу.
Следующий код - это конфигурация сервлета в web.xml
<!- При формулировании параметров инициализации или пользовательских URL-адресов для сервлетных или JSP-страниц, вы должны сначала назвать страницу сервлета или JSP. Элемент сервлета используется для выполнения этой задачи. -> <servlet> <servlet-name> userservice </servlet.mame> <bertlet-class> com.sun.xml.ws.transport.http.servlet.wsservlet </servlet-class> <!-отметьте, загружает ли контейнер этот сервис, когда он начинается (Instand и вызов его нагрузки), тем больше, тем больше, тем больше, тем больше, тем больше, тем больше, тем больше, тем больше, чем положительный номер, тем больше, тем больше, тем больше, тем больше, тем больше, тем больше, тем больше, тем больше, тем больше, тем больше, тем больше, тем больше, чем положительный номер, тем больше. Приложение, когда он запускается-> <Load-on-Startup> 1 </load-on-startup> </servlet> <!-Сервер обычно обеспечивает URL-адрес по умолчанию для сервлета: http: // host/webapprefix/servlet/servletnam <Servlet Mapping> <Servlet-name> userservice </servlet-name> <!-Описывает URL относительно корня веб-приложения. Зеленый раздел является внешним интерфейсом службы. Найдите соответствующий файл JAX-WS.XML (как показано ниже) <endpoint name = "userport" реализация = "cn.ujn.service.userservice" url-pattern = "/user"> </endpoint>
Затем он связан с соответствующим соответствующим классом реализации cn.ujn.service.userservice. Тело тела сообщения сообщений SOAP, отправленное клиентом, содержит имя метода и информацию о параметрах, запрошенную клиентом.
Ниже приведено корпус сообщений SOAP, инкапсулированное клиентом (передача данных с сервером в режиме JSON) (Oblope Soap Rerquest):
<SOOFENV: OVVELOPE XMLNS: SOAPENV = "http://schemas.xmlsoap.org/soap/envelope/" xmlns: q0 = "http://ujn.cn/" xmlns: xsd = "http://www.w3. xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance">- <soapenv: body>- <q0: login> <arg0> {"username": "shq", "пароль": "shq"} </arg0> </q0: login> </soapen Ниже приведен протокол SOAP1.1, вызывающий веб -сервис
/** * Calling the web service through the SOAP1.1 protocol* * text/xml This is based on the soap1.1 protocol* * @param wsdl WSDL path* @param method method method name* @param namespace namespace* @param headerParameters headerParameters header parameter* @param bodyParameters body parameter* @param isBodyParametersNS body parameter Whether there is Пространство имен для параметра корпуса * @return String * @Throws Exception */ public Static String InvokeBySoAp11 (String WSDL, метод строки, пространство имен строк, карта <строка, строка> headerParameters, Map <String, String> BodyParameters, Bolean isbodyParametersns) THROWS Exception {StringBuffer SOOFRESULT = null; // Удалить? WSDL, получить список методов int length = wsdl.length (); wsdl = wsdl.substring (0, длина - 5); // Создание экземпляра URL со строкой как параметры url url = new URL (WSDL); // Создать соединение httpurlConnection conn = (httpurlconnection) url.openconcen (); // Установить метод запроса conn.setrequestmethod ("post"); // Если вы планируете использовать URL -соединение для ввода, установите флаг DOInput в true conn.setDoinput (true); // Если вы планируете использовать URL -соединение для вывода, установите флаг DOInput в true conn.setDoOutput (true); // В основном устанавливают атрибут (кВ) в заголовке запроса httpurlConnection conn.setRequestProperty ("content-type", "text/xml; charset = utf-8"); // Получить входной поток (по сравнению с клиентом, используйте outputstream) outputstream out = conn.getOutputStream (); // Получить сообщение SOAP1.1 Сообщение stringBuilder sb = new StringBuilder (); SB.Append ("<SOAP: OVVELOPE XMLNS: xsi =/" http://www.w3.org/2001/xmlschema-instance/ "xmlns: xsd =/" http://www.w3.org/2001/xmlschema/ " xmlns: soap =/"http://schemas.xmlsoap.org/soap/envelope//" "); sb.append ("xmlns: ns0 =/" " + пространство имен +"/""); SB.Append (">"); // Соберите заголовок сообщения if (headerparameters! = Null) {sb.append ("<SOAP: Header>"); for (entry <string, string> headerParameter: headerParameters .EntrySet ()) {sb.Append ("<ns0:"); sb.append (headerparameter.getkey ()); SB.Append (">"); sb.append (headerparameter.getvalue ()); sb.append ("</ns0:"); sb.append (headerparameter.getkey ()); SB.Append (">"); } sb.append ("</soap: header>"); } // Соберите тело сообщения SB.Append ("<SOAP: Body> <NS0:"); SB.Append (метод); SB.Append (">"); // Входной параметр if (bodyParameters! = Null) {for (intry <string, string> inputparameter: bodyParameters .entrySet ()) {if (isbodyParametersns) {sb.Append ("<ns0:"); sb.append (inputparameter.getkey ()); SB.Append (">"); sb.append (inputparameter.getvalue ()); sb.append ("</ns0:"); sb.append (inputparameter.getkey ()); SB.Append (">"); } else {sb.append ("<"); sb.append (inputparameter.getkey ()); SB.Append (">"); sb.append (inputparameter.getvalue ()); SB.Append ("</"); sb.append (inputparameter.getkey ()); SB.Append (">"); }}} sb.append ("</ns0:"); SB.Append (метод); SB.Append ("> </soap: body> </soap: envelope>"); // тестовая система.out.println (sb.toString ()); // написать сообщения SOAP (по сравнению с клиентом, out.write () используется) out.write (sb.tostring (). Getbytes ()); // Получить соответствующий код int на стороне сервера = conn.getResponsecode (); if (code == 200) {inputstream is = conn.getInputStream (); байт [] b = новый байт [1024]; int len = 0; SOAPOFRESULT = new StringBuffer (); // Читать определенное количество байтов из входного потока и хранить их в массиве буфера b. Возвращает фактическое количество байтов, прочитанных как целое число // Если нет доступных байтов, поскольку поток находится в конце файла, значение составляет -1; while ((len = is.read (b))! = -1) {// Преобразует байтовый массив в строку, используя названный Charset. String S = новая строка (B, 0, Len, "UTF-8"); SOOMOFRESULT.Append (S); }} conn.disconnect (); Вернуть SOAPOFRESULT == NULL? null: soamofresult.tostring (); } ПРИМЕЧАНИЕ. Клиент заблокирован после отправки сообщения запроса SOAP. Пока сервер не вернет код состояния.
Ниже приведен ответ сервера (конверт ответа SOAP):
<S: Overvelope xmlns: s = "http://schemas.xmlsoap.org/soap/envelope/">-<s: body>-<ns2: loginresponse xmlns: ns2 = "http://ujn.cn/"> <bertive> 1 </return> </nss2: gogonse> </S: тело> </s: конверт>
После получения данных JSON, отправленных сервером, клиент будет выполнять соответствующие операции анализа. следующее:
// Проанализируйте протокол SOAP (анализ DOM может использоваться только для анализа типов документов XML, в то время как сообщения SOAP находятся в формате данных XML) документ DOC = xmlutil.String2doc (result); Element ele = (element) doc.getelementsbytagname ("return"). Item (0); Метод string2doc (), используемый в методе, выглядит следующим образом: Публичный статический документ string2doc (string str) {// parse the Xml Document в DOM Tree DocumentBuilderFactory factory = documentBuilderFactory.newinStance (); Документ документ = null; DocumentBuilder Build; if (str == null || str.equals ("")) {return null; } try {inputStream bais = new BytearRayinputStream (str.getBytes ("UTF-8")); build = factory.newdocumentBuilder (); // Проанализируйте содержание данного InputStream в качестве документа XML и вернуть новый объект документа DOM. document = build.parse (bais); } catch (Exception e) {e.printstackTrace (); } return Document; } Согласно результату возврата, клиент выполнит соответствующую обработку.
Выше приведено основной принцип работы веб -сервисов.
Спасибо за чтение, я надеюсь, что это поможет вам. Спасибо за поддержку этого сайта!