хотя в моем классе @Webservice Я расширяю SpringBeanAutowiringSupport, автопроводка просто не работает для Spring 2.5, tomcat6.
ничего не вводится.
Я протестировал автоматическое подключение этих компонентов в основном методе, используя classpathcontext, все вводится нормально. Но не для конечной точки jax-ws.
У вас есть идеи?
Я нашел решение. Проблема в том, что Spring не поддерживает автоматическую передачу bean-компонентов для классов @WebService (как можно найти на других форумах, это может быть текущая ошибка).
@WebService
Решение :
Используйте org.springframework.beans.factory.config.AutowireCapableBeanFactory.class вместо @Autowired аннотации для инъекции ваших бобов (например, @Service, @Repository и т. Д.).
org.springframework.beans.factory.config.AutowireCapableBeanFactory.class
@Autowired
@Service
@Repository
Итак:
включает @Resource WebServiceContext
@Resource
WebServiceContext
@Resource private WebServiceContext context;
используйте его для получения вашего боба
MyDAO myDAO = null; ServletContext servletContext = (ServletContext) context .getMessageContext().get("javax.xml.ws.servlet.context"); WebApplicationContext webApplicationContext = WebApplicationContextUtils .getRequiredWebApplicationContext(servletContext); myDAO = (MyDAO) webApplicationContext .getAutowireCapableBeanFactory().getBean("myDAO");
MyDAO класс может быть следующим:
MyDAO
@Service @Qualifier("myDAO") @Transactional public class MyDAO { private HibernateTemplate hibernateTemplate; @Required @Autowired public void setSessionFactory(SessionFactory sessionFactory) { this.hibernateTemplate = new HibernateTemplate(sessionFactory); } public MyInfo getMyInfo(Long id){ return this.hibernateTemplate.get(MyInfo.class, id); } //... }
после этого вы можете использовать myDAO объект в методе @WebMethod.
myDAO
@WebMethod
Я не знаю, тот ли это случай, что и у всех остальных. Это сработало для меня, изменив порядок слушателей в web.xml. Размещение ContextLoaderListener до того, как WSServletContextListener решит проблему.
Я предполагаю, что вы используете этот элемент конфигурации:
<context:annotation-config />
Но чтобы включить поддержку аннотации @Endpoint, необходимо добавить этот элемент:
<context:component-scan base-package="" />
Было бы лучше, если бы вы использовали некоторые эталонные реализации, такие как Metro, Axis2, apache-cxf, для простой настройки такой конечной точки в веб-сервисе.