2017-05-10 36 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的語法相當脆弱。)

相關問題