2011-03-14 9 views
3

J'essaie d'exposer un service Web en utilisant JBossWS (pile native) et aussi profiter de l'injection de dépendance de Spring. Voici une version de mon frottée vers le bas code:Configuration du ressort dans JBossWS

web.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" 
    version="2.4"> 

    <display-name>Test Service</display-name> 

    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value> 
      /WEB-INF/applicationContext.xml 
     </param-value> 
    </context-param> 

    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 

    <servlet>  
     <servlet-name>EndpointService</servlet-name> 
     <servlet-class>com.blah.webservice.EndpointService</servlet-class> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>EndpointService</servlet-name> 
     <url-pattern>/*</url-pattern> 
    </servlet-mapping> 
</web-app> 

applicationContext.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xmlns:aop="http://www.springframework.org/schema/aop" 
     xmlns:tx="http://www.springframework.org/schema/tx" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     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:spring-configured /> 
    <context:load-time-weaver /> 
    <context:annotation-config /> 

    <context:component-scan base-package="com.blah.webservice" /> 
</beans> 

EndpointService.java

package com.blah.webservice; 

import javax.jws.WebMethod; 
import javax.jws.WebService; 
import javax.jws.soap.SOAPBinding; 

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

@Service 
@WebService 
@SOAPBinding(parameterStyle=SOAPBinding.ParameterStyle.BARE) 
public class EndpointService { 

    private TestService testService; 

    public EndpointService() {} 

    @Autowired 
    public EndpointService(TestService testService) { 
     this.testService = testService;   
    } 

    @WebMethod 
    public String endpointEcho(String echo) { 
     return echo; 
    } 

    @WebMethod 
    public String serviceEcho(String echo) { 
     return testService.serviceEcho(echo); 
    } 
} 

TestService.java:

package com.blah.webservice; 

import org.springframework.stereotype.Service; 

@Service 
public class TestService { 

    public TestService() {} 

    public String serviceEcho(String echo) { 
     return echo; 
    } 
} 

Quand je construis cela et déployer sur JBoss, il démarre très bien et je peux voir printemps est pré-instancié mes cours mais quand je lance des appels au service Web, endpointEcho fonctionne comme prévu tandis que serviceEcho lève une exception NullPointerException. Il semble que lorsque JBossWS instancie la classe de noeud final, il ne découvre pas ma configuration Spring. Y a-t-il un moyen simple de dire à JBossWS à propos de Spring? Je me sens comme si je suis soit en train de rater un très petit détail, soit j'aborde tout cela de travers. Des idées?

Répondre

2

Votre service doit étendre SpringBeanAutowiringSupport pour pouvoir tirer parti du support autowiring.

+0

J'ai essayé ça. Tenter de faire un appel à testService me donne toujours une exception NullPointerException. Il semble que l'autowiring ait lieu, mais peut-être dans le mauvais contexte. – bhinks

+0

J'ai donc essayé de nouveau (la troisième fois c'est un charme, n'est-ce pas?) Et ça semble fonctionner. J'ai déplacé l'annotation @Autowired du constructeur de la classe de point de terminaison vers les déclarations de propriétés individuelles, et maintenant je suis en train de basculer et de rouler. Merci! – bhinks

Questions connexes