2013-07-19 4 views
1

У меня есть WAR с некоторыми услугами JAX-RS, развернутыми в TomEE Plus. Учитывая услугу, аннотированную @Path("myservice"), TomEE + публикует ее до localhost:8080/mywebapp/myservice.Как настроить базовый путь JAX-RS в TomEE +?

Однако, это также делает доступ к JSP при localhost:8080/mywebapp/index.jsp невозможным - JAXRSInInterceptor жалуется, что No root resource matching request path has been found, Relative Path: /index.jsp.

Поэтому я хотел бы настроить префикс пути api для всех служб, который изменяет адрес myservice на localhost:8080/mywebapp/api/myservice. Это было бы тривиально, если бы я сам сконфигурировал CXF (с Spring или без него), потому что я мог просто изменить шаблон URL-адреса CSM-сервлета, но я полагаюсь на настройки по умолчанию, где я не настраиваю ничего, кроме аннотаций. Итак, как мне это сделать в этом случае?

Обратите внимание, что я не хочу изменять аннотации @Path, чтобы включить префикс, потому что это не устраняет проблему с JSP.

ответ

2

Создать расширение javax.ws.rs.core.Application и аннотировать его с @ApplicationPath где значение будет api в вашем случае:

@ApplicationPath("/api") 
public class MyApplication extends Application { 

    @Override 
    public Set<Class<?>> getClasses() { 
     final Set<Class<?>> classes = new HashSet<Class<?>>(); 
     // register root resource 
     classes.add(MyServiceResource.class); 
     return classes; 
    } 
} 

Таким образом, контейнер сервлетов 3 найдет приложение и карту свой сайт в /mywebapp/api/myservice, делая свой веб ресурсы (.jsp) доступны по адресу /mywebapp.

+1

Хорошо, это работает, спасибо! Тем не менее, я бы предпочел способ сделать это, что не заставило меня реализовать метод getClasses(). Когда у меня нет класса «Приложение», мои ресурсы обнаруживаются автоматически, но когда у меня есть один и не перезаписываются 'getClasses()', ресурсы не создаются :-( –

+0

Я бы рекомендовал взять посмотрите на API-интерфейсы CXF, если они обрабатывают подобные ситуации (Джерси, см. [ResourceConfig # packages] (https://jersey.java.net/apidocs/latest/jersey/org/glassfish/jersey/server/ResourceConfig .html # packages (java.lang.String ...)), так что это не редкость). –

1

Ствол TomEE поддерживает следующие конфигурации: cxf.jaxrs.staticSubresourceResolution & cxf.jaxrs.static-ресурсы-список

но @ApplicationPath является более актуальным решением ИМО

Использование -Dopenejb.webservice.old -deployment = true может также помочь в некоторых случаях

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