javaee / jersey

This is no longer the active Jersey repository. Please see the README.md
http://jersey.github.io
Other
2.86k stars 2.36k forks source link

Error occured when create restful api with jersey2.22.2 + spring4.1.7 #3463

Open glassfishrobot opened 7 years ago

glassfishrobot commented 7 years ago
**pom.xml**<dependency>
            <groupId>org.glassfish.jersey.containers</groupId>
            <artifactId>jersey-container-servlet-core</artifactId>
            <version>2.22.2</version>
</dependency>
<dependency>
            <groupId>org.glassfish.jersey.ext</groupId>
            <artifactId>jersey-spring3</artifactId>
            <version>2.22.2</version>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-core</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-web</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-beans</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-context</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-aop</artifactId>
                </exclusion>
            </exclusions>
</dependency>
<dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-core-asl</artifactId>
        </dependency>
        <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-mapper-asl</artifactId>
        </dependency>
        <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-jaxrs</artifactId>
            <version>1.9.12</version>
</dependency>
**web.xml**<servlet>
    <servlet-name>jersey restful</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
      <param-name>javax.ws.rs.Application</param-name>
      <param-value>com.boco.gpsp.rest.RestApplicationInit</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>jersey restful</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>
**RestApplicationInit**package com.boco.gpsp.rest;

import javax.ws.rs.ApplicationPath;
import org.codehaus.jackson.jaxrs.JacksonJsonProvider;
import org.glassfish.jersey.filter.LoggingFilter;
import org.glassfish.jersey.server.ResourceConfig;
import org.glassfish.jersey.server.spring.scope.RequestContextFilter;
import com.boco.gpsp.rest.resource.UserResource;

@ApplicationPath("/rest")
public class RestApplicationInit extends ResourceConfig{

    public RestApplicationInit() {  
        packages("com.boco.gpsp.rest.resource");
        register(UserResource.class);
            register(JacksonJsonProvider.class);
        register(RequestContextFilter.class);
        register(LoggingFilter.class);
    }

}
**UserResource**package com.boco.gpsp.rest.resource;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.boco.gpsp.service.UserService;

@Path("users")
@Component
public class UserResource {

    @Autowired
    private UserService userService;

    @GET
    @Path("{name}")
    @Produces(MediaType.TEXT_PLAIN)
    public String search(@PathParam("id") String name) {
        return userService.getUserByName(name);
    }
}
**UserService**package com.boco.gpsp.service;

import org.springframework.stereotype.Service;

import com.boco.gpsp.service.UserService;

@Service
public class UserService {

    public String getUserByName(String name) {
        return "user: name=" + name;
    }

}
**spring-servlet.xml**<context:annotation-config />
<context:component-scan base-package="com.boco.gpsp.*" />

When i test my api in chrome by : http://localhost:9090/app/rest/users/jack error appeared as below:

javax.servlet.ServletException: A MultiException has 3 exceptions. They are: 1. org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.boco.gpsp.service.UserService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations:

{@org.springframework.beans.factory.annotation.Autowired(required=true)}

2. java.lang.IllegalArgumentException: While attempting to resolve the dependencies of com.boco.gpsp.rest.resource.UserResource errors were found 3. java.lang.IllegalStateException: Unable to perform operation: resolve on com.boco.gpsp.rest.resource.UserResource

org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:489) org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:427) org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:388) org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:341) org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:228) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

Environment

windows 64bit, tomcat7.x, JDK7, apache maven 3.3.3

Affected Versions

[2.22.2]

glassfishrobot commented 7 years ago

Reported by pengpeng2611

glassfishrobot commented 7 years ago

This issue was imported from java.net JIRA JERSEY-3191