2013-07-19 21 views
1

我有一些WAR部署到TomEE Plus中的一些JAX-RS服務。鑑於服務註釋爲@Path("myservice"),TomEE +將其發佈到localhost:8080/mywebapp/myservice如何在TomEE +中配置JAX-RS基礎路徑?

但是,這也使訪問一個JSP在localhost:8080/mywebapp/index.jsp不可能 - JAXRSInInterceptor抱怨No root resource matching request path has been found, Relative Path: /index.jsp

所以我想爲所有服務配置路徑前綴api,這會將myservice URL更改爲localhost:8080/mywebapp/api/myservice。如果我自己配置​​CXF(有或沒有Spring),這樣做會很簡單,因爲我可以簡單地更改CXF Servlet的URL模式 - 但我依賴的是默認設置,除了註釋。那麼在這種情況下我該怎麼做?

請注意,我不想更改@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; 
    } 
} 

這樣一個Servlet 3容器會發現你的應用程序和資源映射到/mywebapp/api/myservice同時使你的網頁資源(.jsp)可在/mywebapp處獲得。

+1

好的,那可行,謝謝!但是,我更喜歡這樣做的方式,不強迫我實現'getClasses()'方法。當我沒有'Application'類時,我的資源被自動檢測到,但是當我有一個''''並且不覆蓋'getClasses()'時,沒有資源被建立:-( –

+0

我建議採取如果他們正在處理這樣的情況,請查看CXF專有API(Jersey做的,請參閱[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是更相關的解決方案IMO

使用-Dopenejb.webservice.old -deployment = true也可以在某些情況下提供幫助