2013-08-03 5 views
0

Я использую Grizzly в качестве веб-сервера для создания автономного сервиса REST с Джерси. Я также хочу использовать Spring IoC в приложении, но у меня возникли проблемы с автоматическими компонентами.Гризли, Джерси и весна авто-проводки вопрос

Для создания сервера я бегу это мой основной() метод:

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(); 
    } 

} 

Теперь, когда я называю метод в классе Test, который ссылается testBo, я получение 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

Можете ли вы поделиться подробный журнал 'NullPointerException '?? – iNan

+0

Я включил это сейчас. спасибо – Zyga

+0

Извините за поздний ответ, загружен ли ваш контекст приложения ??? – iNan

ответ

0

Если у вас есть Java 8 - может быть стоит посмотреть на Microserver ,

Он предоставляет инфраструктуру для интеграции Grizzly, Jersey 2 и Spring 4.0. Если ваш основной метод в пакете com.test, то все, что вам нужно: -

public static void main(String[] args){ 

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

} 

В противном случае, вы должны также аннотировать основной класс с

@Microserver(basePackages={"com.test"})