Интерфейс API Java для веб-служб XML(JAX-WS), JSR 224 является важной составной частью платформ Java EE 5 и EE 6. Следующий выпуск интерфейса 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 в веб-приложении. Более подробно работа с клиентами освещена в учебном курсе Разработка клиентов веб-служб JAX-WS.
Важно! Для проектов Java EE 6 требуется Tomcat 7.x, GlassFish Server 3.x или Oracle WebLogic Server 12c.
Создание веб-службы
Цель этого упражнения состоит в создании проекта в соответствии с используемым контейнером развертывания. После создания проекта будет создана веб-служба.
Выбор контейнера
Веб-служба может быть развернута в веб-контейнере или в контейнере EJB. Это зависит от конкретной реализации. При создании приложения Java EE 6 веб-контейнер следует использовать в любом случае, поскольку компоненты EJB можно поместить прямо в веб-приложение. Например, если развертывание планируется на веб-сервере Tomcat, предоставляющем только веб-контейнер, следует создавать веб-приложение, а не модуль EJB.
Выберите "Файл > Создать проект" (Ctrl-Shift-N в Linux и Windows, ⌘-Shift-N в MacOS). Выберите "Веб-приложение" из категории "Java Web" или "Модуль EJB" из категории "Java EE".
Веб-службу JAX-WS можно создать в проекте Maven. Выберите "Файл > Создать проект" (Ctrl-Shift-N в Linux и Windows, ⌘-Shift-N в MacOS), затем выберите "Веб-приложение Maven" или "Модуль Maven EJB" из категории "Maven". Если ранее вы не использовали Maven со средой NetBeans, ознакомьтесь с документом Maven Best Practices (Рекомендации по Maven).
Дайте проекту имя CalculatorWSApplication. Выберите местоположение для проекта. Нажмите кнопку "Далее".
Выберите свой сервер и версию Java EE и щелкните "Готово".
Щелкните правой кнопкой мыши узел CalculatorWSApplication и выберите "Создать > Веб-служба".
Присвойте веб-службе имя CalculatorWS и введите org.me.calculator в поле "Пакет". Оставьте установленной кнопку-переключатель "Создать веб-службу с нуля".
Если создается проект Java EE 6, выберите "Реализовать веб-службу в качестве сеансного компонента без поддержки состояния".
Нажмите кнопку "Готово". В окне "Проекты" отображается структура новой веб-службы, а в области редактора отображается исходный код.
Добавление операции к веб-службам
Целью этого упражнения является добавление к веб-службам операции, выполняющей сложение двух чисел, полученных от клиента. В среде IDE NetBeans предоставляется диалоговое окно для добавления операции в веб-службу. Это диалоговое окно можно открыть либо в визуальном конструкторе, либо в контекстном меню веб-службы.
Внимание! В проектах Maven визуальный конструктор недоступен.
Для добавления операции в веб-службу выполните следующие действия.
Либо
измените представление "Конструктор" в окне редактора.
Либо
найдите узел веб-службы в окне "Проекты". Щелкните узел правой кнопкой мыши. Откроется контекстное меню.
Щелкните "Добавить операцию" либо в визуальном конструкторе, либо в контекстном меню. Откроется диалоговое окно "Добавление операции".
В верхней части диалогового окна "Добавить операцию" введите add в поле "Имя" и int в раскрывающемся списке "Тип возвращаемого значения".
В нижней части диалогового окна "Добавить операцию" нажмите кнопку "Добавить" и создайте параметр типа int с именем i.
Снова щелкните "Добавить" и создайте параметр типа int с именем j.
На экране должны быть представлены следующие параметры:
Нажмите кнопку "ОК" в нижней части диалогового окна "Добавить операцию". Вы вернетесь в редактор.
Удалите операцию по умолчанию hello. Для этого либо удалите метод hello() в исходном коде, либо выберите операцию hello в визуальном конструкторе и щелкните "Удалить операцию".
Теперь в Visual Designer отображается следующее:
Нажмите кнопку "Исходный код" и посмотрите на код, созданный в результате предыдущих действий. Он будет различаться в зависимости от того, создана служба как компонент EE6 без сохранения состояния или нет. Обратите внимание на разницу в снимках экрана ниже:
В редакторе расширьте схему операции add следующим образом (изменения выделены полужирным шрифтом):
@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, то тестового клиента нет, но в среде IDE можно открыть страницу, на которой можно убедиться в том, что веб-служба развернута. В настоящее время средства для проверки успешного развертывания модуля EJB недоступны.
Для проверки успешности развертывания на сервере выполните следующие действия.
Щелкните проект правой кнопкой мыши и выберите команду "Развернуть". Запускается сервер приложений, выполняется сборка и развертывание приложения на сервере приложений. За ходом выполнения этих операций можно наблюдать в приложении CalculatorWSApplication (запуск-развертывание) и на вкладках серверов GlassFish или Tomcat в окне вывода.
На вкладке "Проекты IDE" разверните узел "Веб-службы" проекта "CalculatorWSApplication". Щелкните правой кнопкой мыши узел "CalculatorWS" и выберите "Тестировать веб-службу".
Страница тестирования открывается в обозревателе, если веб-приложение развернуто на сервере GlassFish. В случае использования веб-сервера Tomcat и развертывания модулей EJB ситуация отличается:
Если развертывание выполнялось на GlassFish, введите на странице тестирования два числа, как показано ниже:
Отображается сумма этих двух чисел:
Если развертывание выполнялось на веб-сервере Tomcat, успешное выполнение операции будет обозначено следующим образом:
Полную версию EE6 службы калькулятора можно открыть, выбрав "Файл > Создать проект" (Ctrl-Shift-N в Linux и Windows, ⌘-Shift-N в MacOS) и переместившись к пункту "Примеры > Веб-службы Java > Калькулятор (EE6)".
Служба и клиент калькулятора Maven доступны в пункте "Примеры > Maven".
Использование веб-службы
После успешного развертывания веб-службы необходимо создать клиент для использования метода веб-службы add. Ниже будет рассмотрено создание трех клиентов: класса Java в приложении для Java SE, сервлета и страницы JSP в веб-приложении.
В этом разделе будет рассмотрено создание стандартного приложения Java. Мастер, используемый для создания приложения, также создает и класс Java. Затем средства среды IDE будут использоваться для создания клиента и использования веб-службы, созданной в начале этого руководства.
Выберите "Файл > Создать проект" (Ctrl-Shift-N в Linux и Windows, ⌘-Shift-N в MacOS). Выберите "Приложение Java" в категории "Java". Присвойте проекту имя CalculatorWS_Client_Application. Не снимайте флажок "Создать главный класс" и оставьте все прочие значения по умолчанию. Нажмите кнопку "Готово".
Щелкните правой кнопкой мыши узел CalculatorWS_Client_Application и выберите "Создать > Клиент веб-службы". Появится мастер создания клиента веб-службы.
Выберите проект в виде исходного файла WSDL. Нажмите кнопку "Обзор". В проекте CalculatorWSApplication перейдите к веб-службе CalculatorWS. Выберите веб-службу и нажмите кнопку "ОК".
Не выбирайте имя пакета. Оставьте это поле пустым.
Оставьте значения остальных параметров по умолчанию и нажмите кнопку "Готово".
В окне "Проекты" появится новый клиент веб-службы с узлом для созданного методаadd:
Дважды щелкните главный класс, чтобы открыть его в редакторе исходного кода. Перетащите узел add в местоположение ниже метода main().
На экране должны быть представлены следующие параметры:
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 можно щелкнуть правой кнопкой мыши в редакторе и выбрать "Вставка кода > Вызов операции веб-службы".
В теле метода main() замените комментарий TODO кодом, который инициализирует значения для i и j, вызывает add() и распечатывает результат.
public static void main(String[] args) { int i = 3; int j = 4; int result = add(i, j); System.out.println("Result = " + result);
}
Окружите код метода main() блоком try/catch, который распечатывает исключение.
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); }
}
Щелкните правой кнопкой мыши узел проекта и выберите "Выполнить".
В этом разделе будет рассмотрено создание нового веб-приложения и последующее создание сервлета. Затем этим сервлетом будет использоваться веб-служба, созданная в начале данного учебного курса.
Выберите "Файл > Создать проект" (Ctrl-Shift-N в Linux и Windows, ⌘-Shift-N в MacOS). Выберите "Веб-приложение" в категории "Java Web". Дайте проекту имя CalculatorWSServletClient. Нажмите кнопку "Далее", а затем нажмите кнопку "Готово".
Щелкните правой кнопкой мыши узел CalculatorWSServletClient и выберите "Создать > Клиент веб-службы".
Появится мастер "Новый клиент веб-службы".
Выберите проект в виде исходного файла WSDL. Щелкните "Обзор". В проекте CalculatorWSApplication перейдите к веб-службе CalculatorWS. Выберите веб-службу и нажмите кнопку "ОК".
Не выбирайте имя пакета. Оставьте это поле пустым.
Оставьте значения остальных параметров по умолчанию и нажмите кнопку "Готово".
Узел "Ссылки на веб-службу" в окне "Проекты" отражает структуру созданного клиента, включая операцию add, рассмотренную выше в этом учебном курсе:
Щелкните правой кнопкой мыши узел проекта CalculatorWSServletClient и выберите "Создать > Сервлет". Дайте сервлету имя ClientServlet и поместите его в пакет с именем org.me.calculator.client. Нажмите кнопку "Готово".
Чтобы сделать сервлет точкой входа приложения, щелкните правой кнопкой мыши узел проекта "CalculatorWSServletClient" и выберите "Свойства". Откройте "Свойства выполнения" и введите /ClientServlet в поле "Относительный адрес". Нажмите кнопку "ОК".
Если для ClientServlet.java появился значок ошибки, щелкните правой кнопкой мыши узел проекта и выберите "Очистить и построить".
В редакторе исходного кода перетащите операцию add в любое место тела класса ClientServlet. Метод add() отображается в конце кода класса.
Примечание. Вместо перетаскивания узла add можно щелкнуть правой кнопкой мыши в редакторе и выбрать "Вставка кода > Вызов операции веб-службы".
private int add(int i, int j) { org.me.calculator.CalculatorWS port = service.getCalculatorWSPort(); return port.add(i, j);
}
В методе processRequest() добавьте несколько пустых строк после следующей строки:
out.println("<h1>Servlet ClientServlet at " + request.getContextPath () + "</h1>");
Добавьте код, который инициализирует значения для i и j, вызывает add() и распечатывает результат. Добавленный код выделяется полужирным начертанием:
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(); } }
Окружите добавленный код блоком try/catch, который распечатывает исключение.
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(); } }
Щелкните правой кнопкой мыши узел проекта и выберите "Выполнить".
Запускается сервер, выполняются сборка и развертывание приложения, и открывается обозреватель, в котором отображается результат вычисления, как показано ниже:
Клиент 3: страница JSP в веб-приложении
В этом разделе описана процедура создания нового веб-приложения и использование веб-службы на странице JSP по умолчанию, созданной с помощью мастера "Веб-приложение".
Выберите "Файл > Создать проект" (Ctrl-Shift-N в Linux и Windows, ⌘-Shift-N в MacOS). Выберите "Веб-приложение" в категории "Java Web". Дайте проекту имя CalculatorWSJSPClient. Нажмите кнопку "Готово".
Щелкните правой кнопкой мыши узел CalculatorWSJSPClient и выберите "Создать > Клиент веб-службы".
Выберите проект в виде исходного файла WSDL. Щелкните "Обзор". В проекте CalculatorWSApplication перейдите к веб-службе CalculatorWS. Выберите веб-службу и нажмите кнопку "ОК".
Не выбирайте имя пакета. Оставьте это поле пустым.
Оставьте значения остальных параметров по умолчанию и нажмите кнопку "Готово".
В окне "Проекты" появится новый клиент веб-службы, как показано ниже:
В узле "Ссылки на веб-службы" разверните узел, соответствующий веб-службе. Теперь показана операция add, которую требуется вызывать посредством клиента.
Перетащите операцию add на страницу клиента index.jsp ниже тегов H1. Теперь на странице index.jsp отображается код для вызова операции службы, показанный ниже:
<%
try {
org.me.calculator.CalculatorWSService service =
new org.me.calculator.CalculatorWSService();
org.me.calculator.CalculatorWS port =
service.getCalculatorWSPort();
// TODO инициализация аргументов операции веб-службы
int i = 0;
int j = 0;
// TODO обработка результата
int result = port.add(i, j);
out.println("Результат = "+result);
} catch (Exception ex) {
// TODO обработка собственных исключений
}
%>
Измените значения для i и j с 0 на другие целые числа, например, на 3 и 4. В блоке "catch" замените закомментированную строчку "TODO" на out.println("exception" + ex);.
Щелкните правой кнопкой мыши узел проекта и выберите "Выполнить".
Запускается сервер, если он не был запущен ранее. После сборки и развертывания приложения открывается обозреватель, в котором отображается результат вычисления:
Для отправки комментариев и предложений, получения поддержки, а также для того, чтобы быть в курсе новых функций для разработки приложений Java EE в среде IDE NetBeans, подключайтесь к списку рассылки .