corner imagecorner image
FeaturesPluginsDocs & SupportCommunityPartners

Разработка клиентов веб-служб JAX-WS

В этом руководстве рассматривается использование предоставляемых IDE NetBeans 6.0 или 6.1 механизмов веб-служб для анализа веб-службы проверки орфографии Spell Checker и последующее создание взаимодействующего с ним веб-клиента.

Содержание

Содержимое на этой странице относится к среде IDE NetBeans 6.0 и 6.1

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

Программное обеспечение или ресурс Требуемая версия
Среда IDE NetBeans Web & Java EE, версия 6.1 или 6.0
Комплект для разработчика на языке Java (JDK) версия 6 или
версия 5
Веб-сервер или сервер приложений, совместимый с Java EE Веб-сервер Tomcat 6.0 и/или
Сервер приложений GlassFish v2

Серверы Tomcat и GlassFish могут быть установлены при помощи дистрибутива "Web and Java EE" среды IDE NetBeans. Также можно воспользоваться страницей загрузок GlassFish или страницей загрузок Apache Tomcat.

Ниже представлен внешний вид клиента со всеми данными, полученными от веб-службы:

 Отчет по проверке орфографии

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

Примечание: Используемая в этом руководстве веб-служба проверки орфографии предоставляется CDYNE Corporation. CDYNE разрабатывает, представляет на рынке и поддерживает комплексный набор веб-служб расширения данных, качества данных и анализа данных, а также интеграцию решений по бизнес-информации и аналитике. Веб-служба проверки орфографии является одной из веб-служб, предоставляемых CDYNE. Следует отметить, что стабильность приложений на основе одной или более веб-служб зависит от их доступности и надежности. Однако CDYNE на своей странице FAQ подчеркивает, что эти службы являются "100% ориентированными на доступность", и в случае "стихийного бедствия, террористического акта или другой катастрофы трафик веб-службы переводится на резервный центр обработки данных компании". NetBeans благодарит CDYNE за возможность написания этого руководства и за помощь в его разработке.

Применение веб-службы проверки орфографии

Для использования веб-службы необходимо создать клиент веб-службы. Для создания клиентов веб-служб в среде IDE NetBeans 6.1 и 6.0 имеется средство создания клиента — мастер "Web Service Client", создающий код для поиска веб-службы. Также предоставляются средства для разработки создаваемого клиента веб-службы – рабочая область, состоящую из узлов в окне "Projects". Эти средства входят в стандартный вариант установки среды IDE NetBeans, доступны без какой-либо предварительной подготовки и не требуют установки подключаемых модулей.

Создание клиента

Этот раздел посвящен работе с мастером для создания исходных объектов Java из файла WSDL веб-службы.

  1. Выберите "File > New Project" (Ctrl-Shift-N). В области "Categories" выберите "Web". В области "Projects" выберите "Web Application". Нажмите кнопку "Next". Назовите проект SpellCheckService и убедитесь, что в качестве целевого сервера указан соответствующий сервер. (Обратитесь к разделу "Введение" для получения подробной информации.) Нажмите кнопку "Finish".
  2. В окне "Projects" щелкните правой кнопкой мыши узел проекта SpellCheckService и выберите "New > Other". В мастере создания файла выберите "Web Services > Web Service Client". В мастере "Web Service Client" укажите URL-адрес веб-службы:

    http://ws.cdyne.com/SpellChecker/check.asmx

    Если компьютер защищен брандмауэром, то может потребоваться указать прокси-сервер, т.к. в противном случае файл WSDL не может быть загружен. Для этого выберите "Proxy Settings" в мастере создания клиента веб-службы и укажите адрес прокси-сервера и номер порта.

  3. Название пакета указывать не следует – в среде IDE NetBeans 6.1 это не допустимо. По умолчанию имя пакета класса клиента берется из WSDL. В данном случае это com.cdyne.ws.
  4. В среде 6.1 выберите версию JAX JAX-WS (некоторые более старые службы требуют наличия клиентов JAX-RPC). Нажмите кнопку "Finish".
  5. В окне "Projects" в узле "Web Service References" должно быть представлено следующее:
    Окно "Projects", узел "Web Service References"

В окне "Projects" показано, что посредством веб-службы "check" в приложении доступна операция "CheckTextBody". Операция "CheckTextBody" проверяет строку на предмет орфографических ошибок и возвращает данные для обработки клиентом. Эта операция используется в рамках настоящего руководства.

Окно "Files" с развернутым узлом build должно выглядеть следующим образом:

Окно "Files" со структурой пакетов в узле "Build"

В окне "Files" показаны клиентские заглушки, созданные мастером создания клиента веб-службы JAX-WS.

Разработка клиента

Существует много способов реализации клиента веб-службы. Файл WSDL веб-службы ограничивает тип информации, которую можно передать веб-службе, и тип информации, которую можно ожидать в ответ. Однако файл WSDL не налагает ограничений на то, как передается необходимая информация, и на то, из чего состоит интерфейс пользователя. Формируемая ниже реализация клиента состоит из страницы JSP, позволяющей пользователю вводить текст для проверки, и сервлета, передающего текст в веб-службу и затем отображающего отчет с результатами.

Написание кода страницы JSP

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

  1. В окне "Projects" разверните узел "Web Pages" и дважды щелкните index.jsp для его открытия в редакторе исходного кода.
  2. Скопируйте следующий код и вставьте его поверх тегов <body> в index.jsp:
    <body>
      <form name="Test" method="post" action="SpellCheckServlet">
         <p>Enter the text you want to check:</p>
         <p>
         <p><textarea rows="7" name="TextArea1" cols="40" ID="Textarea1"></textarea></p>
         <p>
         <input type="submit" value="Spell Check" name="spellcheckbutton">
      </form>
    </body>

    Этот код указывает, что при нажатии кнопки передачи запроса содержание textarea передается сервлету SpellCheckServlet.

Создание и написание кода сервлета

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

  1. Щелкните правой кнопкой мыши узел проекта в окне "Projects", выберите "New > Other", а затем "Web > Servlet". Нажмите кнопку "Next". Назовите сервлет SpellCheckServlet и введите clientservlet в раскрывающемся списке "Package". Нажмите кнопку "Next". Следует отметить, что отображением URL-адреса для этого сервлета является /SpellCheckServlet, что показано ниже:
    Вид в обозревателе

    Нажмите кнопку "Finish". Сервлет открывается в редакторе исходного кода.

  2. Поместите курсор в метод processRequest в редакторе исходного кода, добавьте несколько новых строк прямо в верхней части метода.
  3. Щелкните правой кнопкой мыши в области, созданной в предыдущем действии, и выберите "Web Service Client Resources > Call Web Service Operation". Щелкните операцию CheckTextBody в диалоговом окне "Select Operation to Invoke", как показано ниже:
    Диалоговое окно "Select Operation to Invoke" с операцией "CheckTextBody"

    Нажмите кнопку "OK".

    Примечание: Вместо вызова приведенного выше диалогового окна узел операции можно просто перетащить в редактор из окна "Projects".

    В верхней части метода processRequest находится фрагмент кода, вызывающий веб-службу:

    try { // Call Web Service Operation
    com.cdyne.ws.CheckSoap port = service.getCheckSoap();
    // TODO initialize WS operation arguments here
    java.lang.String bodyText = "";
    java.lang.String licenseKey = "";
    // TODO process result here
    com.cdyne.ws.DocumentSummary result = port.checkTextBody(bodyText, licenseKey);
    System.out.println("Result = " + result);
    } catch (Exception ex) {
    // TODO handle custom exceptions here
    }

    Этого метода вполне достаточно для работы с вызовом операций веб-службы. Кроме того, в верхней части класса объявлены следующие строки кода:

    @WebServiceRef(wsdlLocation = "http://ws.cdyne.com/SpellChecker/check.asmx?WSDL")
                    private Check service;
  4. Замените весь метод processRequest на следующий код. Встроенные комментарии в коде объясняют назначение каждой строки. Исправьте операторы импорта после вставки кода (щелкните правой кнопкой мыши в любом месте для открытия контекстного меню и выберите "Fix Imports").
    protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
    
        try {
    
            // Call Web Service Operation
            String TextArea1 = request.getParameter("TextArea1");
    
            com.cdyne.ws.CheckSoap port = service.getCheckSoap();
    
            // TODO initialize WS operation arguments here
            java.lang.String bodyText = TextArea1;
            java.lang.String licenseKey = "0";
    
            // TODO process result here
            com.cdyne.ws.DocumentSummary doc = port.checkTextBody(bodyText, licenseKey);
            String allcontent = doc.getBody();
    
            //Из полученной сводки документа следует определить количество слов с ошибками:
            int no_of_mistakes = doc.getMisspelledWordCount();
    
            //Из полученной сводки документа следует определить массив слов с ошибками: 
            List allwrongwords = doc.getMisspelledWord();
    
            out.println("<html>");
            out.println("<head>");
    
            //Вывод названия отчета в строке заголовка обозревателя: 
            out.println("<title>Spell Checker Report</title>");
            out.println("</head>");
            out.println("<body>");
    
            //Вывод названия отчета в качестве заголовка в теле отчета: 
            out.println("<h2><font color='red'>Spell Checker Report</font></h2>");
    
            //Вывод всего содержимого (с ошибками и без ошибок) между кавычками: 
            out.println("<hr>Your text:</b> \"" + allcontent + "\"" + "<p>");
    
            <b>//Для каждого массива слов с ошибками (один массив на одно слово) следует определить слово с ошибкой, число предлагаемых вариантов исправления и массив таких вариантов. Необходимо вывести на экран слово с ошибкой и количество предлагаемых вариантов исправления, а затем вывести каждый вариант из массива вариантов к текущему слову: 
            for (int i = 0; i < allwrongwords.size(); i++) {
                String onewrongword = ((Words) allwrongwords.get(i)).getWord();
                int onewordsuggestioncount = ((Words) allwrongwords.get(i)).getSuggestionCount();
                List allsuggestions = ((Words) allwrongwords.get(i)).getSuggestions();
                out.println("<hr><p>Wrong word:<font color='red'> " + onewrongword + "</font>");
                out.println("<p>" + onewordsuggestioncount + " suggestions:<br>");
                for (int k = 0; k < allsuggestions.size(); k++) {
                    String onesuggestion = (String) allsuggestions.get(k);
                    out.println(onesuggestion);
                }
            }
    
            <b>//Вывод линии после каждого массива слов с ошибками: </b>
            out.println("<hr>");
    
            <b>//Подведение итога путем указания числа ошибок и вывода ошибок: </b>
            out.println("<font color='red'><b>Summary:</b> " + no_of_mistakes + " mistakes (");
            for (int i = 0; i < allwrongwords.size(); i++) {
                String onewrongword = ((Words) allwrongwords.get(i)).getWord();
                out.println(onewrongword);
            }
    
            out.println(").");
            out.println("</font>");
            out.println("</body>");
            out.println("</html>");
            out.close();
    
        } catch (Exception ex) {
            System.out.println("exception" + ex);
            out.println("exception" + ex);
        }
    
        out.println("</body>");
        out.println("</html>");
        out.close();
                    }

    Следует отметить, что в приведенный выше код не входит обработка ошибок. Для получения более подробной информации см. Закрепление знаний на практике.

  5. Развертывание клиента

    Для сборки и выполнения веб-приложений в среде IDE используется сценарий сборки Ant. Этот сценарий сборки создается средой на основе параметров, указанных при создании проекта. Точную настройку этих параметров можно выполнить в диалоговом окне "Project Properties" (щелкните правой кнопкой мыши узел проекта в окне "Projects" и выберите "Properties").

    1. Щелкните правой кнопкой мыши узел проекта и выберите "Run". Через некоторое время приложение должно развернуть и отобразить страницу JSP, код которой был написан в предыдущем разделе.
    2. Введите произвольный текст, убедившись, что часть текста написана с ошибками:
      Страница JSP с текстом для проверки
    3. Нажмите кнопку "Spell Check" и ознакомьтесь с результатом:
      Отчет по проверке орфографии с отмеченными ошибками

    Закрепление материала на практике

    Теперь, после завершения создания клиента веб-службы в среде IDE, пришло время приобрести дополнительные навыки и сделать из приложения то, ради чего оно задумывалось. Ниже приведены две подходящие для начала задачи.

    • Добавление в сервлет кода обработки ошибок.
    • Переработка клиента таким образом, чтобы пользователь мог взаимодействовать с возвращенными из веб-службы данными. В качестве примера см. реализацию клиента на сайте CDYNE. Выглядит это следующим образом: Служба проверки орфографии CDYNE


    Дополнительная информация

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

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

Bookmark this page

del.icio.us furl simpy slashdot technorati digg
Companion
Projects:
MySQL Database Server   GlassFish Community: an Open Source Application Server   Open Solaris  Open JDK: an Open SourceJDK   Mobile & Embedded Community     Sponsored by 
Sponsored by Sun Microsystems