2013-11-11 2 views
4

При запуске встроенного сервера Grizzly я бы хотел, чтобы Джерси использовал мой существующий контейнер Spring. Это было возможно в jersey-1.0 (Grizzly, sharing spring generated context), но, похоже, не работает в Jersey 2.x.Как настроить существующий контекст приложения в Jersey-Spring с помощью встроенного сервера Grizzly?

Этот код работает в Джерси 1.17:

HttpServer server = new HttpServer(); 
final NetworkListener listener = new NetworkListener("grizzly", NetworkListener.DEFAULT_NETWORK_HOST, PACS.RESTPort); 
listener.setSecure(false); 
server.addListener(listener); 
ResourceConfig rc = new PackagesResourceConfig("edu.mayo.qia.pacs.rest"); 

// Let Jersey know about our existing context 
SpringComponentProviderFactory handler = new SpringComponentProviderFactory(rc, PACS.context); 
HttpHandler processor = ContainerFactory.createContainer(HttpHandler.class, rc, handler); 
server.getServerConfiguration().addHttpHandler(processor, ""); 

server.start(); 

Вот мой код в Джерси 2 (я не могу понять замену SpringComponentProviderFactory):

HttpServer server = new HttpServer(); 

final NetworkListener listener = new NetworkListener("grizzly", NetworkListener.DEFAULT_NETWORK_HOST, PACS.RESTPort); 
server.addListener(listener); 

ResourceConfig rc = new ResourceConfig(); 
rc.packages("edu.mayo.qia.pacs.rest"); 
HttpHandler processor = ContainerFactory.createContainer(GrizzlyHttpContainer.class, rc); 
server.getServerConfiguration().addHttpHandler(processor, ""); 

Когда я запускаю код (с джерси-пружиной3), я получаю это исключение:

Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: 
IOException parsing XML document from class path resource [applicationContext.xml]; 
nested exception is java.io.FileNotFoundException: class path resource [applicationContext.xml] cannot be opened because it does not exist 

Grizzly пытается загрузить мою пружину con текст из applicationContext.xml, но он основан на аннотациях и уже загружен. Как я могу получить Гризли и/или Джерси, чтобы найти мой контекст?

IVY Config является:

<dependency org="org.glassfish.jersey.core" name="jersey-client" rev="2.3"/> 
<dependency org="org.glassfish.jersey.core" name="jersey-server" rev="2.3"/> 
<dependency org="org.glassfish.jersey.core" name="jersey-common" rev="2.3"/> 
<dependency org="org.glassfish.jersey.connectors" name="jersey-grizzly-connector" rev="2.3"/> 
<dependency org="org.glassfish.jersey.containers" name="jersey-container-grizzly2-http" rev="2.3"/> 
<dependency org="org.glassfish.jersey.ext" name="jersey-spring3" rev="2.3"/> 

ответ

2

У меня был точно такой же вопрос ... Вам просто нужно связать свой существующий контекст с гризли. В моем случае ClassPathXmlApplicationContext:

yourContext = new ClassPathXmlApplicationContext("application-context.xml"); 

ResourceConfig rc = new ResourceConfig(HazelcastRestService.class); 
rc.property("contextConfig", yourContext); 

URI uri = new JerseyUriBuilder().host("0.0.0.0").port(8888).build(); 
httpServer = GrizzlyHttpServerFactory.createHttpServer(uri, rc); 
0

К сожалению ответить, что поздно, но может, возможно, полезно для кого-то другого.

Вы должны добавить исключение:

<build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-surefire-plugin</artifactId> 
       <version>2.12.2</version> 
       <configuration> 
        <classpathDependencyExcludes> 
         <classpathDependencyExcludes>org.glassfish.jersey.ext:jersey-spring3</classpathDependencyExcludes> 
        </classpathDependencyExcludes> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 
Смежные вопросы