2015-05-14 64 views
1

我有一個WAR文件,我在Tomcat中運行。此WAR包含多個HTML頁面(用於測試目的)http://localhost:port/testapp/somepage.html我如何從CXF REST服務類獲取上下文路徑

包括在這個應用程序也是CXF REST服務端點,這是在http://localhost:port/testapp/cxf/有一些服務託管像http://localhost:port/testapp/cxf/getlink

的getlink方法服務應該返回一個鏈接到HTML頁面中的一個。 我不想在代碼或配置文件中靜態設置上下文路徑,因爲我無法控制應用程序將託管在什麼上下文路徑。

所以我想要做的是在運行時獲取上下文路徑。我該怎麼做呢?

我曾嘗試以下(注意@Path("/")的路徑是「CxF」一部分來自web.xml和它的CXF servlets的路徑)

@Path("/") 
public class TestEndpoint { 
... 
@Context 
UriInfo uri; 

@GET 
@Path("/getlink") 
public Response giveMeXML(@Context Request context) { 
    URI baseURI = UriBuilder.fromUri(uri.getBaseUri()).replacePath("").build(); 
.... 
} 

我預計UriInfo.getBaseUri()給我一個URI包含我的應用程序的「scheme:// host:port/contextpath」,但它沒有。它返回 「scheme:// host:port/contextpath/cxf-app-path」like http://localhost:8080/testapp/cxf

如何獲取在REST端點下部署WAR的上下文路徑?想要的是以某種方式獲取部署WAR的上下文路徑,如:http://localhost:8080/testapp/

回答

0

不幸的是,AFAICT,沒有單一的API來獲取這些信息。您將需要手動執行它(通過一些字符串操作)。一種方法是注入HttpServletRequest並使用 API來創建路徑。例如

@GET 
public String getServletContextPath(@Context HttpServletRequest request) { 
    return getAbsoluteContextPath(request); 
} 

public String getAbsoluteContextPath(HttpServletRequest request) { 
    String requestUri = request.getRequestURL().toString(); 
    int endIndex = requestUri.indexOf(request.getContextPath()) 
            + request.getContextPath().length(); 
    return requestUri.substring(0, endIndex); 
} 
相關問題