2013-11-16 3 views
0

Я запускаю веб-приложение во встроенном экземпляре Jetty. Приложение было реализовано с помощью Vaadin вместе со слоем сервисов RESTful. Все кажется прекрасным, за исключением того, что уровень сервиса недоступен. Все запросы к этому слою, похоже, обрабатываются сервлетом Vaading, а не обрабатываются сервлетом Джерси.Уровень служб RESTful, не отображаемый Jetty embedded

Похоже, что проблема не связана с загрузкой файла web.xml, поскольку другие элементы, объявленные в этом файле, такие как слушатели, работают исправно. Что меня озадачивает, так это то, что уровень сервиса работает правильно, когда сервер не работает как внедренный экземпляр (каждый запрос отправляется правильным сервлетом).

кода я использую следующее:

this.server = new Server(); 
ServerConnector httpConnector = new ServerConnector(this.server); 
httpConnector.setHost("localhost"); 
httpConnector.setPort(this.port); 
httpConnector.setIdleTimeout(30000); 
server.addConnector(httpConnector); 

WebAppContext webapp = new WebAppContext(); 
webapp.setContextPath("/"); 
if (resourcePath.toLowerCase().endsWith(".war")) { 
    webapp.setWar(resourcePath); 
} else { 
    webapp.setResourceBase(resourcePath); 
    webapp.setDescriptor(resourcePath + "/WEB-INF/web.xml");     
} 

webapp.setParentLoaderPriority(true); 

this.server.setHandler(webapp); 
this.server.setStopAtShutdown(true); 
this.server.start(); 

Я также попытался добавить обработчики сервлеты программна, но это не сработало. Я написал что-то вроде этого:

ServletHolder vaadinHolder = new ServletHolder(
    "Application", 
    com.vaadin.terminal.gwt.server.ApplicationServlet.class); 
vaadinHolder.setInitParameter("application", "com.yyy.MyApplication"); 
webapp.addServlet(vaadinHolder, "/*"); 

ServletHolder jerseyHolder = new ServletHolder(
    "JerseyServices", 
    com.sun.jersey.spi.container.servlet.ServletContainer.class); 
jerseyHolder.setInitParameter(
    "com.sun.jersey.config.property.packages", "com.yyy.services"); 
jerseyHolder.setInitOrder(1); 
webapp.addServlet(jerseyHolder, "/resources/*"); 

ответ

0

Я решил проблему. Он был связан с ContextPath. Как только я заменил значение / (корневой контекст) с выбранным контекстным именем для этого приложения, все стало работать должным образом.

WebAppContext webapp = new WebAppContext(); 
webapp.setContextPath("/app-context"); 

Оставьте комментарий здесь, если он будет полезен в будущем.

Смежные вопросы