gstanley
gstanley

Reputation: 73

How to load Spring applicationContext into Jersey Application

I'm creating a Jersey JAX-RS web service with the following:

package com.mycompany.rest.config;

import java.util.Set;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;


@ApplicationPath("")
public class ApplicationConfig extends Application {

    @Override
    public Set<Class<?>> getClasses() {
        return getRestResourceClasses();
    }

    private Set<Class<?>> getRestResourceClasses() {
        Set<Class<?>> resources = new java.util.HashSet<Class<?>>();
        resources.add(com.mycompany.rest.controllers.UserController.class);
        return resources;
    }
}

However, when I try and integrate a spring applicationContext such as the following :

<?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.xsd
   http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

    <context:component-scan base-package="com.mycompany.rest.user"/>


    <bean id="userService" class="com.mycompany.rest.user.UserServiceImpl" />

</beans>

I get null pointers from my controller class for the userService being loaded by the bean pasted above. I'm assuming this is because the application context is not being loaded into the Jersey application.

Is there a way of doing this?

Upvotes: 0

Views: 3664

Answers (2)

Faouzi
Faouzi

Reputation: 1019

I had the same problem, and i fixed it by adding @autowired to my service, and extending SpringBeanAutowiringSupport like the following :

@Path("/mails")
public class MailController extends SpringBeanAutowiringSupport{
@Autowired
private MailService mailService;

@GET
@Path("/{code}")
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
public String getMails(@PathParam("code") String code) throws Exception {
    //function logic
}

Note that this is working without integrating jersey-springx.jar And I'm using Spring 3 along with jersey-bundle-1.19.1.jar

Upvotes: 1

Don Bottstein
Don Bottstein

Reputation: 1660

If you want to inject Spring beans into your Jersey resource classes, you need to add jersey-spring3 dependency to your class path. see https://jersey.java.net/documentation/latest/spring.html

An hello-world example can be found at https://github.com/jersey/jersey/tree/2.19/examples/helloworld-spring-webapp

Upvotes: 1

Related Questions