Der folgende Beispielcode ist eine mögliche Lösung für folgendes Problem:
Auf einem Tomcat (5.5 ß alles altes Legacy Zeugs ;-) ) soll ein Webservice veröffentlicht werden. Als Technik soll JAX-WS verwendet werden. Ein Spring-WS kommt wegen dem Contract-First Ansatz nicht in Frage.
Der Webservice:
@WebService(targetNamespace = "http://de.sourcecoding.webservice", name = "dummyws", serviceName = "dummyws")
public class WSDummy {
public abcDTO getDummyData(int id) {
// ...
}
Web.xml:
servlet>
<servlet-name>JAX-WS</servlet-name>
<description>Servlet for JAX-WS integration</description>
<servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>JAX-WS</servlet-name>
<url-pattern>/ws</url-pattern>
</servlet-mapping>
Funktioniert wunderbar J
Jetzt steht man allerdings vor dem Problem, wie man einen gemanagten Spring Bean hier injizieren kann. Mit folgenden Code ist dies Möglich:
@WebService(targetNamespace = "http://de.sourcecoding.webservice", name = "dummyws", serviceName = "dummyws")
public class WSDummy {
@Resource
WebServiceContext wsCtxt;
public AbcDTO getDummyData(int id) {
MessageContext msgCtxt = wsCtxt.getMessageContext();
ServletContext sc = (ServletContext) msgCtxt
.get(MessageContext.SERVLET_CONTEXT);
ApplicationContext context = WebApplicationContextUtils
.getWebApplicationContext(sc);
// hole Spring Bean
XYZService service = (XYZService) context.getBean("xXZService");
}
In dem Webservice wird per @Resource der Context injiziert. Über diesen Context kann dann der gesetzt Spring ApplicationContext gezogen werden. In diesem Beispiel wird der XYZService dann als gemanagter Spring Bean behandelt.
Keine Kommentare:
Kommentar veröffentlichen