Остальные веб-сервисы с jersey-spring3 и существующим контекстом приложения Spring

У меня есть существующее приложение Spring с моим собственным контекстом, которое загружается из десятков XML-файлов Spring. Веб-сервер Grizzly запущен для публикации сервисов Soap.

Теперь я хотел бы также обслуживать Rest-запросы от того же Grizzly. Я использую jersey-spring3, но он запускает собственный, отдельный контекст приложения из требуемого applicationContext.xml.

Это код, который создает Grizzly HttpServer, где зарегистрированы веб-сервисы Rest и Soap:

    //rest services
    ResourceConfig resourceConfig = new ResourceConfig(
            RestService1.class, //these are 
            RestService2.class //jersey-spring services
    );
    HttpServer httpServer = GrizzlyHttpServerFactory.createHttpServer(URI.create("http://localhost:8080/rest"), resourceConfig, false);

    //soap services
    HttpHandler httpHandler = new JaxwsHandler(mySoapWebService, false);
    httpServer.getServerConfiguration().addHttpHandler(httpHandler, myPath);

    httpServer.start();

Мои сервисы Rest (созданные вторым контекстом Spring) имеют зависимости внедрения от первого контекста приложения. Эти инъекции явно не работают. В настоящее время я сам ввожу их вручную с помощью какого-то хакерского кода.

Как правильно внедрить службы Spring для обработки запросов Rest в существующее приложение, где джерси повторно использует существующий контекст?


person nicole.torres    schedule 04.12.2014    source источник


Ответы (1)


Взгляните на helloworld-spring-annotations из проекта Джерси на GitHub. Вам просто нужно задайте свойство "contextConfig" в приложении Jersey со значением, являющимся экземпляром Spring ApplicationContext

resourceConfig.property("contextConfig", 
        new AnnotationConfigApplicationContext(SpringAnnotationConfig.class));

Затем вы сможете @Autowired интегрировать компоненты Spring в компоненты Джерси.

См. также:

person Paul Samsotha    schedule 20.09.2015