2017-05-10 38 views
0

我收回了在Liberty 16.0.0.4中运行的(解压缩)WAR内的JAR文件内的文件的URL。代码大致是:Websphere Liberty:WAR中的文件的URL没有正确的上次修改时间戳

URL url = servletContext.getResource(somePath); 
URLConnection connection = url.openConnection(); 
long lastModified = connection.getLastModified(); 

的URL的形式

"wsjar:file:/{path_to_WAR}/My.war/WEB-INF/lib/someLIB.jar!/META-INF/resources/foo/bar.txt" 

我找文件的时间戳,因为它是用来生成的ETag,高速缓存控制等相反,我得到someLIB.jar的时间戳。 jar的时间戳是无意义的,并且在eclipse开发过程中发布期间以及在我们的自动化构建期间都在不断变化。

这不是一个错误吗?有什么解决方法吗?

回答

1

wsjar协议尝试与jar协议具有相同的用户可见行为。唯一有意义的区别是允许更好地控制缓存和Windows文件共享锁。 jar协议返回JAR的时间戳,而不是条目,所以wsjar协议也是这样做的,所以这不是一个错误。从理论上讲,您可以尝试提交RFE来为非标准行为添加选项,但尚不清楚它是否会实际执行。

作为一种解决方法,您可以调整构建以在JAR中存储包含所有其他文件的时间戳的附加文件,或者可以将ETag更改为使用弱验证而非强验证。 (其他人可能会建议解析wsjar URL并自己打开JAR,但依赖于其他JAR的语法相当脆弱。)

相关问题