corner imagecorner image
IDEPlatformPluginsDocs & SupportCommunityPartners

Начало работы с веб-службами JAX-WS

Интерфейс 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.

Содержание

Содержимое этой страницы относится к среде IDE NetBeans версий 6.9-7.1

Для работы с этим учебным курсом требуется следующее программное обеспечение и ресурсы.

Программное обеспечение или ресурс Требуемая версия
Среда IDE NetBeans Пакет загрузки Java
Комплект для разработки на языке Java (JDK) JDK 6 или JDK 76
Внимание. Для среды IDE NetBeans 6.9 требуется JDK 6
Веб-сервер или сервер приложений, совместимый с Java EE Веб-сервер Tomcat 6.x-7.0
GlassFish Server Open Source Edition
Сервер Oracle WebLogic

Примечание. Оба сервера, Tomcat и GlassFish, можно установить с помощью сети Интернет и дистрибутива Java EE среды IDE NetBeans. Также можно воспользоваться страницей загрузок GlassFish Server или страницей загрузок Apache Tomcat.

Важно! Для проектов Java EE 6 требуется Tomcat 7.x, GlassFish Server 3.x или Oracle WebLogic Server 12c.

Создание веб-службы

Цель этого упражнения состоит в создании проекта в соответствии с используемым контейнером развертывания. После создания проекта будет создана веб-служба.

Выбор контейнера

Веб-служба может быть развернута в веб-контейнере или в контейнере EJB. Это зависит от конкретной реализации. При создании приложения Java EE 6 веб-контейнер следует использовать в любом случае, поскольку компоненты EJB можно поместить прямо в веб-приложение. Например, если развертывание планируется на веб-сервере Tomcat, предоставляющем только веб-контейнер, следует создавать веб-приложение, а не модуль EJB.

  1. Выберите "Файл > Создать проект" (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).

  2. Дайте проекту имя CalculatorWSApplication. Выберите местоположение для проекта. Нажмите кнопку "Далее".
  3. Выберите свой сервер и версию Java EE и щелкните "Готово".

    Для использования сервера Oracle WebLogic зарегистрируйте сервер с помощью среды IDE. Кроме этого, если вы используете сервер WebLogic, просмотрите демо-ролик Deploying a Web Application to Oracle WebLogic (Развертывание веб-приложения на Oracle WebLogic).

Создание веб-службы из класса Java

  1. Щелкните правой кнопкой мыши узел CalculatorWSApplication и выберите "Создать > Веб-служба".
  2. Присвойте веб-службе имя CalculatorWS и введите org.me.calculator в поле "Пакет". Оставьте установленной кнопку-переключатель "Создать веб-службу с нуля".
  3. Если создается проект Java EE 6, выберите "Реализовать веб-службу в качестве сеансного компонента без поддержки состояния".
    Мастер создания веб-службы для EE 6 с параметрами компонента
  4. Нажмите кнопку "Готово". В окне "Проекты" отображается структура новой веб-службы, а в области редактора отображается исходный код.

Добавление операции к веб-службам

Целью этого упражнения является добавление к веб-службам операции, выполняющей сложение двух чисел, полученных от клиента. В среде IDE NetBeans предоставляется диалоговое окно для добавления операции в веб-службу. Это диалоговое окно можно открыть либо в визуальном конструкторе, либо в контекстном меню веб-службы.

Внимание! В проектах Maven визуальный конструктор недоступен.

Для добавления операции в веб-службу выполните следующие действия.

  1. Либо
    • измените представление "Конструктор" в окне редактора.
      Представление "Проектирование" редактора веб-службы

    Либо

    • найдите узел веб-службы в окне "Проекты". Щелкните узел правой кнопкой мыши. Откроется контекстное меню.
      Контекстное меню узла веб-службы с выделенным элементом "Добавить операцию"
  2. Щелкните "Добавить операцию" либо в визуальном конструкторе, либо в контекстном меню. Откроется диалоговое окно "Добавление операции".
  3. В верхней части диалогового окна "Добавить операцию" введите add в поле "Имя" и int в раскрывающемся списке "Тип возвращаемого значения".
  4. В нижней части диалогового окна "Добавить операцию" нажмите кнопку "Добавить" и создайте параметр типа int с именем i.
  5. Снова щелкните "Добавить" и создайте параметр типа int с именем j.

    На экране должны быть представлены следующие параметры:


    Диалоговое окно "Добавить операцию"
  6. Нажмите кнопку "ОК" в нижней части диалогового окна "Добавить операцию". Вы вернетесь в редактор.
  7. Удалите операцию по умолчанию hello. Для этого либо удалите метод hello() в исходном коде, либо выберите операцию hello в визуальном конструкторе и щелкните "Удалить операцию".

    Теперь в Visual Designer отображается следующее:


    Visual Designer с веб-службой и добавленной операцией
  8. Нажмите кнопку "Исходный код" и посмотрите на код, созданный в результате предыдущих действий. Он будет различаться в зависимости от того, создана служба как компонент EE6 без сохранения состояния или нет. Обратите внимание на разницу в снимках экрана ниже:
    Результат: EE5Результат: компонент EE 6 без сохранения состояния
  9. В редакторе расширьте схему операции 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 недоступны.

Для проверки успешности развертывания на сервере выполните следующие действия.

  1. Щелкните проект правой кнопкой мыши и выберите команду "Развернуть". Запускается сервер приложений, выполняется сборка и развертывание приложения на сервере приложений. За ходом выполнения этих операций можно наблюдать в приложении CalculatorWSApplication (запуск-развертывание) и на вкладках серверов GlassFish или Tomcat в окне вывода.
  2. На вкладке "Проекты IDE" разверните узел "Веб-службы" проекта "CalculatorWSApplication". Щелкните правой кнопкой мыши узел "CalculatorWS" и выберите "Тестировать веб-службу".
    Вкладка "Проекты" с пунктом контекстного меню "Тестировать веб-службу"

    Страница тестирования открывается в обозревателе, если веб-приложение развернуто на сервере GlassFish. В случае использования веб-сервера Tomcat и развертывания модулей EJB ситуация отличается:

    • Если развертывание выполнялось на GlassFish, введите на странице тестирования два числа, как показано ниже:
      Страница тестирования веб-службы, если развертывание службы выполнялось на сервере GlassFish

      Отображается сумма этих двух чисел:


      Веб-страница с результатами тестирования веб-службы
    • Если развертывание выполнялось на веб-сервере Tomcat, успешное выполнение операции будет обозначено следующим образом:
      Веб-страница при успешном развертывании на сервере Tomcat

Примеры

Полную версию EE6 службы калькулятора можно открыть, выбрав "Файл > Создать проект" (Ctrl-Shift-N в Linux и Windows, ⌘-Shift-N в MacOS) и переместившись к пункту "Примеры > Веб-службы Java > Калькулятор (EE6)".

Служба и клиент калькулятора Maven доступны в пункте "Примеры > Maven".

Использование веб-службы

После успешного развертывания веб-службы необходимо создать клиент для использования метода веб-службы add. Ниже будет рассмотрено создание трех клиентов: класса Java в приложении для Java SE, сервлета и страницы JSP в веб-приложении.

Примечание. Более подробно работа с клиентами освещена в учебном курсе Разработка клиентов веб-служб JAX-WS.

Клиент 1: класс Java в приложении для Java SE

В этом разделе будет рассмотрено создание стандартного приложения Java. Мастер, используемый для создания приложения, также создает и класс Java. Затем средства среды IDE будут использоваться для создания клиента и использования веб-службы, созданной в начале этого руководства.

  1. Выберите "Файл > Создать проект" (Ctrl-Shift-N в Linux и Windows, ⌘-Shift-N в MacOS). Выберите "Приложение Java" в категории "Java". Присвойте проекту имя CalculatorWS_Client_Application. Не снимайте флажок "Создать главный класс" и оставьте все прочие значения по умолчанию. Нажмите кнопку "Готово".
  2. Щелкните правой кнопкой мыши узел CalculatorWS_Client_Application и выберите "Создать > Клиент веб-службы". Появится мастер создания клиента веб-службы.
  3. Выберите проект в виде исходного файла WSDL. Нажмите кнопку "Обзор". В проекте CalculatorWSApplication перейдите к веб-службе CalculatorWS. Выберите веб-службу и нажмите кнопку "ОК".
    Просмотрите диалоговое окно "Веб-службы", в котором отображается служба CalculatorWS
  4. Не выбирайте имя пакета. Оставьте это поле пустым.
    В мастере клиента новой веб-службы отображается имя пакета
  5. Оставьте значения остальных параметров по умолчанию и нажмите кнопку "Готово".

    В окне "Проекты" появится новый клиент веб-службы с узлом для созданного методаadd:


    Окно "Проекты" с новым клиентом веб-службы в приложении для Java SE
  6. Дважды щелкните главный класс, чтобы открыть его в редакторе исходного кода. Перетащите узел add в местоположение ниже метода main().
    Перетаскивание операции add в тело главного класса

    На экране должны быть представлены следующие параметры:

    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 можно щелкнуть правой кнопкой мыши в редакторе и выбрать "Вставка кода > Вызов операции веб-службы".

  7. В теле метода 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); }
  8. Окружите код метода 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);
    } }
  9. Щелкните правой кнопкой мыши узел проекта и выберите "Выполнить".

    Теперь в окне "Вывод" отображается сумма:

        compile:
        run:
        Result = 7
          BUILD SUCCESSFUL (total time: 1 second)

Клиент 2: сервлет в веб-приложении

В этом разделе будет рассмотрено создание нового веб-приложения и последующее создание сервлета. Затем этим сервлетом будет использоваться веб-служба, созданная в начале данного учебного курса.

  1. Выберите "Файл > Создать проект" (Ctrl-Shift-N в Linux и Windows, ⌘-Shift-N в MacOS). Выберите "Веб-приложение" в категории "Java Web". Дайте проекту имя CalculatorWSServletClient. Нажмите кнопку "Далее", а затем нажмите кнопку "Готово".
  2. Щелкните правой кнопкой мыши узел CalculatorWSServletClient и выберите "Создать > Клиент веб-службы".

    Появится мастер "Новый клиент веб-службы".

  3. Выберите проект в виде исходного файла WSDL. Щелкните "Обзор". В проекте CalculatorWSApplication перейдите к веб-службе CalculatorWS. Выберите веб-службу и нажмите кнопку "ОК".
    Просмотрите диалоговое окно "Веб-службы", в котором отображается служба CalculatorWS
  4. Не выбирайте имя пакета. Оставьте это поле пустым.
  5. Оставьте значения остальных параметров по умолчанию и нажмите кнопку "Готово".

    Узел "Ссылки на веб-службу" в окне "Проекты" отражает структуру созданного клиента, включая операцию add, рассмотренную выше в этом учебном курсе:


    Окно "Проекты" с новым клиентом веб-службы в сервлете
  6. Щелкните правой кнопкой мыши узел проекта CalculatorWSServletClient и выберите "Создать > Сервлет". Дайте сервлету имя ClientServlet и поместите его в пакет с именем org.me.calculator.client. Нажмите кнопку "Готово".
  7. Чтобы сделать сервлет точкой входа приложения, щелкните правой кнопкой мыши узел проекта "CalculatorWSServletClient" и выберите "Свойства". Откройте "Свойства выполнения" и введите /ClientServlet в поле "Относительный адрес". Нажмите кнопку "ОК".
  8. Если для ClientServlet.java появился значок ошибки, щелкните правой кнопкой мыши узел проекта и выберите "Очистить и построить".
  9. В редакторе исходного кода перетащите операцию add в любое место тела класса ClientServlet. Метод add() отображается в конце кода класса.

    Примечание. Вместо перетаскивания узла add можно щелкнуть правой кнопкой мыши в редакторе и выбрать "Вставка кода > Вызов операции веб-службы".

    private int add(int i, int j) {
    org.me.calculator.CalculatorWS port = service.getCalculatorWSPort();
    return port.add(i, j); }
  10. В методе processRequest() добавьте несколько пустых строк после следующей строки:
        out.println("<h1>Servlet ClientServlet at " + request.getContextPath () + "</h1>");
  11. Добавьте код, который инициализирует значения для 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();
    }
    }
  12. Окружите добавленный код блоком 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();
    }
    }
  13. Щелкните правой кнопкой мыши узел проекта и выберите "Выполнить".

    Запускается сервер, выполняются сборка и развертывание приложения, и открывается обозреватель, в котором отображается результат вычисления, как показано ниже:
    Окно "Проекты" с новым клиентом веб-службы в сервлете

Клиент 3: страница JSP в веб-приложении

В этом разделе описана процедура создания нового веб-приложения и использование веб-службы на странице JSP по умолчанию, созданной с помощью мастера "Веб-приложение".

Примечание. Если веб-приложение JSP требуется запустить на Oracle WebLogic, обратитесь к документу Running a Java Server Faces 2.0 Application on WebLogic (Выполнение приложения a Java Server Faces 2.0 на WebLogic).

  1. Выберите "Файл > Создать проект" (Ctrl-Shift-N в Linux и Windows, ⌘-Shift-N в MacOS). Выберите "Веб-приложение" в категории "Java Web". Дайте проекту имя CalculatorWSJSPClient. Нажмите кнопку "Готово".
  2. Щелкните правой кнопкой мыши узел CalculatorWSJSPClient и выберите "Создать > Клиент веб-службы".
  3. Выберите проект в виде исходного файла WSDL. Щелкните "Обзор". В проекте CalculatorWSApplication перейдите к веб-службе CalculatorWS. Выберите веб-службу и нажмите кнопку "ОК".
    Просмотрите диалоговое окно "Веб-службы", в котором отображается служба CalculatorWS
  4. Не выбирайте имя пакета. Оставьте это поле пустым.
  5. Оставьте значения остальных параметров по умолчанию и нажмите кнопку "Готово".

    В окне "Проекты" появится новый клиент веб-службы, как показано ниже:


    Окно "Проекты" с новым клиентом веб-службы в сервлете
  6. В узле "Ссылки на веб-службы" разверните узел, соответствующий веб-службе. Теперь показана операция add, которую требуется вызывать посредством клиента.
  7. Перетащите операцию 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);.

  8. Щелкните правой кнопкой мыши узел проекта и выберите "Выполнить".

    Запускается сервер, если он не был запущен ранее. После сборки и развертывания приложения открывается обозреватель, в котором отображается результат вычисления:


    Страница JSP с результатом


Дополнительные сведения

Дополнительные сведения о разработке приложений для Java EE в среде IDE NetBeans приведены в следующих материалах:

Для отправки комментариев и предложений, получения поддержки, а также для того, чтобы быть в курсе новых функций для разработки приложений Java EE в среде IDE NetBeans, подключайтесь к списку рассылки .