Наш проект работает на JBoss 6 с Spring 3.0.5. Все шло гладко, пока мы не попытались реализовать некоторые веб-сервисы с помощью JAX-WS. Если я попытаюсь сделать несколько простых WS (например, добавить 2 числа), это просто сработает - я добавлю аннотации и добавлю аннотированный класс в качестве сервлета.
Но все становится сложнее, если я пытаюсь заполнить свои классы JAX-WS зависимостями.
Вот мой код:
@WebService(name = "principal")
public class PrincipalWebService extends SpringBeanAutowiringSupport {
@Autowired
private PrincipalManager manager;
@WebMethod
public int add(int a, int b) {
return a + b;
}
@WebMethod
public Principal getById(int i) {
return manager.getById(i);
}
}
Метод Add работает, но getById не работает с NPE. Я отлаживал SpringBeanAutowiringSupport, и похоже, что ContextLoader.getCurrentWebApplicationContext () возвращает ноль. Это означает, что конструктор SpringBeanAutowiringSupport вызывается до инициализации контекста.
Я пытался следовать инструкциям CXF при запуске приложения с помощью Spring . У меня сейчас нет этого кода, но я зарегистрировал PrincipalWebService в качестве компонента, создал файл Spring для настройки CXF и добавил этот компонент через его идентификатор в качестве конечной точки. На Jetty все прошло хорошо, но на JBoss не получилось. Я получал различные виды исключений в зависимости от того, как я настраиваю CXF, но основная причина была та же - версия JBoss 6 CXF скомпилирована для Spring 2.5, поэтому у нас была несовместимость библиотек.
Есть ли у кого-нибудь идеи заставить IoC работать для служб Jax-ws на JBoss 6?