2016-01-09 74 views
0

我在Eclipse中創建了動態Web項目並將其添加到ear項目中。在wildfly8上部署war文件後找不到資源文件

圖片資源被放置在SRC \資源\

代碼中使用資源:

@GET 
@Path("bank") 
@Produces("application/json") 
public String getBank(@Context HttpHeaders headers) { 
    ClassLoader classLoader = getClass().getClassLoader(); 
    File file = new File(classLoader.getResource("/resources/alfa.png").getFile()); 
    String base64 = Utility.getBase64(file); 
    return "{\"icon\":\"" + base64 + "\"}"; 
} 

在調試它的確定。

當ear部署代碼拋出異常時: java.io.FileNotFoundException:C:\ apps \ wildfly-8.2.0.Final \ bin \ content \ TimerService.ear \ timer.war \ WEB-INF \ classes \ resources \ alfa.png

所有資源都存在於包含在ear-file中的war文件中。

出了什麼問題?

+0

不能引用類路徑資源java.o.File對象,因爲他們往往會不存在的文件系統不同的文件系統對象。修改Utility.getBase64來取代java.io.InputStream。 –

+0

查看[getResourceAsStream()vs FileInputStream](http://stackoverflow.com/questions/2308188/getresourceasstream-vs-fileinputstream)中的所有答案以獲取更多信息。我相信你的問題是一個騙局,但我找不到一個好匹配 –

+0

謝謝史蒂夫。 getResourceAsStream()是解決方案。 –

回答

0

這樣它應該工作

@GET 
@Path("bank") 
@Produces("application/json") 
public String getBank(@Context final HttpServletRequest request) { 
    ClassLoader classLoader = request.getServletContext().getClassLoader(); 
    File file = new File(classLoader.getResource("/resources/alfa.png").getFile()); 
    String base64 = Utility.getBase64(file); 
    return "{\"icon\":\"" + base64 + "\"}"; 
}