Теперь попробую показать на простейшем примере Web-приложения что такое Spring. Для простоты сделаем калькулятор, который лишь умеет складывать два числа :)

Под катом всякий код и коментарии, лишь для тех кто не видел спринга.

Для начала создадим /WEB-INF/web.xml такого вида:

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="2.4"
         xmlns="http://java.sun.com/xml/ns/j2ee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" >

   <servlet>
        <servlet-name>springServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/spring.xml</param-value>
        </init-param>
    </servlet>

    <servlet-mapping>
        <servlet-name>springServlet</servlet-name>
        <url-pattern>*.html</url-pattern>
    </servlet-mapping>
</web-app>

вот этот вот springServlet и отвечает за весь спринг. В данном случае мы его связали с урлами *.html, но никто не мешает добавить также

<servlet-mapping>
        <servlet-name>springServlet</servlet-name>
        <url-pattern>*.xml</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>springServlet</servlet-name>
        <url-pattern>*.jpg</url-pattern>
    </servlet-mapping>

и пр. что душе угодно.

Главное это параметр инициализации contextConfigLocation. В нем содержится путь к конфигурационному файлу спринга.
До него мы еще дойдем, а сейчас попробуем написать наш контроллер и jsp отображения результата.

Контроллер должен наследовать класс org.springframework.web.servlet.mvc.AbstractController
Для нашего примера это будет чтото вроде такого:
SumController.java

public class SumController extends AbstractController {
    protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception {
        ModelAndView mav = new ModelAndView("/calc.jsp");
        try {
            int x = Integer.parseInt(request.getParameter("x"));
            int y = Integer.parseInt(request.getParameter("y"));
            int sum = x + y;
            mav.addObject("sum", sum);
            mav.addObject("x", x);
            mav.addObject("y", y);
        } catch (NumberFormatException e) {
            e.printStackTrace();
        }
        return mav;
    }
}

метод handleRequestInternal (request, response) отвечает за обработку запроса. На выходе он выдает ModelAndView, это класс содержащий информацию об отображении (View) и данные для нее (Model). В данном случае View это страница /calc.jsp"", которая сможет брать из атрибутов запроса параметры «x», «y» и «sum». Вообще, если говорит до конца, то /calc.jsp"" это совсем не обязательно файл /calc.jsp, за то, какой будет конечный файл, отвечает viewResolver, который настраивается в конфиге спринга. Но это позже.
А Model в данном случа хранит наши цифры, ну и в общемто можно положить любые объекты, которые надо обработать в JSP. В обработчике можно не возвращать объект ModelAndView, можно вернуть null, и сделать всю работу по выдаче данных самому, через response.getOutputStream () и т.д., что тоже иногда полезно.

Теперь напишем наш calc.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>Summer</title>
  </head>
  <body>
    <form>
        <input type="text" name="x" value="${x}"/>
        +
        <input type="text" name="y" value="${y}"/>
        = ${sum}
        <br/>
        <input type="submit" value="Calc"/>
    </form>
  </body>
</html>

Ну тут как обычно все, без комментариев.

Осталось все это связать через конфиг спринга. Сделаем такой WEB-INF/spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

    <bean id="Calc" class="example.simplespring.ctrl.SumController" >
    </bean>

    <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
                <prop key="/calc.html">Calc</prop>
            </props>
        </property>
    </bean>
</beans>

В общемто это все, можно сохранять, компилировать, и пробовать URL /calc.html

А я теперь подробней объясню что это было :)
Конфиг содержит список бинов. Это не те которые EJB, а обычные JavaBean, т.е. объекты с геттерами, сеттерами, и пустым конструктором. Пустой конструктор для Спринга даже не обязательно.
По примеру, наверное, понятно что мы делаем элемент <bean> с атрибутами:

  • id — идентификатор для текущего конфига
  • class — собственно сам класс
  • singleton — true/false. Если не указать, то значение равно true, т.е. всем остальным будет передан один и тотже экземпляр.
  • init-method — имя метода, который вызовется после заполнения всех пропертей, но до запуска самого приложения. Это в случае если объект требует какойто инициализации.
  • пр. атрибуты, которые для начала не так важны, если что, то потом о них подробней.

Внутри элемента можем настроить этот объект, точне заполнить его проперти нужными нам значениями. Для этого есть элемент <property> с атрибутом name содержащим название. Название это имя сеттера, без set и с маленькой буквы. т.е. для setFontSize (size) это будет просто fontSize. Вторым атрибутом должен быть или атрибут value, в случае если мы напрямую указываем значение (текстовое или числовое), или ref содержащий id другого объекта.
<property> имеет несколько подэлементов, которые служат для заполнения более сложных структур. Вот, например, для urlMapping таким образом заполняется mappings, заполняется как Properties (это элемент <props>). Есть также <list> для списков, <map>, <set>, <null> и пр.
Для объекта Calc нам правда нечего настраивать.
Для объекта маппинга мы передаем список Properties, содержащий url для мапинга в качестве ключа и id объекта как значение.

Для такого простого примера чтото очень громоздко получилось :)

69 Комментариев на “Простое приложение на Spring”

  1. Alexey Zemskov сказал:

    Как человек, далекий от Явы, могу сказать, что с трудом как-то представляется, как это все взаимодействует :-)

    Хотя после некоторого шевеления застывшими извилинами таки примерно смог себе представить, что жэ это такое :-)

    Да, интересная наверное штука, Фрэймворк. Хотя вроде в PHP тоже к этому дело идет :)

  2. igor сказал:

    Как мне кажется всеже из далекости от Java.

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

  3. alder сказал:

    а это приложение точно рабочее?

  4. igor сказал:

    Да, должно работать, я же его у себя вначале собрал.

  5. alder сказал:

    а не подскажете, как можно сделать чтобы данные (например текущая дата) выводились не по нажатию кнопки, а при загрузке страницы

  6. igor сказал:

    например так:

    ${todayDate}

    где собсно todayDate это строка, лежащая в атрибутах запроса. Положить ее туда нужно контроллером.

  7. alder сказал:

    сделал с taglib: Greetings, it is now

    но результат тот же, время показывается только после нажатия кнопки, а не когда страница загрузилась

  8. alder сказал:

    все сделал, спасибо за помощь

  9. igor сказал:

    А контроллер отрабатывает при показе страницы?

    Т.е. суть такая: на нужный урл вешается контроллер, которые все нужно складывает в ModelAndView.

    У вас похоже страница сама по себе открывается, без вызова контроллера, т.е. например по другому урлу, томкатом как jsp. А по нажатию кнопку запрос как раз отправляется туда куда нужно, срабатывает контроллер и складывает значение для показа на странице.

    ПОлучается вам нужно писать не /calc.jsp, а /calc.html, именно на последний урл был повешан контроллер, по крайней мере в моем примере.

  10. Dax сказал:

    АШИПКА:

    mav.addObject («sum», sum);

    mav.addObject («x», x);

    mav.addObject («y», y);

    ПРАВИЛЬНО:

    mav.addObject («sum», new Integer (sum));

    mav.addObject («x», new Integer (x));

    mav.addObject («y», new Integer (y));

  11. igor сказал:

    С чего бы это ошибка? Java 1.5 всеже

  12. Dima сказал:

    А возможно ли переходить с одного контолера на другой в внутри ModelAndView?

  13. igor сказал:

    можно редиректом, new ModelAndView (new RedirectView («адрес нового контроллера»))

  14. Pashtet сказал:

    Не все так гладко у меня при обращении к /calc.html

    javax.servlet.ServletException: No adapter for handler [test.SumController@b1074a]: Does your handler implement a supported interface like Controller?

    org.springframework.web.servlet.DispatcherServlet.getHandlerAdapter (DispatcherServlet.java:986)

    org.springframework.web.servlet.DispatcherServlet.doDispatch (DispatcherServlet.java:805)

    org.springframework.web.servlet.DispatcherServlet.doService (DispatcherServlet.java:736)

    org.springframework.web.servlet.FrameworkServlet.processRequest (FrameworkServlet.java:396)

    org.springframework.web.servlet.FrameworkServlet.doGet (FrameworkServlet.java:350)

    javax.servlet.http.HttpServlet.service (HttpServlet.java:689)

    javax.servlet.http.HttpServlet.service (HttpServlet.java:802)

  15. igor сказал:

    Вы случаем не пропустили extends AbstractController?

  16. Ron сказал:

    saludos, tengo el mismo problema pero no te entiendo

    hi, i have the same problem but icant understand your lenguage

    any possibilities¿

  17. igor сказал:

    hola Ron. esta articulo es un ejemplo de Spring Framework.

    O dices de ServletException de comentario de Pashtet? entonces tienes que complementar «extends AbstractController» a tu controller class

  18. AlexGru сказал:

    Можно ли в spring реализовать архитектуру SOA???

    Можно ли развёртывать и связывать между собой web сервисы???

    Заранее благодарен.

  19. igor сказал:

    Чесно скажу что не совсем разбираюсь в «философии» SOA, и в том что можно назвать полным комплектом услуг для такого приложения. Поэтому не дам экспертный ответ можно ли реализовать SOA, но скажу по опыту что soap методы/классы, как таковые, реализуются на ура.

  20. Nuru сказал:

    1)

    contextConfigLocation

    /WEB-INF/spring.xml

    Это далеко не обязательный вариант. При отсутствии сих строк, Диспатчер сервлет будет искать xml с именем имя_сервлета-servlet.xml. Т.е. в нашем случае — springServlet-servlet.xml. springServlet советуется использовать в больших приложениях, для разделения бинов представления, сервисов и ДАО. т.е. у вас фактически есть 3 xml файла(допустим) и вы их загружаете.

    2.

    АШИПКА:

    mav.addObject (”sum”, sum);

    mav.addObject (”x”, x);

    mav.addObject (”y”, y);

    Ашипка для тех, кто является пещерным человеком и использует Java 1.4

    3. Опять таки, как вариант, можно не использовать SimpleUrlHandlerMapping а объявлять бины следующим образом:

  21. Nuru сказал:

    Блин, коменты теги режут? В таком случаем, мой предыдущий пост прошу щитать абсолютно бесполезным (

  22. lemon сказал:

    Подскажите пожалуйста:

    1. Есть ли возможность вызывать Spring MVC Controller «напрямую» (например как Struts2 actions localhost:8080/login.action) — например для Ajax-запросов

    2. Как быть, если я не хочу возвращать из метода handleRequestInternal объект ModelAndView, а просто хочу напрямую записать в responce некоторые данные (для все тех же Ajax-запросов)? Могу ли я просто вернуть null?

  23. igor сказал:

    Подсказываю.

    1. Да, конечно. И честно говоря даже не пойму как можно вызвать контроллер не напрямую. Контроллер вешается на урл, когда браузер запрашивает урл то выполняется соответствующий контроллер. Все напрямую получается. Ajax прекрасно работает со Spring

    2. Да, достаточно вернуть null.

  24. lemon сказал:

    Спасибо большое!

    1. а нельзя ли написать что-то вроде myController.action (например), ну чтобы не делать URL-mapping (это я и имел ввиду — «напрямую») например

    2. ок

  25. lemon сказал:

    у меня задеплоено 2 war модуля. И мне нужно сделать «кроссмодульный» вызов ActionController метода. Как мне это сделать? Ведь в таком случае url-mapping мне не поможет, как мне можно написать URL прямо к контрллеру (В Struts такая возможность есть login.do написать для struts1 или login.action для struts2). А как быть здесь?

    Спасибо!

  26. igor сказал:

    Чтобы не описывать url mapping можно придумать свою систему адресации и связей с ней контроллеров. А потом реализовать свой бин urlMapping, делается без проблем, за пару строк кода, может даже сейчас чтото такое и в комплекте идет, не смотрел.

    А про кроссмодульность я не понял. Вы имеете ввиду что у вас jsp лежит в одном war, а контроллер для обработки в другом war? Если все так, то не пойму кто вам запрещает написать урл прямо к контроллеру из другого war? это же обычная строка, в браузере, в http заголовке, и ей пофиг что там у вас struts ли, spring или вообще perl-cgi.

  27. lemon сказал:

    Так вот это и есть мой вопрос. Как написать URL прямо к контроллеру.

    Спасибо!

  28. igor сказал:

    Я не пойму где именно в этой, вполне тривиальной, операции у вас сейчас проблема. Или может слишком абстрактные вопросы, скажите подробней.

    Все просто. Например, если у вас контроллер повешен на урл «/my/ctrl/path» то url на этот контроллер можно указать в html как localhost:8080/mywebapp/my/ctrl/path

    где localhost:8080 это хост:порт на котором запущен ваш томкат с приложением, а mywebapp это имя приложения (с контроллером) в томкате.

    Т.е. URL к контроллеру это < хост>/[< приложение>/]< путь на который замеплен контроллер>

    ЗЫЖ то как в статье описан бин urlMapping вопросов не вызывает? Тут все понятно?

  29. lemon сказал:

    Да, мне полностью понятен принцип URL mapping (он практичеки идентичен во всех frameworks), я хочу вызывать свой контроллер БЕЗ url mappings.

  30. igor сказал:

    Без описания той строки в xml? Ну сделайте свой бин вместо приведенного в примере бина urlMapping, который по другому будет решать, без ручного меппинга. Я же говорил про это, что именно было непонятно в том ответе?

    Или что иное вы подразумеваете «без url мепппинга»?

  31. lemon сказал:

    Проводя аналогию со стратс Action[struts] = Controller[Spring MVC], работая со struts я могу вызывать localhost:8080/mywebapp/myAction.do, Action тоже может быть замаплен на URL, но есть возможность и прямого вызова — как в этом примере. А как с Spring MVC? Могу ли я вызывать что-то вроде localhost:8080/mywebapp/myController.do

  32. igor сказал:

    Вы издеваетесь??? Вы мои комментарии читаете? Я уже два раза вам написал что «ДА, МОЖНО». И как сделать это я тоже уже два раза разжевал. Перечитайте заново мои ответы, медленно и внимательно, особенно внимательно упоминания того что нужно заменить бин urlMapping на свой.

  33. lemon сказал:

    Сорри, что пудрю Вам мозги, но я думал, что получится обойтись без мэппинга вовсе.

  34. igor сказал:

    Так я же говорю что можно обойтись, без ручного указания меппинга. Но вы наверное понимаете что должна быть какаято логика по которой спринг поймет какой контроллер соответствует данному контроллеру. К примеру я делал подобное: /< имяконтроллера>.html

    и мой меппер уже по регекспу выдергивал из строки, к примеру /usersList.html вот это вот usersList, и искал контроллер с именем ctrl.usersList (т.е. я добавлял к нему префикс, так у меня было принято именовать бины) который далее и выполнял.

    Меппинга, в данном случае, как видите, нет вовсе, но надо же хоть какую то логическую структуру придумать по которой можно понять какой контроллер вызвать. Так вот это вам и нужно указать в бине с именем urlMapping. Это просто имя бина, а реализовать что угодно можно.

    Возможно вам поможет класс BeanNameUrlHandlerMapping, он напрямую к бинам меппит. Т.е. на урл вида /users.html он выполнит контроллер с id="/users.html" но это уже как то криво получается, некрасиво.

    Поэтому отнаследуйте класс AbstractHandlerMapping и сделайте там как угодно, там на самом деле работы на 30 минут для вашего случая.

    Но еще раз уточняю: этот, вами созданный, класс нужно объявить как бин с id="urlMapping" Это лишь имя бина. По имени спринг понимает что именно вот этот класс знает как же нам связать урл и контроллер.

    И если вы не хотите даже упоминания буквосочетания «urlMapping» то это конечно тоже можно сделать, можно придумать свое наименование, типа «superSecretBeanTsssDontCheckItsSources» и сказать чтобы спринг искал такое имя, но зачем??

    Вы бы действительно раскрыли бы карты уже, сказали бы чтож такое вы хотите сделать, можно в аську/скайп. Просто иначе все настолько абстрактно в вопросе, что непонятно что вам отвечать.

  35. igor сказал:

    Вот для вашего случая пишете в spring.xml:

    <bean id="/mycontroller.do" class="example.simplespring.ctrl.SumController" >
        </bean>
    
        <bean id="urlMapping" class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">
        </bean>

    и по запросу localhost:8080/mywebapp/mycontroller.do отработает наш контроллер-калькулятор.

  36. lemon сказал:

    Спасибо, я вечером попробую!

  37. lemon сказал:

    Здравствуйте!

    Хочу снова обратиться к Вам как spring-guru:)

    Прошу прощения за изначально глупые вопросы, моя задача изначально стоит так: sequrity модуль нашего приложения — acegi модуль, который взаимодействует с CAS-сервером. Нужно подменить существующую логин-страницу на логин-форму, которая будет отправляться для проверки username/password через ajax.

    посколку CAS сервер и моё приложение расположены на на разных серверах, то чтобы обойти AJAX-sandbox, я написал servlet, который перехватывает все мои ajax запросы и перенаправляет их на CAS сервер (кот. построен на Spring MVC).

    То есть в итоге имеем такую схему:

    my_application ->(ajax call) servlet -> CAS (Spring MVC)

    Сторона CAS (Spring MVC) имеет следующую конфигурацию (для логина через jsp-страницу, а не через AJAX):

    Что я хочу сделать (мой вопрос, то ради чего я это всё затеял):

    Мне нужно обратиться к authenticationViaFormAction, но не через submit формы, как это сделано сейчас, а c пом. моего сервлета (который сорержит в параметрах запроса username и password). Как мне это сделать?

    Как это работает у них сейчас: идёт запрос:

    server:port/login и далее:

    1)

    loginController

    2)

    3) login-webflow.xml (я его уже упоминал выше)

    Я так понимаю, мне нужно «вклиниться» в эту точку authenticationViaFormAction, но как это сделать?

    Спасибо Вам большое за ответы!

  38. lemon сказал:

    Блин, повырезало все XML-куски, можно ли для полной картины отправить их Вам на Email, или ещё как-то...

  39. igor сказал:

    Бог с вами, какой из меня спринг-гуру, он слишком обширный чтобы я с ним полностью разобрался когда нибудь :)

    По поводу вопроса действительно обрезало и не совсем понял вопрос, к тому же пятница. Мои прочие контакты указаны на странице «Обо мне», пишите если что.

    Но у меня такое подозрение что вам нужно както организовать авторизацию из своего кода. В таком случае это запросто реализуемо, в acegi есть соответствующие методы, посмотрите на AuthenticationManager и SecurityContextHolder.

  40. Andrei сказал:

    Сделал аналогичное приложение, где ввожу символьную информацию. И вместо русских букв получаю «кракозябры». Заранее спасибо!

  41. igor сказал:

    А это уже смотрите настройки томката. Например artamonov.ru/2006/01/18/t...vka-get-zaprosa/

  42. Andrei сказал:

    Спасибо! Но “кракозябры” у меня именно при POST запросе.

  43. igor сказал:

    Тогда смотрите несовпадения в кодировке указанной в jsp, форме, фильтрах и пр.

  44. just_ice сказал:

    to splix:

    Вы писали:

    > ... за то, какой будет конечный файл, отвечает viewResolver, который настраивается в конфиге спринга. Но это позже.

    Но тема так нигде и не раскрыта.

    Нужно упомянуть хотя-бы, что по-умолчанию используется InternalResourceViewResolver.

    Это преобразователь (resolver) рассматривает имя представления (view) как путь к ресурсу web-приложения.

  45. Sergey сказал:

    Спасибо за пример

    и вопрос бональный:

    чтоб протестировать его на своей машине кроме Eclipsa что еще стоять должно?

    наверно какой ни будь Web сервер — Denwer подойдет?

    и что еще нужно?

    или может ссылки почитать подскажите.

    спасибо.

  46. splix сказал:

    Да, еще нужен вебсервер. Например Tomcat, денвер я думаю не пойдет.

  47. Aries сказал:

    Пытался сделать этот пример и запустить его на websphere.

    Но в web.xml ругается на строку и выдает следующее:

    cvc-complex-type.2.4.a: Обнаружено недопустимое содержимое, начиная с элемента 'init-param'. Ожидалось одно из '{\http://java.sun.com/xml/ns/j2ee\:run-as, \http://java.sun.com/xml/ns/j2ee\:security-role-ref}'.

  48. Aries сказал:

    Уже разобрался с этой проблемой)

  49. Aries сказал:

    Блин, проект сделан и запущен, но при обращении к calc.html браузер тупо выдает сообщение:

    Не удается найти веб-страницу

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

    При написании в web.xml

    <servlet> <servlet-name>spring-ws</servlet-name> <servlet-class>test.SumController</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>spring-ws</servlet-name> <url-pattern>*.html</url-pattern> </servlet-mapping>

    Все работает как надо

    А вот при написании

    <servlet> <servlet-name>spring-ws</servlet-name> <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value> /WEB-INF/spring-ws-servlet.xml </param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>spring-ws</servlet-name> <url-pattern>*.html</url-pattern> </servlet-mapping>

    Выдает как раз сообщение, о том что страница не найдена.

    Вот мой spring-ws-servlet.xml

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean id="SumController" class="test.SumController" > </bean> <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <props> <prop key="/calc.html">SumController</prop> </props> </property> </bean> </beans>

  50. splix сказал:

    А приложение точно запускается? В логах все хорошо? В менеджере томката написано что приложение запустилось?

    Можно попробовать /*, но похоже причина совсем не в этом.

  51. Aries сказал:

    Да пробовал я уже через /*, все так же.

    Работаю через websphere, а не томкат. Но сути не меняет, приложение точно запущено.

    Я вот думаю, никаких доп настроек websphere не надо делать?

  52. splix сказал:

    Ну я подозреваю что внутри вебсферы все равно томкат будет. Так что сути не меняет, да :) (кстати, а зачем спринг если все равно вебсфера? точнее наоборот, зачем в спринговом приложении вебсфера?)

    Тогда так: если включить в log4j логе DEBUG режим для org.springframework то что в логе повится?

  53. Aries сказал:

    Такс...Пересоздавал проект, даж не добавляя log4j, в логах увидел следующее

    [17.08.10 11:15:11:500 MSD] 00000449 ServletWrappe E [Servlet Error]-[org.springframework.web.servlet.DispatcherServlet]: java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet

    at com.ibm.ws.classloader.CompoundClassLoader.findClass (CompoundClassLoader.java:472)

    at com.ibm.ws.classloader.CompoundClassLoader.loadClass (CompoundClassLoader.java:373)

    at java.lang.ClassLoader.loadClass (ClassLoader.java:561)

    at java.beans.Beans.instantiate (Beans.java:202)

    at java.beans.Beans.instantiate (Beans.java:63)

    at com.ibm.ws.webcontainer.servlet.ServletWrapper$1.run (ServletWrapper.java:1195)

    at com.ibm.ws.security.util.AccessController.doPrivileged (AccessController.java:118)

    at com.ibm.ws.webcontainer.servlet.ServletWrapper.loadServlet (ServletWrapper.java:1190)

    at com.ibm.ws.wswebcontainer.servlet.ServletWrapper.loadServlet (ServletWrapper.java:385)

    at com.ibm.ws.webcontainer.servlet.ServletWrapper.initialize (ServletWrapper.java:1112)

    at com.ibm.ws.wswebcontainer.servlet.ServletWrapper.initialize (ServletWrapper.java:149)

    at com.ibm.wsspi.webcontainer.extension.WebExtensionProcessor.createServletWrapper (WebExtensionProcessor.java:99)

    at com.ibm.ws.webcontainer.webapp.WebApp.getServletWrapper (WebApp.java:741)

    at com.ibm.ws.webcontainer.webapp.WebApp.initializeTargetMappings (WebApp.java:421)

    at com.ibm.ws.webcontainer.webapp.WebApp.commonInitializationFinish (WebApp.java:274)

    at com.ibm.ws.wswebcontainer.webapp.WebApp.initialize (WebApp.java:271)

    at com.ibm.ws.wswebcontainer.webapp.WebGroup.addWebApplication (WebGroup.java:88)

    at com.ibm.ws.wswebcontainer.VirtualHost.addWebApplication (VirtualHost.java:157)

    at com.ibm.ws.wswebcontainer.WebContainer.addWebApp (WebContainer.java:653)

    at com.ibm.ws.wswebcontainer.WebContainer.addWebApplication (WebContainer.java:606)

    at com.ibm.ws.webcontainer.component.WebContainerImpl.install (WebContainerImpl.java:333)

    at com.ibm.ws.webcontainer.component.WebContainerImpl.start (WebContainerImpl.java:549)

    at com.ibm.ws.runtime.component.ApplicationMgrImpl.start (ApplicationMgrImpl.java:1295)

    at com.ibm.ws.runtime.component.DeployedApplicationImpl.fireDeployedObjectStart (DeployedApplicationImpl.java:1129)

    at com.ibm.ws.runtime.component.DeployedModuleImpl.start (DeployedModuleImpl.java:567)

    at com.ibm.ws.runtime.component.ApplicationMgrImpl.startModule (ApplicationMgrImpl.java:1762)

    at com.ibm.ws.runtime.component.ApplicationMgrImpl._startModule (ApplicationMgrImpl.java:1710)

    at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)

    at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:64)

    at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)

    at java.lang.reflect.Method.invoke (Method.java:615)

    at sun.reflect.misc.Trampoline.invoke (MethodUtil.java:62)

    at sun.reflect.GeneratedMethodAccessor19.invoke (Unknown Source)

    at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)

    at java.lang.reflect.Method.invoke (Method.java:615)

    at sun.reflect.misc.MethodUtil.invoke (MethodUtil.java:265)

    at javax.management.modelmbean.RequiredModelMBean.invokeMethod (RequiredModelMBean.java:1089)

    at javax.management.modelmbean.RequiredModelMBean.invoke (RequiredModelMBean.java:971)

    at com.sun.jmx.mbeanserver.DynamicMetaDataImpl.invoke (DynamicMetaDataImpl.java:231)

    at com.sun.jmx.mbeanserver.MetaDataImpl.invoke (MetaDataImpl.java:238)

    at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke (DefaultMBeanServerInterceptor.java:833)

    at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke (JmxMBeanServer.java:802)

    at com.ibm.ws.management.AdminServiceImpl$1.run (AdminServiceImpl.java:1055)

    at com.ibm.ws.security.util.AccessController.doPrivileged (AccessController.java:118)

    at com.ibm.ws.management.AdminServiceImpl.invoke (AdminServiceImpl.java:948)

    at com.ibm.ws.management.application.sync.StartDeploymentTask.startDeployment (StartDeploymentTask.java:196)

    at com.ibm.ws.management.application.sync.StartDeploymentTask.fineGrainUpdate (StartDeploymentTask.java:149)

    at com.ibm.ws.management.application.sync.StartDeploymentTask.performTask (StartDeploymentTask.java:79)

    at com.ibm.ws.management.application.sync.AppBinaryProcessor$AppBinThread.run (AppBinaryProcessor.java:820)

    at com.ibm.ws.management.application.sync.AppBinaryProcessor.postProcess (AppBinaryProcessor.java:590)

    at com.ibm.ws.management.application.sync.AppBinaryProcessor._onChangeCompletion (AppBinaryProcessor.java:400)

    at com.ibm.ws.management.application.sync.AppBinaryProcessor$2.run (AppBinaryProcessor.java:372)

    at com.ibm.ws.security.util.AccessController.doPrivileged (AccessController.java:118)

    at com.ibm.ws.management.application.sync.AppBinaryProcessor.onChangeCompletion (AppBinaryProcessor.java:359)

    at com.ibm.ws.management.repository.FileRepository.postNotify (FileRepository.java:1715)

    at com.ibm.ws.management.repository.FileRepository.update (FileRepository.java:1261)

    at com.ibm.ws.management.repository.client.LocalConfigRepositoryClient.update (LocalConfigRepositoryClient.java:189)

    at com.ibm.ws.sm.workspace.impl.WorkSpaceMasterRepositoryAdapter.update (WorkSpaceMasterRepositoryAdapter.java:578)

    at com.ibm.ws.sm.workspace.impl.RepositoryContextImpl.update (RepositoryContextImpl.java:1778)

    at com.ibm.ws.sm.workspace.impl.RepositoryContextImpl.synch (RepositoryContextImpl.java:1724)

    at com.ibm.ws.sm.workspace.impl.WorkSpaceImpl.synch (WorkSpaceImpl.java:470)

    at com.ibm.ws.management.application.task.ConfigRepoHelper.removeWorkSpace (ConfigRepoHelper.java:144)

    at com.ibm.ws.management.application.SchedulerImpl.cleanup (SchedulerImpl.java:378)

    at com.ibm.ws.management.application.SchedulerImpl.run (SchedulerImpl.java:284)

    at java.lang.Thread.run (Thread.java:797)

  54. Aries сказал:

    Насколько понимаю, не видит он как раз

    org.springframework.web.servlet.DispatcherServlet

  55. Aries сказал:

    С этим уже разобрался.Терь призапускеприложения все норм...Но при обращении к нужной странице браузер выдает ошибку 500:веб узел не может отобразить страницу...

    а в логах появляется следующее

    [17.08.10 14:15:31:015 MSD] 0000002a ServletWrappe E SRVE0068E: Uncaught exception thrown in one of the service methods of the servlet: spring-ws. Exception thrown : javax.servlet.ServletException: No adapter for handler [test.SumController@57c457c4]: Does your handler implement a supported interface like Controller?

    at org.springframework.web.servlet.DispatcherServlet.getHandlerAdapter (DispatcherServlet.java:1091)

    at org.springframework.web.servlet.DispatcherServlet.doDispatch (DispatcherServlet.java:874)

    at org.springframework.web.servlet.DispatcherServlet.doService (DispatcherServlet.java:809)

    at org.springframework.web.servlet.FrameworkServlet.processRequest (FrameworkServlet.java:571)

    at org.springframework.web.servlet.FrameworkServlet.doGet (FrameworkServlet.java:501)

    at javax.servlet.http.HttpServlet.service (HttpServlet.java:743)

    at javax.servlet.http.HttpServlet.service (HttpServlet.java:856)

    at com.ibm.ws.webcontainer.servlet.ServletWrapper.service (ServletWrapper.java:966)

    at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest (ServletWrapper.java:478)

    at com.ibm.ws.wswebcontainer.servlet.ServletWrapper.handleRequest (ServletWrapper.java:463)

    at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest (WebApp.java:3107)

    at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest (WebGroup.java:238)

    at com.ibm.ws.webcontainer.WebContainer.handleRequest (WebContainer.java:811)

    at com.ibm.ws.wswebcontainer.WebContainer.handleRequest (WebContainer.java:1425)

    at com.ibm.ws.webcontainer.channel.WCChannelLink.ready (WCChannelLink.java:92)

    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination (HttpInboundLink.java:465)

    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation (HttpInboundLink.java:394)

    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready (HttpInboundLink.java:274)

    at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.sendToDiscriminators (NewConnectionInitialReadCallback.java:214)

    at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.complete (NewConnectionInitialReadCallback.java:113)

    at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted (AioReadCompletionListener.java:152)

    at com.ibm.io.async.AbstractAsyncFuture.invokeCallback (AbstractAsyncFuture.java:213)

    at com.ibm.io.async.AbstractAsyncFuture.fireCompletionActions (AbstractAsyncFuture.java:195)

    at com.ibm.io.async.AsyncFuture.completed (AsyncFuture.java:136)

    at com.ibm.io.async.ResultHandler.complete (ResultHandler.java:193)

    at com.ibm.io.async.ResultHandler.runEventProcessingLoop (ResultHandler.java:725)

    at com.ibm.io.async.ResultHandler$2.run (ResultHandler.java:847)

    at com.ibm.ws.util.ThreadPool$Worker.run (ThreadPool.java:1498)

    [17.08.10 14:15:31:015 MSD] 0000002a WebApp E [Servlet Error]-[spring-ws]: javax.servlet.ServletException: No adapter for handler [test.SumController@57c457c4]: Does your handler implement a supported interface like Controller?

    at org.springframework.web.servlet.DispatcherServlet.getHandlerAdapter (DispatcherServlet.java:1091)

    at org.springframework.web.servlet.DispatcherServlet.doDispatch (DispatcherServlet.java:874)

    at org.springframework.web.servlet.DispatcherServlet.doService (DispatcherServlet.java:809)

    at org.springframework.web.servlet.FrameworkServlet.processRequest (FrameworkServlet.java:571)

    at org.springframework.web.servlet.FrameworkServlet.doGet (FrameworkServlet.java:501)

    at javax.servlet.http.HttpServlet.service (HttpServlet.java:743)

    at javax.servlet.http.HttpServlet.service (HttpServlet.java:856)

    at com.ibm.ws.webcontainer.servlet.ServletWrapper.service (ServletWrapper.java:966)

    at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest (ServletWrapper.java:478)

    at com.ibm.ws.wswebcontainer.servlet.ServletWrapper.handleRequest (ServletWrapper.java:463)

    at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest (WebApp.java:3107)

    at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest (WebGroup.java:238)

    at com.ibm.ws.webcontainer.WebContainer.handleRequest (WebContainer.java:811)

    at com.ibm.ws.wswebcontainer.WebContainer.handleRequest (WebContainer.java:1425)

    at com.ibm.ws.webcontainer.channel.WCChannelLink.ready (WCChannelLink.java:92)

    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination (HttpInboundLink.java:465)

    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation (HttpInboundLink.java:394)

    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready (HttpInboundLink.java:274)

    at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.sendToDiscriminators (NewConnectionInitialReadCallback.java:214)

    at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.complete (NewConnectionInitialReadCallback.java:113)

    at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted (AioReadCompletionListener.java:152)

    at com.ibm.io.async.AbstractAsyncFuture.invokeCallback (AbstractAsyncFuture.java:213)

    at com.ibm.io.async.AbstractAsyncFuture.fireCompletionActions (AbstractAsyncFuture.java:195)

    at com.ibm.io.async.AsyncFuture.completed (AsyncFuture.java:136)

    at com.ibm.io.async.ResultHandler.complete (ResultHandler.java:193)

    at com.ibm.io.async.ResultHandler.runEventProcessingLoop (ResultHandler.java:725)

    at com.ibm.io.async.ResultHandler$2.run (ResultHandler.java:847)

    at com.ibm.ws.util.ThreadPool$Worker.run (ThreadPool.java:1498)

  56. splix сказал:

    А test.SumController он точно extends AbstractController?

  57. Aries сказал:

    Да.

    Я объяснял выше, что приложение отрабатывает норм, если, в web.xml сервлет описываю так:

    <servlet>

    <servlet-name>spring-ws</servlet-name>

    <servlet-class>test.SumController</servlet-class>

    <load-on-startup>1</load-on-startup>

    </servlet>

    <servlet-mapping>

    <servlet-name>spring-ws</servlet-name>

    <url-pattern>*.html</url-pattern>

    </servlet-mapping>

    А если как в примере, то запускается оно норм — без ошибок. И только при обращении к нужной странице появляется ошибка в логах

  58. splix сказал:

    Если как сервлет работат то может у вас всетаки сервлет? Спрингу нужен контроллер. Еще раз: test.SumController он точно extends AbstractController?

  59. Aries сказал:

    Все... Эт мой косяк был...Все заработало)) спс всем)))

  60. Zest сказал:

    Всем доброго времени суток...

    Никто не подскажет, что означает следующая ошибка

    [23.08.10 17:30:51:625 MSD] 00000028 ServletWrappe E SRVE0100E: Did not realize init () exception thrown by servlet test-ws: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'test' defined in ServletContext resource [/WEB-INF/test-ws-servlet.xml]: Invocation of init method failed; nested exception is org.springframework.ws.wsdl.wsdl11.Wsdl4jDefinitionException: WSDLException: faultCode=CONFIGURATION_ERROR: No Java extensionType found to represent a '{http://www.w3.org/2001/XMLSchema}schema' element in the context of a 'javax.wsdl.Types'.; nested exception is WSDLException: faultCode=CONFIGURATION_ERROR: No Java extensionType found to represent a '{http://www.w3.org/2001/XMLSchema}schema' element in the context of a 'javax.wsdl.Types'.:

    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean (AbstractAutowireCapableBeanFactory.java:1337)

    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean (AbstractAutowireCapableBeanFactory.java:473)

    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run (AbstractAutowireCapableBeanFactory.java:409)

    at java.security.AccessController.doPrivileged (AccessController.java:214)

    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean (AbstractAutowireCapableBeanFactory.java:380)

    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject (AbstractBeanFactory.java:264)

    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton (DefaultSingletonBeanRegistry.java:221)

    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean (AbstractBeanFactory.java:261)

    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean (AbstractBeanFactory.java:185)

    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean (AbstractBeanFactory.java:164)

    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons (DefaultListableBeanFactory.java:429)

    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization (AbstractApplicationContext.java:729)

    at org.springframework.context.support.AbstractApplicationContext.refresh (AbstractApplicationContext.java:381)

    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext (FrameworkServlet.java:402)

    at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext (FrameworkServlet.java:316)

    at org.springframework.web.servlet.FrameworkServlet.initServletBean (FrameworkServlet.java:282)

    at org.springframework.web.servlet.HttpServletBean.init (HttpServletBean.java:126)

    at javax.servlet.GenericServlet.init (GenericServlet.java:256)

    at com.ibm.ws.webcontainer.servlet.ServletWrapper.init (ServletWrapper.java:185)

    at com.ibm.ws.wswebcontainer.servlet.ServletWrapper.init (ServletWrapper.java:316)

    at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest (ServletWrapper.java:341)

    at com.ibm.ws.wswebcontainer.servlet.ServletWrapper.handleRequest (ServletWrapper.java:463)

    at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest (WebApp.java:3107)

    at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest (WebGroup.java:238)

    at com.ibm.ws.webcontainer.WebContainer.handleRequest (WebContainer.java:811)

    at com.ibm.ws.wswebcontainer.WebContainer.handleRequest (WebContainer.java:1425)

    at com.ibm.ws.webcontainer.channel.WCChannelLink.ready (WCChannelLink.java:92)

    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination (HttpInboundLink.java:465)

    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation (HttpInboundLink.java:394)

    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready (HttpInboundLink.java:274)

    at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.sendToDiscriminators (NewConnectionInitialReadCallback.java:214)

    at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.complete (NewConnectionInitialReadCallback.java:113)

    at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted (AioReadCompletionListener.java:152)

    at com.ibm.io.async.AbstractAsyncFuture.invokeCallback (AbstractAsyncFuture.java:213)

    at com.ibm.io.async.AbstractAsyncFuture.fireCompletionActions (AbstractAsyncFuture.java:195)

    at com.ibm.io.async.AsyncFuture.completed (AsyncFuture.java:136)

    at com.ibm.io.async.ResultHandler.complete (ResultHandler.java:193)

    at com.ibm.io.async.ResultHandler.runEventProcessingLoop (ResultHandler.java:725)

    at com.ibm.io.async.ResultHandler$2.run (ResultHandler.java:847)

    at com.ibm.ws.util.ThreadPool$Worker.run (ThreadPool.java:1498)

    Caused by: org.springframework.ws.wsdl.wsdl11.Wsdl4jDefinitionException: WSDLException: faultCode=CONFIGURATION_ERROR: No Java extensionType found to represent a '{http://www.w3.org/2001/XMLSchema}schema' element in the context of a 'javax.wsdl.Types'.; nested exception is WSDLException: faultCode=CONFIGURATION_ERROR: No Java extensionType found to represent a '{http://www.w3.org/2001/XMLSchema}schema' element in the context of a 'javax.wsdl.Types'.:

    at org.springframework.ws.wsdl.wsdl11.builder.AbstractWsdl4jDefinitionBuilder.buildTypes (AbstractWsdl4jDefinitionBuilder.java:101)

    at org.springframework.ws.wsdl.wsdl11.DynamicWsdl11Definition.afterPropertiesSet (DynamicWsdl11Definition.java:72)

    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods (AbstractAutowireCapableBeanFactory.java:1368)

    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean (AbstractAutowireCapableBeanFactory.java:1334)

    ... 39 more

    Caused by: WSDLException: faultCode=CONFIGURATION_ERROR: No Java extensionType found to represent a '{http://www.w3.org/2001/XMLSchema}schema' element in the context of a 'javax.wsdl.Types'.:

    at javax.wsdl.extensions.ExtensionRegistry.createExtension (Unknown Source)

    at org.springframework.ws.wsdl.wsdl11.builder.AbstractWsdl4jDefinitionBuilder.createExtension (AbstractWsdl4jDefinitionBuilder.java:195)

    at org.springframework.ws.wsdl.wsdl11.builder.XsdBasedSoap11Wsdl4jDefinitionBuilder.buildTypes (XsdBasedSoap11Wsdl4jDefinitionBuilder.java:243)

    at org.springframework.ws.wsdl.wsdl11.builder.AbstractWsdl4jDefinitionBuilder.buildTypes (AbstractWsdl4jDefinitionBuilder.java:98)

    ... 42 more

    [23.08.10 17:30:51:718 MSD] 00000028 ServletWrappe E Deregister the mbean because of uncaught init () exception thrown by servlet test-ws: javax.servlet.ServletException: SRVE0207E: Uncaught initialization exception thrown by servlet

    at com.ibm.ws.webcontainer.servlet.ServletWrapper.init (ServletWrapper.java:237)

    at com.ibm.ws.wswebcontainer.servlet.ServletWrapper.init (ServletWrapper.java:316)

    at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest (ServletWrapper.java:341)

    at com.ibm.ws.wswebcontainer.servlet.ServletWrapper.handleRequest (ServletWrapper.java:463)

    at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest (WebApp.java:3107)

    at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest (WebGroup.java:238)

    at com.ibm.ws.webcontainer.WebContainer.handleRequest (WebContainer.java:811)

    at com.ibm.ws.wswebcontainer.WebContainer.handleRequest (WebContainer.java:1425)

    at com.ibm.ws.webcontainer.channel.WCChannelLink.ready (WCChannelLink.java:92)

    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination (HttpInboundLink.java:465)

    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation (HttpInboundLink.java:394)

    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready (HttpInboundLink.java:274)

    at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.sendToDiscriminators (NewConnectionInitialReadCallback.java:214)

    at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.complete (NewConnectionInitialReadCallback.java:113)

    at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted (AioReadCompletionListener.java:152)

    at com.ibm.io.async.AbstractAsyncFuture.invokeCallback (AbstractAsyncFuture.java:213)

    at com.ibm.io.async.AbstractAsyncFuture.fireCompletionActions (AbstractAsyncFuture.java:195)

    at com.ibm.io.async.AsyncFuture.completed (AsyncFuture.java:136)

    at com.ibm.io.async.ResultHandler.complete (ResultHandler.java:193)

    at com.ibm.io.async.ResultHandler.runEventProcessingLoop (ResultHandler.java:725)

    at com.ibm.io.async.ResultHandler$2.run (ResultHandler.java:847)

    at com.ibm.ws.util.ThreadPool$Worker.run (ThreadPool.java:1498)

    ---- Begin backtrace for Nested Throwables

    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'test' defined in ServletContext resource [/WEB-INF/test-ws-servlet.xml]: Invocation of init method failed; nested exception is org.springframework.ws.wsdl.wsdl11.Wsdl4jDefinitionException: WSDLException: faultCode=CONFIGURATION_ERROR: No Java extensionType found to represent a '{http://www.w3.org/2001/XMLSchema}schema' element in the context of a 'javax.wsdl.Types'.; nested exception is WSDLException: faultCode=CONFIGURATION_ERROR: No Java extensionType found to represent a '{http://www.w3.org/2001/XMLSchema}schema' element in the context of a 'javax.wsdl.Types'.:

    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean (AbstractAutowireCapableBeanFactory.java:1337)

    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean (AbstractAutowireCapableBeanFactory.java:473)

    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run (AbstractAutowireCapableBeanFactory.java:409)

    at java.security.AccessController.doPrivileged (AccessController.java:214)

    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean (AbstractAutowireCapableBeanFactory.java:380)

    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject (AbstractBeanFactory.java:264)

    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton (DefaultSingletonBeanRegistry.java:221)

    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean (AbstractBeanFactory.java:261)

    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean (AbstractBeanFactory.java:185)

    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean (AbstractBeanFactory.java:164)

    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons (DefaultListableBeanFactory.java:429)

    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization (AbstractApplicationContext.java:729)

    at org.springframework.context.support.AbstractApplicationContext.refresh (AbstractApplicationContext.java:381)

    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext (FrameworkServlet.java:402)

    at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext (FrameworkServlet.java:316)

    at org.springframework.web.servlet.FrameworkServlet.initServletBean (FrameworkServlet.java:282)

    at org.springframework.web.servlet.HttpServletBean.init (HttpServletBean.java:126)

    at javax.servlet.GenericServlet.init (GenericServlet.java:256)

    at com.ibm.ws.webcontainer.servlet.ServletWrapper.init (ServletWrapper.java:185)

    at com.ibm.ws.wswebcontainer.servlet.ServletWrapper.init (ServletWrapper.java:316)

    at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest (ServletWrapper.java:341)

    at com.ibm.ws.wswebcontainer.servlet.ServletWrapper.handleRequest (ServletWrapper.java:463)

    at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest (WebApp.java:3107)

    at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest (WebGroup.java:238)

    at com.ibm.ws.webcontainer.WebContainer.handleRequest (WebContainer.java:811)

    at com.ibm.ws.wswebcontainer.WebContainer.handleRequest (WebContainer.java:1425)

    at com.ibm.ws.webcontainer.channel.WCChannelLink.ready (WCChannelLink.java:92)

    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination (HttpInboundLink.java:465)

    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation (HttpInboundLink.java:394)

    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready (HttpInboundLink.java:274)

    at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.sendToDiscriminators (NewConnectionInitialReadCallback.java:214)

    at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.complete (NewConnectionInitialReadCallback.java:113)

    at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted (AioReadCompletionListener.java:152)

    at com.ibm.io.async.AbstractAsyncFuture.invokeCallback (AbstractAsyncFuture.java:213)

    at com.ibm.io.async.AbstractAsyncFuture.fireCompletionActions (AbstractAsyncFuture.java:195)

    at com.ibm.io.async.AsyncFuture.completed (AsyncFuture.java:136)

    at com.ibm.io.async.ResultHandler.complete (ResultHandler.java:193)

    at com.ibm.io.async.ResultHandler.runEventProcessingLoop (ResultHandler.java:725)

    at com.ibm.io.async.ResultHandler$2.run (ResultHandler.java:847)

    at com.ibm.ws.util.ThreadPool$Worker.run (ThreadPool.java:1498)

    Caused by: org.springframework.ws.wsdl.wsdl11.Wsdl4jDefinitionException: WSDLException: faultCode=CONFIGURATION_ERROR: No Java extensionType found to represent a '{http://www.w3.org/2001/XMLSchema}schema' element in the context of a 'javax.wsdl.Types'.; nested exception is WSDLException: faultCode=CONFIGURATION_ERROR: No Java extensionType found to represent a '{http://www.w3.org/2001/XMLSchema}schema' element in the context of a 'javax.wsdl.Types'.:

    at org.springframework.ws.wsdl.wsdl11.builder.AbstractWsdl4jDefinitionBuilder.buildTypes (AbstractWsdl4jDefinitionBuilder.java:101)

    at org.springframework.ws.wsdl.wsdl11.DynamicWsdl11Definition.afterPropertiesSet (DynamicWsdl11Definition.java:72)

    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods (AbstractAutowireCapableBeanFactory.java:1368)

    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean (AbstractAutowireCapableBeanFactory.java:1334)

    ... 39 more

    Caused by: WSDLException: faultCode=CONFIGURATION_ERROR: No Java extensionType found to represent a '{http://www.w3.org/2001/XMLSchema}schema' element in the context of a 'javax.wsdl.Types'.:

    at javax.wsdl.extensions.ExtensionRegistry.createExtension (Unknown Source)

    at org.springframework.ws.wsdl.wsdl11.builder.AbstractWsdl4jDefinitionBuilder.createExtension (AbstractWsdl4jDefinitionBuilder.java:195)

    at org.springframework.ws.wsdl.wsdl11.builder.XsdBasedSoap11Wsdl4jDefinitionBuilder.buildTypes (XsdBasedSoap11Wsdl4jDefinitionBuilder.java:243)

    at org.springframework.ws.wsdl.wsdl11.builder.AbstractWsdl4jDefinitionBuilder.buildTypes (AbstractWsdl4jDefinitionBuilder.java:98)

    ... 42 more

    ,

    [23.08.10 17:30:51:750 MSD] 00000028 ServiceLogger I com.ibm.ws.ffdc.IncidentStreamImpl open FFDC0009I: FFDC opened incident stream file E:\Program Files\IBM\WebSphere\AppServer1\profiles\AppSrv01\logs\ffdc\server1_7ce07ce0_10.08.23_17.30.51_1.txt

    [23.08.10 17:30:51:812 MSD] 00000028 ServiceLogger I com.ibm.ws.ffdc.IncidentStreamImpl resetIncidentStream FFDC0010I: FFDC closed incident stream file E:\Program Files\IBM\WebSphere\AppServer1\profiles\AppSrv01\logs\ffdc\server1_7ce07ce0_10.08.23_17.30.51_1.txt

    [23.08.10 17:30:51:859 MSD] 00000028 WebApp E [Servlet Error]-[test-ws]: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'test' defined in ServletContext resource [/WEB-INF/test-ws-servlet.xml]: Invocation of init method failed; nested exception is org.springframework.ws.wsdl.wsdl11.Wsdl4jDefinitionException: WSDLException: faultCode=CONFIGURATION_ERROR: No Java extensionType found to represent a '{http://www.w3.org/2001/XMLSchema}schema' element in the context of a 'javax.wsdl.Types'.; nested exception is WSDLException: faultCode=CONFIGURATION_ERROR: No Java extensionType found to represent a '{http://www.w3.org/2001/XMLSchema}schema' element in the context of a 'javax.wsdl.Types'.:

    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean (AbstractAutowireCapableBeanFactory.java:1337)

    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean (AbstractAutowireCapableBeanFactory.java:473)

    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run (AbstractAutowireCapableBeanFactory.java:409)

    at java.security.AccessController.doPrivileged (AccessController.java:214)

    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean (AbstractAutowireCapableBeanFactory.java:380)

    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject (AbstractBeanFactory.java:264)

    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton (DefaultSingletonBeanRegistry.java:221)

    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean (AbstractBeanFactory.java:261)

    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean (AbstractBeanFactory.java:185)

    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean (AbstractBeanFactory.java:164)

    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons (DefaultListableBeanFactory.java:429)

    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization (AbstractApplicationContext.java:729)

    at org.springframework.context.support.AbstractApplicationContext.refresh (AbstractApplicationContext.java:381)

    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext (FrameworkServlet.java:402)

    at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext (FrameworkServlet.java:316)

    at org.springframework.web.servlet.FrameworkServlet.initServletBean (FrameworkServlet.java:282)

    at org.springframework.web.servlet.HttpServletBean.init (HttpServletBean.java:126)

    at javax.servlet.GenericServlet.init (GenericServlet.java:256)

    at com.ibm.ws.webcontainer.servlet.ServletWrapper.init (ServletWrapper.java:185)

    at com.ibm.ws.wswebcontainer.servlet.ServletWrapper.init (ServletWrapper.java:316)

    at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest (ServletWrapper.java:341)

    at com.ibm.ws.wswebcontainer.servlet.ServletWrapper.handleRequest (ServletWrapper.java:463)

    at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest (WebApp.java:3107)

    at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest (WebGroup.java:238)

    at com.ibm.ws.webcontainer.WebContainer.handleRequest (WebContainer.java:811)

    at com.ibm.ws.wswebcontainer.WebContainer.handleRequest (WebContainer.java:1425)

    at com.ibm.ws.webcontainer.channel.WCChannelLink.ready (WCChannelLink.java:92)

    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination (HttpInboundLink.java:465)

    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation (HttpInboundLink.java:394)

    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready (HttpInboundLink.java:274)

    at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.sendToDiscriminators (NewConnectionInitialReadCallback.java:214)

    at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.complete (NewConnectionInitialReadCallback.java:113)

    at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted (AioReadCompletionListener.java:152)

    at com.ibm.io.async.AbstractAsyncFuture.invokeCallback (AbstractAsyncFuture.java:213)

    at com.ibm.io.async.AbstractAsyncFuture.fireCompletionActions (AbstractAsyncFuture.java:195)

    at com.ibm.io.async.AsyncFuture.completed (AsyncFuture.java:136)

    at com.ibm.io.async.ResultHandler.complete (ResultHandler.java:193)

    at com.ibm.io.async.ResultHandler.runEventProcessingLoop (ResultHandler.java:725)

    at com.ibm.io.async.ResultHandler$2.run (ResultHandler.java:847)

    at com.ibm.ws.util.ThreadPool$Worker.run (ThreadPool.java:1498)

    Caused by: org.springframework.ws.wsdl.wsdl11.Wsdl4jDefinitionException: WSDLException: faultCode=CONFIGURATION_ERROR: No Java extensionType found to represent a '{http://www.w3.org/2001/XMLSchema}schema' element in the context of a 'javax.wsdl.Types'.; nested exception is WSDLException: faultCode=CONFIGURATION_ERROR: No Java extensionType found to represent a '{http://www.w3.org/2001/XMLSchema}schema' element in the context of a 'javax.wsdl.Types'.:

    at org.springframework.ws.wsdl.wsdl11.builder.AbstractWsdl4jDefinitionBuilder.buildTypes (AbstractWsdl4jDefinitionBuilder.java:101)

    at org.springframework.ws.wsdl.wsdl11.DynamicWsdl11Definition.afterPropertiesSet (DynamicWsdl11Definition.java:72)

    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods (AbstractAutowireCapableBeanFactory.java:1368)

    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean (AbstractAutowireCapableBeanFactory.java:1334)

    ... 39 more

    Caused by: WSDLException: faultCode=CONFIGURATION_ERROR: No Java extensionType found to represent a '{http://www.w3.org/2001/XMLSchema}schema' element in the context of a 'javax.wsdl.Types'.:

    at javax.wsdl.extensions.ExtensionRegistry.createExtension (Unknown Source)

    at org.springframework.ws.wsdl.wsdl11.builder.AbstractWsdl4jDefinitionBuilder.createExtension (AbstractWsdl4jDefinitionBuilder.java:195)

    at org.springframework.ws.wsdl.wsdl11.builder.XsdBasedSoap11Wsdl4jDefinitionBuilder.buildTypes (XsdBasedSoap11Wsdl4jDefinitionBuilder.java:243)

    at org.springframework.ws.wsdl.wsdl11.builder.AbstractWsdl4jDefinitionBuilder.buildTypes (AbstractWsdl4jDefinitionBuilder.java:98)

    ... 42 more

  61. isabsent сказал:

    Тоже получил ошибку 500 при обращении к calc.html (библиотека Spring-2.5.6.SEC02 под NetBeans 6.9.1, jdk-1.6):

    javax.servlet.ServletException: No adapter for handler [SumController@1cbc39b]: Does your handler implement a supported interface like Controller?

    несмотря на объявление:

    public class SumController extends AbstractController

    Кстати, для нормального деплоя нужна библиотека portlet-api — без неё вылетает ошибка:

    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'Calc' defined in ServletContext resource [/WEB-INF/SpringServlet-servlet.xml]: Instantiation of bean failed; nested exception is java.lang.NoClassDefFoundError: javax/portlet/PortletException

    Должен сказать что с библиотеками spring-3.0.2.RELEASE вообще не деплоится — вылетает с:

    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'Calc' defined in ServletContext resource [/WEB-INF/SpringServlet-servlet.xml]: Instantiation of bean failed; nested exception is java.lang.NoClassDefFoundError: javax/portlet/MimeResponse

    Как заставить работать ваше приложение хотя бы для Spring-2.5.6 !?

  62. isabsent сказал:

    Полный лог привожу на всякий случай:

    javax.servlet.ServletException: No adapter for handler [SumController@19e97b]: Does your handler implement a supported interface like Controller?

    org.springframework.web.servlet.DispatcherServlet.getHandlerAdapter (DispatcherServlet.java:1100)

    org.springframework.web.servlet.DispatcherServlet.doDispatch (DispatcherServlet.java:874)

    org.springframework.web.servlet.DispatcherServlet.doService (DispatcherServlet.java:807)

    org.springframework.web.servlet.FrameworkServlet.processRequest (FrameworkServlet.java:571)

    org.springframework.web.servlet.FrameworkServlet.doGet (FrameworkServlet.java:501)

    javax.servlet.http.HttpServlet.service (HttpServlet.java:617)

    javax.servlet.http.HttpServlet.service (HttpServlet.java:717)

  63. isabsent сказал:

    Разобрался... Сделал неправильный импорт — вместо import org.springframework.web.portlet.mvc.AbstractController;

    указал

    import org.springframework.web.servlet.mvc.AbstractController;

    Отсюда и полез portlet и ошибки. Хорошо бы в тексте ваших примеров указывать и import'ы тоже — для «особо одарённых» :)

  64. isabsent сказал:

    P.S. Импорты в предыдущем сообщении местами поменять :)

  65. Avanturer сказал:

    Цитата из статьи:

    «А Model в данном случа хранит наши цифры, ну и в общемто можно положить любые объекты, которые надо обработать в JSP. В обработчике можно не возвращать объект ModelAndView, можно вернуть null, и сделать всю работу по выдаче данных самому, через response.getOutputStream () и т.д., что тоже иногда полезно.»

    Это судя по всему не совсем так:

    если в Контроллере использовать response.getOutputStream () и сделать всю работу по выдаче данных самому,а возвращать вместо ModelAndView null, все отрабатывает хорошо, но в лог сыплется ошибка:

    org.apache.jasper.JasperException: java.lang.IllegalStateException: getOutputStream () has already been called for this response

    это конечно не критично, но не приятно проверял на (Apache-Tomcat-6.0).

    Кто знает почему это происходит и как это предотвратить?

  66. Avanturer сказал:

    Разобрался с проблемой, может кому пригодиться.

    Происходит это потому, что повторно вызывается response.getOutputStream () из Spring`а.

    Как вариант, чтобы это предотвратить вместо Controller`а Spring`а использовать HttpServlet.

  67. kain сказал:

    Aries сказал:

    августа 16, 2010 в 12:18

    Пытался сделать этот пример и запустить его на websphere.

    Но в web.xml ругается на строку и выдает следующее:

    cvc-complex-type.2.4.a: Обнаружено недопустимое содержимое, начиная с элемента 'init-param'. Ожидалось одно из '{\http://java.sun.com/xml/ns/j2ee\:run-as, \http://java.sun.com/xml/ns/j2ee\:security-role-ref}'.

    Aries сказал:

    августа 16, 2010 в 14:14

    Уже разобрался с этой проблемой)

    такая же проблема, а можно описание разбора

  68. kain сказал:

    в классе SumController импорт org.springframework.web.servlet.DispatcherServlet прекрассно виден, а в web.xml указывает на такую же ошибку.

  69. i_lu_r@mail.ru сказал:

    все работает, только при нажатии кнопки «Calc» даные не отображаются — страница пустая ...

Оставьте свое мнение

XHTML: Вы можете использовать следующие html теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> Если в комментарии пишете XML то вместо "<" используйте "&lt;"

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