2011-02-18 13 views
7

Tengo un servicio web en el que estoy tratando de realizar el autoenvío de una variable. Aquí está la clase:Cómo hacer que un @WebService sea consciente de

package com.xetius.isales.pr7.service; 

import java.util.Arrays; 
import java.util.List; 

import javax.jws.WebService; 

import org.springframework.beans.factory.annotation.Autowired; 

import com.xetius.isales.pr7.domain.PR7Product; 
import com.xetius.isales.pr7.domain.PR7Upgrade; 
import com.xetius.isales.pr7.logic.UpgradeControllerInterface; 

@WebService(serviceName="ProductRulesService", 
      portName="ProductRulesPort", 
      endpointInterface="com.xetius.isales.pr7.service.ProductRulesWebService", 
      targetNamespace="http://pr7.isales.xetius.com") 
public class ProductRulesWebService implements ProductRulesWebServiceInterface { 

    @Autowired 
    private UpgradeControllerInterface upgradeController; 

    @Override 
    public List<PR7Product> getProducts() { 
     if (upgradeController == null) { 
      return Arrays.asList(new PR7Product("Fail")); 
     } 
     return upgradeController.getProducts(); 
    } 

    @Override 
    public List<PR7Upgrade> getUpgrades() { 
     if (upgradeController == null) { 
      return Arrays.asList(new PR7Upgrade("Fail")); 
     } 
     return upgradeController.getUpgrades(); 
    } 

    @Override 
    public List<PR7Product> getProductsForUpgradeWithName(String upgradeName) { 
     if (upgradeController == null) { 
      return Arrays.asList(new PR7Product("Fail")); 
     } 
     return getProductsForUpgradeWithName(upgradeName); 
    } 

} 

Sin embargo, cuando intento acceder al servicio web que estoy recibiendo la versión Falla regresó, lo que significa que no se está upgradeController autowired. Aquí está mi applicationContext:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
         http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
         http://www.springframework.org/schema/context 
         http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 
    <context:component-scan base-package="com.xetius.isales.pr7" /> 
    <context:annotation-config /> 

    <bean id="upgradeController" class="com.xetius.isales.pr7.logic.UpgradeController" /> 

</beans> 

¿Cómo hago para que la clase @WebService es consciente de la primavera y el autowiring pasa

Respuesta

11

Si desea autowiring a suceder, ProductRulesWebService necesita para extender SpringBeanAutowiringSupport

La extensión de esa clase permitirá UpgradeController que se autowired

3

uso como una pila CXF, que apoya Spring natively, entonces usted puede hacer algo como esencialmente esto:

<bean id="aService" class="com.xetius.isales.pr7.service.ProductRulesWebService " /> 

<jaxws:endpoint id="aServiceEndpoint" implementor="#aService" address="/aService" /> 
+0

Esto puede también se puede hacer con Jersey: http://stackoverflow.com/questions/21104567/springjersey-transactional-annotation –

1

Dependiendo de la versión del contenedor o incluso la primavera, en adelante tendrá una solución fácil para exponer su WSDL, utilice:

@PostConstruct 
SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this); 
Cuestiones relacionadas