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?
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
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