How to make an @WebService spring aware
15,519
Solution 1
If you want autowiring to happen, ProductRulesWebService needs to extend SpringBeanAutowiringSupport
Extending that class will allow UpgradeController to be autowired
Solution 2
Use a stack like CXF, which supports Spring natively, then you can essentially do something like this:
<bean id="aService" class="com.xetius.isales.pr7.service.ProductRulesWebService " />
<jaxws:endpoint id="aServiceEndpoint" implementor="#aService" address="/aService" />
Solution 3
Depending on container version or even the Spring, hereinafter you will have an easy solution to expose your WSDL, use:
@PostConstruct
SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
Comments
-
Reinout van Rees almost 2 years
I have a Web Service which I am trying to Autowire a variable into. Here is the class:
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); } }
However, when I try to access the web service I am getting the Fail version returned, meaning that upgradeController is not being autowired. Here is my 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>
How do I make it so that the @WebService class is spring aware and autowiring happens
-
Constantino Cronemberger over 9 yearsThis can also be done with Jersey: stackoverflow.com/questions/21104567/…