简体   繁体   English

春季4 +球衣集成@Autowired

[英]Spring 4 + jersey integration @Autowired

I tried a lot of things but it seems that my "searchservice" in my jersey ressource instantiate itself randomly. 我尝试了很多事情,但球衣中的“ searchservice”资源似乎是随机实例化的。 SearchService in SearchResource is almost always null. SearchResource中的SearchService几乎始终为null。

As you can see I added spring-jersey dependency. 如您所见,我添加了spring-jersey依赖项。

Here is my code : SearchResource (jersey, try to instantiante searchService) 这是我的代码:SearchResource(球衣,尝试实例化searchService)

@Path("search")
@Component
public class SearchResource {
    private static final Logger LOGGER = Logger.getLogger(SearchResource.class);
    @Context
    private UriInfo context;
    @Autowired
    private SearchService searchService;

    /**
     * Creates a new instance of SearchResource
     */
    public SearchResource() {
    }

    /**
     * Retrieves representation of an instance of com.gehc.mpse.backend.ws.SearchResource
     * @param search
     * @param <error>
     * @param authors
     * @return an instance of java.lang.String
     */
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public Response search(@QueryParam("query") String search, @QueryParam("authors") List<String> authors) {
        System.out.println("searchservice :" + searchService);
        Response res = searchService.searchQuery(search);
        return res;
    }

    public SearchService getSearchService() {
        return searchService;
    }

    public void setSearchService(SearchService searchService) {
        this.searchService = searchService;
    }

My class searchService : 我的课程searchService:

@Component
public class SearchService {

    private static final Logger LOGGER = Logger.getLogger(SearchService.class);
    @Autowired
    private IPublicationRepository repository;
    @Autowired
    private Neo4jTemplate template;
    private static final Integer PAGE_SIZE = 20;

    public SearchService() {
        LOGGER.debug("search service initialzed " + this);
    }

    public Response searchQuery(String query) {

        PageRequest request
                = new PageRequest(1, PAGE_SIZE);
        LOGGER.debug("repo : " + repository);
        Page<Publication> res = repository.findPublicationByTitle(query, request);
        //repository.query(query, null);
        return Response.ok().entity(res.getContent()).build();
    }

    public IPublicationRepository getRepository() {
        return repository;
    }

    public void setRepository(IPublicationRepository repository) {
        this.repository = repository;
    }

    public Neo4jTemplate getTemplate() {
        return template;
    }

    public void setTemplate(Neo4jTemplate template) {
        this.template = template;
    }

}

My pom.xml 我的pom.xml

<dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>${spring.version}</version>
        <exclusions>
            <exclusion>
                <groupId>commons-logging</groupId>
                <artifactId>commons-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context-support</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>${spring.version}</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-tx</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-neo4j</artifactId>
        <version>3.2.0.RELEASE</version>
        <exclusions>
            <exclusion>
                <groupId>org.neo4j</groupId>
                <artifactId>neo4j</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.neo4j</groupId>
                <artifactId>neo4j-cypher</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.neo4j</groupId>
                <artifactId>neo4j-kernel</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <!-- Spring [End] -->
    <!--neo4j -->
    <dependency>
        <groupId>org.neo4j</groupId>
        <artifactId>neo4j</artifactId>
        <version>2.1.5</version>
    </dependency>
    <dependency>
        <groupId>org.neo4j.app</groupId>
        <artifactId>neo4j-server</artifactId>
        <version>2.1.5</version>
    </dependency>
    <!-- end neo4j -->
    <dependency>
        <groupId>org.glassfish.metro</groupId>
        <artifactId>webservices-rt</artifactId>
        <version>2.3</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-web-api</artifactId>
        <version>7.0</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.7</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.7.7</version>
    </dependency>

    <dependency>
        <groupId>org.apache.axis2</groupId>
        <artifactId>axis2</artifactId>
        <version>1.6.2</version>
    </dependency>
    <dependency>
        <groupId>org.apache.axis2</groupId>
        <artifactId>axis2-java2wsdl</artifactId>
        <version>1.6.2</version>
    </dependency>
    <dependency>
        <groupId>org.apache.ws.commons.axiom</groupId>
        <artifactId>axiom-api</artifactId>
        <version>1.2.14</version>
    </dependency>
    <dependency>
        <groupId>org.apache.ws.commons.axiom</groupId>
        <artifactId>axiom-impl</artifactId>
        <version>1.2.14</version>
    </dependency>
    <dependency>
        <groupId>org.reflections</groupId>
        <artifactId>reflections</artifactId>
        <version>0.9.9-RC1</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.ext</groupId>
        <artifactId>jersey-spring3</artifactId>
        <version>2.13</version>
        <exclusions>
            <exclusion>
                <groupId>org.springframework</groupId>
                <artifactId>spring</artifactId>
            </exclusion>
            <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.glassfish.jersey.core</groupId>
                <artifactId>jersey-server</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.glassfish.jersey.containers</groupId>
                <artifactId>jersey-container-servlet-core</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.glassfish.hk2</groupId>
                <artifactId>hk2</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-json-jackson</artifactId>
        <version>2.13</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

My web.xml : 我的web.xml:

<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

    <display-name>PMSE</display-name>
    <listener>
        <listener-class>
            org.springframework.web.context.ContextLoaderListener
        </listener-class>
    </listener>
    <listener>
        <listener-class>
            org.springframework.web.context.request.RequestContextListener
        </listener-class>
    </listener>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath*:spring/context.xml</param-value>
    </context-param>
</web-app>

Here is my code : SearchResource (jersey, try to instantiante searchService) 这是我的代码:SearchResource(球衣,尝试实例化searchService)

Note that Jersey won't instantiate your SearchService. 请注意,泽西岛不会实例化您的SearchService。 Because you have a @Component annotation on the resource, SearchService should be wired into SearchResource by Spring and Jersey should retrieve the SearchResource instance from Spring. 因为您在资源上具有@Component批注,所以Spring应该将SearchService连接到SearchResource中,并且Jersey应该从Spring中检索SearchResource实例。

Is your Spring context being created twice (once by Jersey and once by Spring's ContextLoaderListener)? 您的Spring上下文是否被创建了两次(一次由Jersey创建,一次由Spring的ContextLoaderListener创建)? Is the Spring context fully initialized before Jersey starts? 在Jersey启动之前,Spring上下文是否已完全初始化 Jersey looks for a Spring context and then attempts to create one on its own (line 98) if it can't find one. Jersey寻找Spring上下文,然后找不到上下文的情况下尝试自行创建 (第98行)。

Jersey's Spring integration is somewhat difficult. 泽西岛(Jersey)的Spring整合有些困难。 Your best bet is to set some breakpoints in SpringComponentProvider and AutowiredInjectResolver and then step through it in your debugger. 最好的选择是在SpringComponentProviderAutowiredInjectResolver中设置一些断点,然后在调试器中逐步进行。 When debugging, you can set suspend=y so that nothing happens until you actually connect with the debugger. 调试时,可以设置suspend=y以便在您实际连接调试器之前什么都不会发生。 See this answer for more details on the debug setup. 有关调试设置的更多详细信息,请参见此答案

I'd also check the Jersey Jira for Spring related issues and see if any of the open issues apply to you. 我还将检查Jersey Jira的春季相关问题,并查看是否有任何未解决的问题适合您。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM