2014-11-10 3 views
0

나는 많은 것을 시도했지만 내 저지 자원에서 나의 "searchservice"가 무작위로 인스턴스화 된 것으로 보인다. SearchResource의 SearchService는 거의 항상 null입니다.스프링 4 + 유니폼 통합 @Autowired

보시다시피 나는 스프링 저지 종속성을 추가했습니다.

@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; 
    } 

} 

내 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> 

내 웹 : SearchResource

@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; 
    } 

내 클래스 searchService을 (저지, searchService을 instantiante하려고) : 여기

내 코드는 .xml :

,451,515,
<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> 

답변

2

여기 내 코드입니다 : SearchResource 저지 당신의 SearchService를 인스턴스화하지 않습니다

주 (저지, searchService을 instantiante보십시오). 리소스에 @Component 주석이 있으므로 SearchService는 Spring에 의해 SearchResource에 연결되어야하며 Jersey는 Spring에서 SearchResource 인스턴스를 검색해야합니다.

스프링 컨텍스트가 두 번 만들어지고 있습니까 (저지에서 한 번, Spring의 ContextLoaderListener에 의해 한 번)? Jersey가 시작되기 전에 스프링 컨텍스트 fully initialized이 있습니까? Jersey는 Spring 컨텍스트를 찾은 다음 create one on its own (줄 98)을 찾지 못하면 시도합니다.

저지의 스프링 통합은 다소 어렵습니다. 가장 좋은 방법은 몇 가지 중단 점을 SpringComponentProviderAutowiredInjectResolver에 설정 한 다음 디버거에서 단계별로 실행하는 것입니다. 디버깅 할 때 suspend=y을 설정하면 실제로 디버거에 연결될 때까지 아무 일도 일어나지 않습니다. 디버그 설정에 대한 자세한 내용은 this answer을 참조하십시오.

또한 Jersey Jira (Spring related issues)를 확인하여 미해결 문제가 있는지 확인해보십시오.

관련 문제