2013-09-10 4 views
0

Я реализовал WS, используя Jax-ws в моем проекте сервера, и я делаю вызовы к службе из клиентского приложения. Проблема в том, что если я хочу использовать @Autowire в моем аннотированном классе @WebService, он всегда выдает следующую ошибку:Autowired in WS не работает Весна

InjectionException: ошибка при создании управляемого объекта для класса: class com.myco.wsserver.LeaveRequestEndPoint;

Если я отлаживаю этот класс, ссылка на мой автоузел bean равна нулю. если я удаляю компонент из моего аннотированного класса @webservice, он работает, также если я получаю контекст приложения вручную, а затем получаю его, но он также работает, но я хотел бы знать, почему я не могу автообучь любой компонент.

Вот мой код.

WebService класс:

@WebService(serviceName="LeaveRequestHandler") 
public class LeaveRequestEndPoint extends SpringBeanAutowiringSupport{ 

    @Autowired 
    GenericBean mBean; 

    public LeaveRequestEndPoint(GenericBean mBean){ 
     this.mBean = mBean; 
    } 


    @WebMethod(operationName="executeOperation") 
    public String getText() { 
     return mBean.getText(); 

    } 
} 

контекст приложения:

<?xml version="1.0" encoding="UTF-8"?> 
<beans:beans xmlns="http://www.springframework.org/schema/mvc" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:beans="http://www.springframework.org/schema/beans" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd 
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> 

    <!-- DispatcherServlet Context: defines this servlet's request-processing 
     infrastructure --> 

    <!-- Enables the Spring MVC @Controller programming model --> 
    <annotation-driven /> 

    <context:annotation-config /> 

    <!-- Handles HTTP GET requests for /resources/** by efficiently serving 
     up static resources in the ${webappRoot}/resources directory --> 
    <resources mapping="/resources/**" location="/resources/" /> 

    <!-- Resolves views selected for rendering by @Controllers to .jsp resources 
     in the /WEB-INF/views directory --> 
    <beans:bean 
     class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <beans:property name="prefix" value="/WEB-INF/views/" /> 
     <beans:property name="suffix" value=".jsp" /> 
    </beans:bean> 


    <beans:bean id="genericBean" class="com.myco.wsserver.GenericBean"/> 

</beans:beans> 

ответ

0

конструктор класса вызывается до инъекции происходит. Это не способ построения классов с использованием весны. Существует @PostConstruct аннотация гарантирует, что инъекции готовы при построении класса, или может использоваться инъекция конструктора.

Конструктор теперь является правильным. Инъекция выполняется после запуска конструктора.

У вас есть 2 варианта.

  1. Переместить @Автоматическая аннотация для конструктора. (Конструктор инъекции)

    @Autowired общественного LeaveRequestEndPoint (GenericBean MBean)

  2. Удалить конструктор и использовать сеттер инъекции геттер. (Сеттер инъекции геттер)

GenericBean mBean; имеет модификатор доступа по умолчанию, поэтому ваши инъекции не удается. Измените mBean на приватное и добавьте получателей сеттера.

@Autowired 
private GenericBean mBean; 

public setMBean(GenericBean mBean) 
{ 
this.mBean = mBean; 
} 
public getMBean() 
{ 
return this.mbean; 
} 
+0

Как вы предположили, я добавил и присваивателя, но он бросает ту же ошибку – BigBen3216

+0

Oww жаль. см. мои правки. У вас есть конструктор класса, который вызывается перед инъекцией. – erencan

Смежные вопросы