Pregunta

A pesar de que en mi clase @WebService Extiendo SpringBeanAutowiringSupport, Autowiring simplemente no funciona para la primavera 2,5, tomcat6.

nada se inyecta.

I probado a los granos de autowiring en el método principal, utilizando classpathcontext, todo se inyecta bien. Pero no para punto final JAX-WS.

¿tienes ideas?

¿Fue útil?

Solución

supongo que está utilizando este elemento de configuración:

<context:annotation-config />

Sin embargo, para habilitar el soporte para la anotación @Endpoint, debe agregar este elemento:

<context:component-scan base-package="" />

Otros consejos

he encontrado la solución. El problema es que la primavera no Autowire frijoles para clases @WebService (según lo encontrado en otros foros que podría ser un error actual).

La solución :

Uso org.springframework.beans.factory.config.AutowireCapableBeanFactory.class en lugar de utilizar la anotación @Autowired para inyectar sus granos (por ejemplo @Service, @Repository etc).

Así que:

  1. incluyen @Resource WebServiceContext

    @Resource
    private WebServiceContext context;  
    
  2. utilizarla para conseguir su frijol

    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");
    

    clase MyDAO puede ser como sigue:

    @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);
        }
    
        //...
    }
    
  3. Después de esto se puede utilizar el objeto myDAO en el método @WebMethod.

No sé si es el mismo caso que todos los demás. Funcionó para mí, cambiando el orden de los oyentes en web.xml. Poner el ContextLoaderListener antes WSServletContextListener resuelva el problema.

Sería mejor si se ha utilizado algún implementación de referencia, como el metro, Axis2, Apache-cxf para una fácil configuración de dicho punto final en el servicio web.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top