2013-08-03 1 views
0

웹 서버로 Grizzly를 사용하여 Jersey로 독립 실행 형 REST 서비스를 만듭니다. 또한 어플리케이션에서 Spring IoC를 사용하고 싶지만 자동 배선 콩에 문제가있다.Grizzly, Jersey 및 Spring 자동 배선 문제

내가 내 main() 메소드에서이 작업을 실행하는 서버 만들려면 :

HttpServer server = null; 

try { 
    ResourceConfig rc = new PackagesResourceConfig(""); 
    ConfigurableApplicationContext cac = new ClassPathXmlApplicationContext("classpath*:/spring-context.xml");   
    IoCComponentProviderFactory factory = new SpringComponentProviderFactory(rc, 

    server = GrizzlyServerFactory.createHttpServer("http://localhost:5555", rc, factory); 
    System.in.read(); 
} catch (Exception e) { 
    e.printStackTrace(); 
} finally { 
    try { 
     if (server != null) { 
      server.stop(); 
     } 
    } catch (Exception e) { 
      e.printStackTrace(); 
    } 
} 

내 스프링의 context.xml 바로 아래에 포함을 :

<context:annotation-config /> 
<context:component-scan base-package="com.test"/> 

나는 자동 와이어 BO 개체를 원하는 저지 리소스 클래스에서 :

@Path("/test") 
@Service 
public class Test { 

    @Autowired 
    private testBO testBo; 
    .... 

    @GET 
    @Path("/info") 
    public String getInfo() { 
     return testBo.get(); 
    } 

} 

이제 testBo를 참조하는 Test 클래스의 메서드를 호출 할 때마다 점점 NullPointerException, 내가 생각하는 콩은 자동 배선되지 않았다.

testBO 클래스에는 @Component 주석이 있습니다. 또한 모든 관련 빈은 "com.test"패키지 또는 해당 하위 패키지의 일부입니다.

누구나 내가 뭘 잘못하고 있는지 알 수 있습니까? 아래 NullPointerException이에 대한 요청 스택 추적으로

:

java.lang.NullPointerException 
    at com.test.Test.getInfo(Test.java:27) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60) 
    at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$TypeOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:185) 
    at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75) 
    at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:288) 
    at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147) 
    at com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108) 
    at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147) 
    at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84) 
    at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1469) 
    at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1400) 
    at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1349) 
    at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1339) 
    at com.sun.jersey.server.impl.container.grizzly2.GrizzlyContainer._service(GrizzlyContainer.java:215) 
    at com.sun.jersey.server.impl.container.grizzly2.GrizzlyContainer.service(GrizzlyContainer.java:185) 
    at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:162) 
    at org.glassfish.grizzly.http.server.HttpHandlerChain.service(HttpHandlerChain.java:195) 
    at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:162) 
    at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:160) 
    at org.glassfish.grizzly.filterchain.ExecutorResolver$3.execute(ExecutorResolver.java:95) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:444) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:364) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:290) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:133) 
    at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:76) 
    at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:63) 
    at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:823) 
    at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:113) 
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:116) 
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$000(WorkerThreadIOStrategy.java:55) 
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$1.run(WorkerThreadIOStrategy.java:98) 
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:508) 
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:488) 
    at java.lang.Thread.run(Thread.java:662) 

나는 또한보고하고 그 콘솔 출력 :

03-Aug-2013 17:46:33 org.springframework.context.support.AbstractApplicationContext prepareRefresh 
INFO: Refreshing org[email protected]131f71a: startup date [Sat Aug 03 17:46:33 BST 2013]; root of context hierarchy 
03-Aug-2013 17:46:33 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons 
INFO: Pre-instantiating singletons in org.s[email protected]1971afc: defining beans []; root of factory hierarchy 
+0

하여 메인 클래스에 주석을한다 '?? – iNan

+0

나는 그것을 포함시켰다. 감사합니다 – Zyga

+0

늦게 답장을 보내 드려 죄송합니다. 응용 프로그램 컨텍스트가로드되고 있습니까 ??? – iNan

답변

0

당신은 자바 (8)이있는 경우 - Microserver에서 살펴 본다 가치가있을 수도 있습니다 .

Grizzly, Jersey 2 및 Spring 4.0을 통합하기위한 인프라를 제공합니다. 주요 방법은 패키지 com.test에있는 경우에, 당신이 필요로하는 모든입니다 - 그렇지 않으면

public static void main(String[] args){ 

    new MicroserverApp(()->"context").run(); 

} 

, 당신은 또한 당신이`NullPointerException이의 자세한 로그를 공유하시기 바랍니다 수

@Microserver(basePackages={"com.test"}) 
관련 문제