虽然在我的@Webservice类中 我扩展了SpringBeanAutowiringSupport,自动装配根本不适用于Spring 2.5, 的tomcat6。
没有注入任何东西。
我在main方法中测试了那些bean自动装配,使用classpathcontext,一切都注入正常。 但不适用于jax-ws端点。
你有想法吗?答案 0 :(得分:9)
我找到了解决方案。问题是Spring没有为@WebService
类自动装配bean(在其他论坛上可能是当前的bug)。
解决方案:
使用org.springframework.beans.factory.config.AutowireCapableBeanFactory.class
而非使用@Autowired
注释来注入您的bean(例如@Service
,@Repository
等)。
所以:
包括@Resource
WebServiceContext
@Resource
private WebServiceContext context;
用它来获取你的bean
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
类可以如下:
@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
对象。
答案 1 :(得分:4)
我不知道是否和其他人一样。它通过改变web.xml中侦听器的顺序为我工作。在WSServletContextListener之前放置ContextLoaderListener解决了这个问题。
答案 2 :(得分:1)
我猜你正在使用这个配置元素:
<context:annotation-config />
但要启用对@Endpoint注释的支持,必须添加以下元素:
<context:component-scan base-package="" />
答案 3 :(得分:0)
如果您使用一些参考实现(如Metro,Axis2,apache-cxf)以便在Web服务上轻松配置此类端点,那会更好。