2016-01-09 159 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 + "\"}"; 
}