Простое приложение на Spring
15 марта 2006
Теперь попробую показать на простейшем примере 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 объекта как значение.
Для такого простого примера чтото очень громоздко получилось

марта 22, 2006 в 11:59
Как человек, далекий от Явы, могу сказать, что с трудом как-то представляется, как это все взаимодействует
Хотя после некоторого шевеления застывшими извилинами таки примерно смог себе представить, что жэ это такое
Да, интересная наверное штука, Фрэймворк. Хотя вроде в PHP тоже к этому дело идет
марта 22, 2006 в 12:06
Как мне кажется всеже из далекости от Java.
тут на саммом деле я еще не показал ничего, все обычные начальные настроки... все хистрости попозже покажу.
апреля 20, 2006 в 10:32
а это приложение точно рабочее?
апреля 20, 2006 в 12:32
Да, должно работать, я же его у себя вначале собрал.
апреля 21, 2006 в 09:13
а не подскажете, как можно сделать чтобы данные (например текущая дата) выводились не по нажатию кнопки, а при загрузке страницы
апреля 21, 2006 в 09:34
например так:
${todayDate}
где собсно todayDate это строка, лежащая в атрибутах запроса. Положить ее туда нужно контроллером.
апреля 21, 2006 в 10:21
сделал с taglib: Greetings, it is now
но результат тот же, время показывается только после нажатия кнопки, а не когда страница загрузилась
апреля 21, 2006 в 10:25
все сделал, спасибо за помощь
апреля 21, 2006 в 10:29
А контроллер отрабатывает при показе страницы?
Т.е. суть такая: на нужный урл вешается контроллер, которые все нужно складывает в ModelAndView.
У вас похоже страница сама по себе открывается, без вызова контроллера, т.е. например по другому урлу, томкатом как jsp. А по нажатию кнопку запрос как раз отправляется туда куда нужно, срабатывает контроллер и складывает значение для показа на странице.
ПОлучается вам нужно писать не /calc.jsp, а /calc.html, именно на последний урл был повешан контроллер, по крайней мере в моем примере.
мая 31, 2006 в 02:52
АШИПКА:
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));
мая 31, 2006 в 06:09
С чего бы это ошибка? Java 1.5 всеже
сентября 28, 2006 в 07:49
А возможно ли переходить с одного контолера на другой в внутри ModelAndView?
декабря 13, 2006 в 06:57
можно редиректом, new ModelAndView (new RedirectView («адрес нового контроллера»))
апреля 6, 2007 в 07:29
Не все так гладко у меня при обращении к /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)
апреля 6, 2007 в 08:38
Вы случаем не пропустили extends AbstractController?
сентября 20, 2007 в 21:02
saludos, tengo el mismo problema pero no te entiendo
hi, i have the same problem but icant understand your lenguage
any possibilities¿
сентября 21, 2007 в 02:47
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
ноября 13, 2007 в 10:05
Можно ли в spring реализовать архитектуру SOA???
Можно ли развёртывать и связывать между собой web сервисы???
Заранее благодарен.
ноября 13, 2007 в 11:38
Чесно скажу что не совсем разбираюсь в «философии» SOA, и в том что можно назвать полным комплектом услуг для такого приложения. Поэтому не дам экспертный ответ можно ли реализовать SOA, но скажу по опыту что soap методы/классы, как таковые, реализуются на ура.
января 4, 2008 в 19:36
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 а объявлять бины следующим образом:
января 4, 2008 в 19:37
Блин, коменты теги режут? В таком случаем, мой предыдущий пост прошу щитать абсолютно бесполезным (
мая 21, 2008 в 08:58
Подскажите пожалуйста:
1. Есть ли возможность вызывать Spring MVC Controller «напрямую» (например как Struts2 actions localhost:8080/login.action) — например для Ajax-запросов
2. Как быть, если я не хочу возвращать из метода handleRequestInternal объект ModelAndView, а просто хочу напрямую записать в responce некоторые данные (для все тех же Ajax-запросов)? Могу ли я просто вернуть null?
мая 21, 2008 в 09:55
Подсказываю.
1. Да, конечно. И честно говоря даже не пойму как можно вызвать контроллер не напрямую. Контроллер вешается на урл, когда браузер запрашивает урл то выполняется соответствующий контроллер. Все напрямую получается. Ajax прекрасно работает со Spring
2. Да, достаточно вернуть null.
мая 21, 2008 в 10:09
Спасибо большое!
1. а нельзя ли написать что-то вроде myController.action (например), ну чтобы не делать URL-mapping (это я и имел ввиду — «напрямую») например
2. ок
мая 21, 2008 в 14:32
у меня задеплоено 2 war модуля. И мне нужно сделать «кроссмодульный» вызов ActionController метода. Как мне это сделать? Ведь в таком случае url-mapping мне не поможет, как мне можно написать URL прямо к контрллеру (В Struts такая возможность есть login.do написать для struts1 или login.action для struts2). А как быть здесь?
Спасибо!
мая 21, 2008 в 17:05
Чтобы не описывать url mapping можно придумать свою систему адресации и связей с ней контроллеров. А потом реализовать свой бин urlMapping, делается без проблем, за пару строк кода, может даже сейчас чтото такое и в комплекте идет, не смотрел.
А про кроссмодульность я не понял. Вы имеете ввиду что у вас jsp лежит в одном war, а контроллер для обработки в другом war? Если все так, то не пойму кто вам запрещает написать урл прямо к контроллеру из другого war? это же обычная строка, в браузере, в http заголовке, и ей пофиг что там у вас struts ли, spring или вообще perl-cgi.
мая 21, 2008 в 17:33
Так вот это и есть мой вопрос. Как написать URL прямо к контроллеру.
Спасибо!
мая 21, 2008 в 18:03
Я не пойму где именно в этой, вполне тривиальной, операции у вас сейчас проблема. Или может слишком абстрактные вопросы, скажите подробней.
Все просто. Например, если у вас контроллер повешен на урл «/my/ctrl/path» то url на этот контроллер можно указать в html как localhost:8080/mywebapp/my/ctrl/path
где localhost:8080 это хост:порт на котором запущен ваш томкат с приложением, а mywebapp это имя приложения (с контроллером) в томкате.
Т.е. URL к контроллеру это < хост>/[< приложение>/]< путь на который замеплен контроллер>
ЗЫЖ то как в статье описан бин urlMapping вопросов не вызывает? Тут все понятно?
мая 21, 2008 в 19:24
Да, мне полностью понятен принцип URL mapping (он практичеки идентичен во всех frameworks), я хочу вызывать свой контроллер БЕЗ url mappings.
мая 21, 2008 в 19:35
Без описания той строки в xml? Ну сделайте свой бин вместо приведенного в примере бина urlMapping, который по другому будет решать, без ручного меппинга. Я же говорил про это, что именно было непонятно в том ответе?
Или что иное вы подразумеваете «без url мепппинга»?
мая 21, 2008 в 21:44
Проводя аналогию со стратс Action[struts] = Controller[Spring MVC], работая со struts я могу вызывать localhost:8080/mywebapp/myAction.do, Action тоже может быть замаплен на URL, но есть возможность и прямого вызова — как в этом примере. А как с Spring MVC? Могу ли я вызывать что-то вроде localhost:8080/mywebapp/myController.do
мая 22, 2008 в 07:23
Вы издеваетесь??? Вы мои комментарии читаете? Я уже два раза вам написал что «ДА, МОЖНО». И как сделать это я тоже уже два раза разжевал. Перечитайте заново мои ответы, медленно и внимательно, особенно внимательно упоминания того что нужно заменить бин urlMapping на свой.
мая 22, 2008 в 13:27
Сорри, что пудрю Вам мозги, но я думал, что получится обойтись без мэппинга вовсе.
мая 22, 2008 в 14:22
Так я же говорю что можно обойтись, без ручного указания меппинга. Но вы наверное понимаете что должна быть какаято логика по которой спринг поймет какой контроллер соответствует данному контроллеру. К примеру я делал подобное: /< имяконтроллера>.html
и мой меппер уже по регекспу выдергивал из строки, к примеру /usersList.html вот это вот usersList, и искал контроллер с именем ctrl.usersList (т.е. я добавлял к нему префикс, так у меня было принято именовать бины) который далее и выполнял.
Меппинга, в данном случае, как видите, нет вовсе, но надо же хоть какую то логическую структуру придумать по которой можно понять какой контроллер вызвать. Так вот это вам и нужно указать в бине с именем urlMapping. Это просто имя бина, а реализовать что угодно можно.
Возможно вам поможет класс BeanNameUrlHandlerMapping, он напрямую к бинам меппит. Т.е. на урл вида /users.html он выполнит контроллер с id="/users.html" но это уже как то криво получается, некрасиво.
Поэтому отнаследуйте класс AbstractHandlerMapping и сделайте там как угодно, там на самом деле работы на 30 минут для вашего случая.
Но еще раз уточняю: этот, вами созданный, класс нужно объявить как бин с id="urlMapping" Это лишь имя бина. По имени спринг понимает что именно вот этот класс знает как же нам связать урл и контроллер.
И если вы не хотите даже упоминания буквосочетания «urlMapping» то это конечно тоже можно сделать, можно придумать свое наименование, типа «superSecretBeanTsssDontCheckItsSources» и сказать чтобы спринг искал такое имя, но зачем??
Вы бы действительно раскрыли бы карты уже, сказали бы чтож такое вы хотите сделать, можно в аську/скайп. Просто иначе все настолько абстрактно в вопросе, что непонятно что вам отвечать.
мая 22, 2008 в 14:25
Вот для вашего случая пишете в spring.xml:
и по запросу localhost:8080/mywebapp/mycontroller.do отработает наш контроллер-калькулятор.
мая 22, 2008 в 17:21
Спасибо, я вечером попробую!
мая 30, 2008 в 18:04
Здравствуйте!
Хочу снова обратиться к Вам как 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, но как это сделать?
Спасибо Вам большое за ответы!
мая 30, 2008 в 18:06
Блин, повырезало все XML-куски, можно ли для полной картины отправить их Вам на Email, или ещё как-то...
мая 30, 2008 в 23:00
Бог с вами, какой из меня спринг-гуру, он слишком обширный чтобы я с ним полностью разобрался когда нибудь
По поводу вопроса действительно обрезало и не совсем понял вопрос, к тому же пятница. Мои прочие контакты указаны на странице «Обо мне», пишите если что.
Но у меня такое подозрение что вам нужно както организовать авторизацию из своего кода. В таком случае это запросто реализуемо, в acegi есть соответствующие методы, посмотрите на AuthenticationManager и SecurityContextHolder.
июня 11, 2008 в 18:22
Сделал аналогичное приложение, где ввожу символьную информацию. И вместо русских букв получаю «кракозябры». Заранее спасибо!
июня 13, 2008 в 15:07
А это уже смотрите настройки томката. Например artamonov.ru/2006/01/18/t...vka-get-zaprosa/
июля 18, 2008 в 17:41
Спасибо! Но “кракозябры” у меня именно при POST запросе.
июля 18, 2008 в 18:09
Тогда смотрите несовпадения в кодировке указанной в jsp, форме, фильтрах и пр.
июля 29, 2009 в 16:48
to splix:
Вы писали:
> ... за то, какой будет конечный файл, отвечает viewResolver, который настраивается в конфиге спринга. Но это позже.
Но тема так нигде и не раскрыта.
Нужно упомянуть хотя-бы, что по-умолчанию используется InternalResourceViewResolver.
Это преобразователь (resolver) рассматривает имя представления (view) как путь к ресурсу web-приложения.
июля 30, 2010 в 16:28
Спасибо за пример
и вопрос бональный:
чтоб протестировать его на своей машине кроме Eclipsa что еще стоять должно?
наверно какой ни будь Web сервер — Denwer подойдет?
и что еще нужно?
или может ссылки почитать подскажите.
спасибо.
июля 30, 2010 в 21:39
Да, еще нужен вебсервер. Например Tomcat, денвер я думаю не пойдет.
августа 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}'.
августа 16, 2010 в 14:14
Уже разобрался с этой проблемой)
августа 16, 2010 в 15:20
Блин, проект сделан и запущен, но при обращении к 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>августа 17, 2010 в 00:12
А приложение точно запускается? В логах все хорошо? В менеджере томката написано что приложение запустилось?
Можно попробовать/* , но похоже причина совсем не в этом.
августа 17, 2010 в 08:24
Да пробовал я уже через /*, все так же.
Работаю через websphere, а не томкат. Но сути не меняет, приложение точно запущено.
Я вот думаю, никаких доп настроек websphere не надо делать?
августа 17, 2010 в 09:31
Ну я подозреваю что внутри вебсферы все равно томкат будет. Так что сути не меняет, да
(кстати, а зачем спринг если все равно вебсфера? точнее наоборот, зачем в спринговом приложении вебсфера?)
Тогда так: если включить в log4j логе DEBUG режим для org.springframework то что в логе повится?
августа 17, 2010 в 10:28
Такс...Пересоздавал проект, даж не добавляя 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)
августа 17, 2010 в 10:34
Насколько понимаю, не видит он как раз
org.springframework.web.servlet.DispatcherServlet
августа 17, 2010 в 13:29
С этим уже разобрался.Терь призапускеприложения все норм...Но при обращении к нужной странице браузер выдает ошибку 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)
августа 17, 2010 в 17:58
А test.SumController он точно extends AbstractController?
августа 17, 2010 в 19:49
Да.
Я объяснял выше, что приложение отрабатывает норм, если, в 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>
А если как в примере, то запускается оно норм — без ошибок. И только при обращении к нужной странице появляется ошибка в логах
августа 17, 2010 в 20:40
Если как сервлет работат то может у вас всетаки сервлет? Спрингу нужен контроллер. Еще раз: test.SumController он точно extends AbstractController?
августа 20, 2010 в 09:15
Все... Эт мой косяк был...Все заработало)) спс всем)))
августа 23, 2010 в 16:33
Всем доброго времени суток...
Никто не подскажет, что означает следующая ошибка
[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
сентября 21, 2010 в 21:52
Тоже получил ошибку 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 !?
сентября 21, 2010 в 21:55
Полный лог привожу на всякий случай:
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)
сентября 22, 2010 в 05:53
Разобрался... Сделал неправильный импорт — вместо import org.springframework.web.portlet.mvc.AbstractController;
указал
import org.springframework.web.servlet.mvc.AbstractController;
Отсюда и полез portlet и ошибки. Хорошо бы в тексте ваших примеров указывать и import'ы тоже — для «особо одарённых»
сентября 22, 2010 в 05:55
P.S. Импорты в предыдущем сообщении местами поменять
сентября 29, 2010 в 13:32
Цитата из статьи:
«А 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).
Кто знает почему это происходит и как это предотвратить?
сентября 30, 2010 в 10:30
Разобрался с проблемой, может кому пригодиться.
Происходит это потому, что повторно вызывается response.getOutputStream () из Spring`а.
Как вариант, чтобы это предотвратить вместо Controller`а Spring`а использовать HttpServlet.
декабря 14, 2010 в 14:04
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
Уже разобрался с этой проблемой)
такая же проблема, а можно описание разбора
декабря 14, 2010 в 14:06
в классе SumController импорт org.springframework.web.servlet.DispatcherServlet прекрассно виден, а в web.xml указывает на такую же ошибку.
февраля 7, 2012 в 14:27
все работает, только при нажатии кнопки «Calc» даные не отображаются — страница пустая ...