2014-09-17 3 views
3

Я пытаюсь использовать Джерси 2 с Spring с помощью этой статьи: How to use Jersey 2 with Spring IoC containerJersey 2 + Spring: @Autowired является нулевым

Но autowired боб является недействительным, когда приложение пытается вызвать его после того, как запрос клиента , В applicationContext.xml у меня есть только компонент-сканирование настройка.

In pom.xml: 
<spring.version>4.1.0.RELEASE</spring.version> 
<jersey.version>2.12</jersey.version> 

@Component 
@RequestScoped 
@Path("/user") 
public class UserREST { 
    @Autowired 
    private UserFacade userFacade; 

    @POST 
    @Path("/auth") 
    @Consumes(MediaType.APPLICATION_JSON) 
    @Produces({MediaType.APPLICATION_JSON}) 
    public AuthResponse authorize(User user){ 
     return userFacade.authorize(user); // Null is caught here 
    } 
} 

-

@Component 
public class UserFacade { 

    public AuthResponse authorize(com.pushock.model.User user){ 
     AuthResponse response = new AuthResponse(); 
     response.setAuthorized(true); 
     return response; 
    } 
} 

Что я делаю неправильно?

UPD: Вот мой pom.xml https://bitbucket.org/spukhov/memo-ws/src/00724e00e3aa786f62fd0e43fe0606de6ae569df/pom.xml?at=master

+0

являются вы сканируете правильные пакеты с помощью 'component-scan'? – yate

+0

@yate компонент-сканирование корректно устанавливается в корневой пакет (всегда работал для меня) – Reynard

+0

@luiggi Это не дубликат. Пожалуйста, подтвердите или оставьте отзыв. – Reynard

ответ

9

Весна управляемых компоненты не могут быть введены в классы JAX-RS напрямую, вам нужно использовать расширение Джерси для интеграции с весной.

Существует зависимость Maven, который вы не имеете в вашем pom.xml

<dependency> 
    <groupId>org.glassfish.jersey.ext</groupId> 
    <artifactId>jersey-spring3</artifactId> 
    <version>2.12</version> 
</dependency> 

См Джерси Документация: Chapter 22. Spring DI и в нижней части страницы есть ссылка на sample spring integration проект Github.

Другая проблема, которую я видел в вашем проекте, заключается в том, что вы не указали, как загружать и настраивать весенний контекст. Вам нужно настроить его в web.xml

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

    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>classpath:applicationContext.xml</param-value> 
    </context-param> 
+0

большое вам спасибо! – Reynard

+0

добро пожаловать :) –

1

и в случае, если вы используете подход, основанный на Java для конфигурации яровой, вы также должны:

servletContext.setInitParameter("contextConfigLocation", "<NONE>"); 

в вашем WebApplicationInitializer реализации

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