blob: 8bf83fa26afdc42a523932b85cfc2d52176f25ee [file] [log] [blame]
//
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
//
= Начало работы с веб-службами JAX-WS
:jbake-type: tutorial
:jbake-tags: tutorials
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: Начало работы с веб-службами JAX-WS - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, Начало работы с веб-службами JAX-WS
link:http://www.jcp.org/en/jsr/detail?id=224[+API -интерфейс Java для веб-служб XML (JAX-WS), JSR 224+], является важным компонентом платформы Java EE. Следующий выпуск интерфейса API Java для RPC на основе XML 1.1 (JAX-RPC), JAX-WS упрощает задачу разработки веб-служб с помощью технологии Java. В нем решены некоторые проблемы JAX-RPC 1.1, и обеспечивается поддержка нескольких протоколов, например SOAP 1.1, SOAP 1.2, XML, а также возможность поддержки дополнительных протоколов наряду с HTTP. В JAX-WS для привязки данных используется JAXB 2.0; также поддерживается индивидуальная настройка для управления интерфейсами создаваемых интерфейсов конечных точек служб. Поддержка аннотаций в JAX-WS упрощает разработку веб-служб и уменьшает размер архивов JAR.
В этом документе рассматриваются основные принципы использования среды IDE для разработки веб-службы JAX-WS. После создания веб-службы будут написаны три разных клиента веб-служб, использующие веб-службу по сети, т.е. "потребляющие" веб-службу. Этими тремя клиентами будут класс Java в приложении для Java SE, сервлет и страница JSP в веб-приложении. Более подробно работа с клиентами освещена в учебном курсе link:./client.html[+Разработка клиентов веб-служб JAX-WS+].
image::images/netbeans-stamp-80-74-73.png[title="Содержимое этой страницы применимо к IDE NetBeans 7.2, 7.3, 7.4 и 8.0"]
* Использование веб-службы
*Для работы с этим учебным курсом требуется следующее программное обеспечение и ресурсы.*
|===
|Программное обеспечение или материал |Требуемая версия
|link:https://netbeans.org/downloads/index.html[+IDE NetBeans+] |Пакетная загрузка Java EE
|link:http://www.oracle.com/technetwork/java/javase/downloads/index.html[+Комплект для разработчика на языке Java (JDK)+] |JDK 7 или JDK 8
|Веб-сервер или сервер приложений, совместимый с Java EE |GlassFish Server Open Source Edition
Oracle WebLogic Server
|===
*Примечание. *Сервер GlassFish можно установить вместе с дистрибутивом Java EE среды IDE NetBeans. Также можно воспользоваться link:https://glassfish.java.net/download.html[+страницей загрузок GlassFish Server+] или link:http://tomcat.apache.org/download-60.cgi[+страницей загрузок Apache Tomcat+].
*Важно! *Для проектов Java EE требуется GlassFish Server или Oracle WebLogic Server 12c.
Включенный в комплект веб-сервер Tomcat лишь частично совместим с Java EE Однако веб-сервер Tomcat 7.x можно настроить так, чтобы он поддерживал определенную функциональность Java EE. Дополнительные сведения о добавлении поддержки Java EE в Tomcat см. в разделе link:http://openejb.apache.org/[+Проект Apache TomEE+].
== Создание веб-службы
Цель этого упражнения состоит в создании проекта в соответствии с используемым контейнером развертывания. После создания проекта будет создана веб-служба.
=== Выбор контейнера
Веб-служба может быть развернута в веб-контейнере или в контейнере EJB. Это зависит от конкретной реализации. При создании приложения Java EE всегда используйте веб-контейнер, так как это позволяет поместить компоненты EJB непосредственно в веб-приложение. Например, если развертывание планируется на веб-сервере Tomcat, предоставляющем только веб-контейнер, следует создавать веб-приложение, а не модуль EJB.
1. Выберите 'Файл' > 'Создать проект' (Ctrl-Shift-N в Windows и Linux, ⌘-Shift-N в ОС Mac). Выберите "Веб-приложение" из категории "Java Web" или "Модуль EJB" из категории "Java EE".
Веб-службу JAX-WS можно создать в проекте Maven. Выберите 'Файл' > 'Создать проект' (Ctrl-Shift-N в Linux и Windows, ⌘-Shift-N ы MacOS), а затем веб-приложение Maven или модуль Maven EJB в категории Maven. Если ранее вы не использовали Maven со средой NetBeans, ознакомьтесь с документом link:http://wiki.netbeans.org/MavenBestPractices[+Maven Best Practices+] (Рекомендации по Maven).
[start=2]
. Дайте проекту имя ``CalculatorWSApplication`` . Выберите местоположение для проекта. Нажмите кнопку "Далее".
[start=3]
. Выберите свой сервер и версию Java EE и щелкните "Готово".
Для использования сервера Oracle WebLogic link:../web/jsf-jpa-weblogic.html#01[+зарегистрируйте сервер с помощью среды IDE+]. Кроме этого, если вы используете сервер WebLogic, просмотрите экранную демонстрацию link:../javaee/weblogic-javaee-m1-screencast.html[+Deploying a Web Application to Oracle WebLogic+] (Развертывание веб-приложения на Oracle WebLogic).
=== Создание веб-службы из класса Java
1. Щелкните правой кнопкой мыши узел ``CalculatorWSApplication`` и выберите "Создать > Веб-служба".
2. Присвойте веб-службе имя ``CalculatorWS`` и введите ``org.me.calculator`` в поле "Пакет". Оставьте установленной кнопку-переключатель "Создать веб-службу с нуля".
3. При создании проекта Java EE на сервере GlassFish или WebLogic выберите 'Реализовать веб-службу' в качестве компонента сеанса без сохранения состояния.
image::images/generate-ws-ee6.png[]
[start=4]
. Нажмите кнопку 'Готово'. В окне "Проекты" отображается структура новой веб-службы, а в области редактора отображается исходный код.
== Добавление операции к веб-службам
Целью этого упражнения является добавление к веб-службам операции, выполняющей сложение двух чисел, полученных от клиента. IDE NetBeans обеспечивает диалоговое окно для добавления операции с веб-службой. Это диалоговое окно можно открыть либо в визуальном конструкторе, либо в контекстном меню веб-службы.
*Внимание!* В проектах Maven визуальный конструктор недоступен.
*Для добавления операции в веб-службу выполните следующие действия.*
1. Либо
* измените представление "Конструктор" в окне редактора.
image::images/design-view.png[]
Либо
* Найдите узел веб-службы в окне "Проекты". Щелкните узел правой кнопкой мыши. Откроется контекстное меню.
image::images/add-op-cx-menu-item.png[]
[start=2]
. Щелкните "Добавить операцию" либо в визуальном конструкторе, либо в контекстном меню. Откроется диалоговое окно "Добавление операции".
[start=3]
. В верхней части диалогового окна "Добавить операцию" введите ``add`` в 'Имя' и введите ``int`` в раскрывающийся список "Тип возвращаемого значения".
[start=4]
. В нижней части диалогового окна "Добавить операцию" нажмите кнопку "Добавить" и создайте параметр типа ``int`` с именем ``i`` .
[start=5]
. Снова щелкните "Добавить" и создайте параметр типа ``int`` с именем ``j`` .
На экране должны быть представлены следующие параметры:
image::images/jaxws-60-add-operation.png[]
[start=6]
. Нажмите кнопку "ОК" в нижней части диалогового окна "Добавить операцию". Вы вернетесь в редактор.
[start=7]
. Удалите операцию по умолчанию ``hello`` . Для этого либо удалите метод ``hello()`` в исходном коде, либо выберите операцию ``hello`` в визуальном конструкторе и щелкните "Удалить операцию".
Теперь в Visual Designer отображается следующее:
image::images/design-view-with-op.png[title="В Visual Designer веб-службы отображается добавленная операция"]
[start=8]
. Нажмите кнопку "Исходный код" и посмотрите на код, созданный в результате предыдущих действий. Он будет различаться в зависимости от того, как создана служба: в качестве компонента Java EE без сохранения состояния или обычным способом. Обратите внимание на разницу в снимках экрана ниже: (Служба Java EE 6 или Java EE 7, не реализованная в качестве компонента без сохранения состояния, похожа на службу Java EE 5.)
image::images/jaxws-60-source.png[] image::images/stateless-ejb-code1.png[]
*Примечание.* При работе в IDE NetBeans 7.3 и 7.4 вы увидите, что в созданной аннотации ``@WebService`` имя службы указано явно:
``@WebService(serviceName = "CalculatorWS")`` .
[start=9]
. В редакторе расширьте схему операции ``add`` следующим образом (изменения выделены полужирным шрифтом):
[source,java]
----
@WebMethod
public int add(@WebParam(name = "i") int i, @WebParam(name = "j") int j) {
*int k = i + j;*
return *k*;
}
----
Как видно из указанного кода, веб-служба просто получает два числа и затем возвращает их сумму. В следующем разделе рассматривается тестирование веб-службы в среде IDE.
== Развертывание и тестирование веб-службы
После развертывания веб-службы на сервере можно использовать среду IDE для открытия клиента тестирования сервера, если у сервера имеется такой клиент. Серверы GlassFish и WebLogic предоставляют тестовые клиенты.
Если используется веб-сервер Tomcat, клиент тестирования отсутствует. Вы можете только запустить проект и проверить, открывается ли страница веб-служб Tomcat. В этом случае, прежде чем запустить проект, необходимо сделать веб-службу точкой входа в приложение. Чтобы сделать веб-службу точкой входа в приложение щелкните правой кнопкой мыши узел проекта CalculatorWSApplication и выберите 'Свойства'. Откройте 'Свойства выполнения' и введите ``/CalculatorWS`` в поле 'Относительный адрес'. Нажмите кнопку "ОК". Запустите приложение (повторно щелкните правой кнопкой мыши узел проекта и выберите 'Выполнить').
*Для проверки успешности развертывания на сервере GlassFish или WebLogic выполните следующие действия.*
1. Щелкните проект правой кнопкой мыши и выберите команду "Развернуть". Запускается сервер приложений, выполняется сборка и развертывание приложения на сервере приложений. За ходом выполнения этих операций можно наблюдать в приложении CalculatorWSApplication (запуск-развертывание) и на вкладках серверов GlassFish или Tomcat в окне вывода.
2. На вкладке "Проекты IDE" разверните узел "Веб-службы" проекта "CalculatorWSApplication". Щелкните правой кнопкой мыши узел "CalculatorWS" и выберите "Тестировать веб-службу".
image::images/jax-ws-testws.png[]
Страница тестирования открывается в браузере, если веб-приложение развернуто на сервере GlassFish. В случае использования веб-сервера Tomcat и развертывания модулей EJB ситуация отличается:
* Если развертывание выполнялось на GlassFish, введите на странице тестирования два числа, как показано ниже:
image::images/jax-ws-tester.png[]
Отображается сумма этих двух чисел:
image::images/jax-ws-tester2.png[]
== [[Примеры]]
Можно открыть полную версию компонента сеанса Java EE без сохранения состояния службы Calculator. Для этого выберите Файл > Создать проект (Ctrl-Shift-N в Linux и Windows, + Shift + N в MacOS) и перейдите в раздел Образцы > Веб-службы Java > Calculator (EE6).
Служба и клиент калькулятора Maven доступны в пункте "Примеры > Maven".
== Использование веб-службы
После успешного развертывания веб-службы необходимо создать клиент для использования метода веб-службы ``add`` . Ниже будет рассмотрено создание трех клиентов: класса Java в приложении для Java SE, сервлета и страницы JSP в веб-приложении.
*Примечание.* Более расширенный учебный курс сосредоточен на клиентах: link:../../../kb/docs/websvc/client.html[+Разработка клиентов веб-служб JAX-WS+].
=== Клиент 1: класс Java в приложении для Java SE
В этом разделе будет рассмотрено создание стандартного приложения Java. Мастер, используемый для создания приложения, также создает и класс Java. Затем средства среды IDE будут использоваться для создания клиента и использования веб-службы, созданной в начале этого руководства.
1. Выберите 'Файл' > 'Создать проект' (Ctrl-Shift-N в Windows и Linux, ⌘-Shift-N в ОС Mac). Выберите "Приложение Java" в категории "Java". Присвойте проекту имя ``CalculatorWS_Client_Application`` . Не снимайте флажок "Создать главный класс" и оставьте все прочие значения по умолчанию. Нажмите кнопку 'Готово'.
2. Щелкните правой кнопкой мыши узел ``CalculatorWS_Client_Application`` и выберите "Создать > Клиент веб-службы". Появится мастер создания клиента веб-службы.
3. Выберите проект в виде исходного файла WSDL. Нажмите кнопку "Обзор". В проекте CalculatorWSApplication перейдите к веб-службе CalculatorWS. Выберите веб-службу и нажмите кнопку "ОК".
image::images/browse-ws.png[]
[start=4]
. Не выбирайте имя пакета. Оставьте это поле пустым.
image::images/javaclient-pkg.png[]
[start=5]
. Оставьте значения остальных параметров по умолчанию и нажмите кнопку "Готово".
В окне "Проекты" появится новый клиент веб-службы с узлом для созданного метода ``add`` :
image::images/ws-ref-in-client-project.png[]
[start=6]
. Дважды щелкните главный класс, чтобы открыть его в редакторе исходного кода. Перетащите узел ``add`` в местоположение ниже метода ``main()`` .
image::images/dnd-add.png[]
На экране должны быть представлены следующие параметры:
[source,java]
----
public static void main(String[] args) {
// TODO code application logic here
}
private static int add(int i, int j) {
org.me.calculator.CalculatorWS_Service service = new org.me.calculator.CalculatorWS_Service();
org.me.calculator.CalculatorWS port = service.getCalculatorWSPort();
return port.add(i, j);
}
----
*Примечание.* В качестве альтернативы, вместо перетаскивания узла ``add`` можно щелкнуть правой кнопкой мыши в редакторе, а затем выбрать 'Вставить код' > 'Dspdfnm операцию с веб-службой'.
[start=7]
. В теле метода ``main()`` замените комментарий TODO кодом, который инициализирует значения для ``i`` и ``j`` , вызывает ``add()`` и распечатывает результат.
[source,java]
----
public static void main(String[] args) {int i = 3;int j = 4;int result = add(i, j);System.out.println("Result = " + result);
}
----
[start=8]
. Окружите код метода ``main()`` блоком try/catch, который распечатывает исключение.
[source,java]
----
public static void main(String[] args) {try {int i = 3;int j = 4;int result = add(i, j);System.out.println("Result = " + result);} catch (Exception ex) {System.out.println("Exception: " + ex);}
}
----
[start=9]
. Щелкните правой кнопкой мыши узел проекта и выберите "Выполнить".
Теперь в окне "Вывод" отображается сумма:
[source,java]
----
compile:
run:
Result = 7
BUILD SUCCESSFUL (total time: 1 second)
----
=== Клиент 2: сервлет в веб-приложении
В этом разделе будет рассмотрено создание нового веб-приложения и последующее создание сервлета. Затем этим сервлетом будет использоваться веб-служба, созданная в начале данного учебного курса.
1. Выберите 'Файл' > 'Создать проект' (Ctrl-Shift-N в Windows и Linux, ⌘-Shift-N в ОС Mac). Выберите "Веб-приложение" в категории "Java Web". Дайте проекту имя ``CalculatorWSServletClient`` . Нажмите кнопку "Далее", а затем нажмите кнопку "Готово".
2. Щелкните правой кнопкой мыши узел ``CalculatorWSServletClient`` и выберите "Создать > Клиент веб-службы".
Появится мастер создания клиента веб-службы.
[start=3]
. В качестве источника WSDL выберите "Проект" и нажмите кнопку "Обзор", чтобы открыть диалоговое окно "Обзор веб-служб".
[start=4]
. В проекте CalculatorWSApplication выберите веб-службу CalculatorWS. Нажмите кнопку OK, чтобы закрыть диалоговое окно "Обзор веб-служб".
image::images/browse-ws.png[]
[start=5]
. Оставьте поле "Имя пакета" в мастере создания клиентов веб-службы пустым и не меняйте значения всех остальных параметров, заданные по умолчанию. Нажмите "Готово".
Узел "Ссылки на веб-службу" в окне "Проекты" отражает структуру только что созданного клиента, включая операцию ``add`` , рассмотренную ранее в этом учебном курсе.
[start=6]
. Щелкните правой кнопкой мыши узел проекта ``CalculatorWSServletClient`` и выберите "Создать > Сервлет". Дайте сервлету имя ``ClientServlet`` и поместите его в пакет с именем ``org.me.calculator.client`` . Нажмите кнопку 'Готово'.
[start=7]
. Чтобы сделать сервлет точкой ввода в приложении щелкните правой кнопкой мыши узел проекта CalculatorWSServletClient и выберите 'Свойства'. Откройте "Свойства выполнения" и введите ``/ClientServlet`` в поле "Относительный адрес". Нажмите кнопку "ОК".
[start=8]
. При наличии значков ошибок для ``ClientServlet.java`` щелкните правой кнопкой мыши узел проекта и выберите 'Очистка и сборка'.
[start=9]
. В методе ``processRequest()`` добавьте несколько пустых строк после следующей строки:
[source,xml]
----
out.println("<h1>Servlet ClientServlet at " + request.getContextPath () + "</h1>");
----
[start=10]
. В редакторе исходного кода перетащите операцию ``add`` в любое место тела класса ``ClientServlet`` . Метод ``add()`` отображается в конце кода класса.
*Примечание.* В качестве альтернативы, вместо перетаскивания узла ``add`` можно щелкнуть правой кнопкой мыши в редакторе, а затем выбрать 'Вставить код' > 'Dspdfnm операцию с веб-службой'.
[source,java]
----
private int add(int i, int j) {org.me.calculator.CalculatorWS port = service.getCalculatorWSPort();return port.add(i, j);
}
----
[start=11]
. Добавьте код, который инициализирует значения для ``i`` и ``j`` , вызывает ``add()`` и распечатывает результат. Добавленный код выделяется *полужирным начертанием*:
[source,xml]
----
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet ClientServlet</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Servlet ClientServlet at " + request.getContextPath () + "</h1>");
* int i = 3;
int j = 4;
int result = add(i, j);
out.println("Result = " + result);*
out.println("</body>");
out.println("</html>");
} finally { out.close();}}
----
[start=12]
. Окружите добавленный код блоком try/catch, который распечатывает исключение.
[source,xml]
----
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet ClientServlet</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Servlet ClientServlet at " + request.getContextPath () + "</h1>");
*try {*
int i = 3;int j = 4;int result = add(i, j);out.println("Result = " + result);
*} catch (Exception ex) {
out.println("Exception: " + ex);
}*
out.println("</body>");
out.println("</html>");
} finally { out.close();}}
----
[start=13]
. Щелкните правой кнопкой мыши узел проекта и выберите "Выполнить".
Запускается сервер, выполняются сборка и развертывание приложения, и открывается браузер, в котором отображается результат вычисления, как показано ниже:
image::images/jaxws-60-webclient.png[]
=== Клиент 3: страница JSP в веб-приложении
В этом разделе описана процедура создания нового веб-приложения и использование веб-службы на странице JSP по умолчанию, созданной с помощью мастера "Веб-приложение".
*Примечание.* Если необходимо запустить клиент веб-приложения JSP в Oracle WebLogic см. link:../web/jsf-jpa-weblogic.html[+Запуск приложения Java Server Faces 2.0 в WebLogic+].
1. Выберите 'Файл' > 'Создать проект' (Ctrl-Shift-N в Windows и Linux, ⌘-Shift-N в ОС Mac). Выберите "Веб-приложение" в категории "Java Web". Дайте проекту имя ``CalculatorWSJSPClient`` . Нажмите кнопку "Далее", а затем нажмите кнопку "Готово".
2. Раскройте узел "Веб-страницы" под узлом проекта и удалите файл ``index.html`` .
3. Щелкните правой кнопкой мыши узел ``Веб-страницы`` и выберите пункт меню "Создать > JSP".
Если в меню отсутствует пункт "JSP", выберите "Создать > Другие", затем выберите JSP в категории "Веб" мастера создания файлов.
[start=4]
. В качестве имени файла JSP в мастере создания файлов укажите *index*. Нажмите "Готово".
[start=5]
. Щелкните правой кнопкой мыши узел ``CalculatorWSJSPClient`` и выберите "Создать > Клиент веб-службы".
[start=6]
. Выберите проект в виде исходного файла WSDL. Нажмите кнопку "Обзор". В проекте CalculatorWSApplication перейдите к веб-службе CalculatorWS. Выберите веб-службу и нажмите кнопку "ОК".
image::images/browse-ws.png[]
[start=7]
. Не выбирайте имя пакета. Оставьте это поле пустым.
[start=8]
. Оставьте значения остальных параметров по умолчанию и нажмите кнопку "Готово".
В окне "Проекты" появится новый клиент веб-службы, как показано ниже:
image::images/ws-ref-in-jsp-client.png[]
[start=9]
. В узле "Ссылки на веб-службы" разверните узел, соответствующий веб-службе. Теперь показана операция ``add`` , которую требуется вызывать посредством клиента.
[start=10]
. Перетащите операцию ``add`` на страницу клиента ``index.jsp`` ниже тегов H1. Теперь на странице ``index.jsp`` отображается код для вызова операции службы, показанный ниже:
[source,java]
----
<%
try {
org.me.calculator.CalculatorWSService service = new org.me.calculator.CalculatorWSService();
org.me.calculator.CalculatorWS port = service.getCalculatorWSPort();
// TODO initialize WS operation arguments here
int i = 0;
int j = 0;
// TODO process result here
int result = port.add(i, j);
out.println("Result = "+result);
} catch (Exception ex) {
// TODO handle custom exceptions here
}
%>
----
Измените значения для ``i`` и ``j`` с 0 на другие целые числа, например, на 3 и 4. В блоке "catch" замените закомментированную строчку "TODO" на ``out.println("exception" + ex);`` .
[start=11]
. Щелкните правой кнопкой мыши узел проекта и выберите "Выполнить".
Запускается сервер, если он не был запущен ранее. После сборки и развертывания приложения открывается браузер, в котором отображается результат вычисления:
image::images/jax-ws-project-jsp-result.png[]
link:/about/contact_form.html?to=3&subject=Feedback:%20JAX-WS%20Services%20in%20NetBeans%20IDE[+Отправить отзыв по этому учебному курсу+]
== Дополнительные сведения
Подробнее об использовании IDE NetBeans для разработки приложений Java EE см. в следующих ресурсах:
* link:./client.html[+Разработка клиентов веб-служб JAX-WS+]
* link:./rest.html[+Начало работы с веб-службами RESTful+]
* link:./wsit.html[+Расширенные возможности взаимодействия веб-служб+]
* link:../../../kb/trails/web.html[+Учебная карта по веб-службам+]
Для отправки комментариев и предложений, получения поддержки и новостей о последних разработках, связанных с Java EE IDE NetBeans link:../../../community/lists/top.html[+присоединяйтесь к списку рассылки nbj2ee@netbeans.org+].