NullPointerException in MruCacheStorage
Generates text that depends on changing data (like dynamic HTML).
Brought to you by:
revusky
Looks like you had this issue a few years ago, but it appears to have reared its head again.
It isn't critical since the case sensitive checking is only for dev, but it is inconvenient to have to bounce the server to clear it up. It has only happened a couple of times, and I unfortunately cannot reproduce it consistently, though I'm pretty sure it happens in response to a template reload. Given its rarity, I'm assuming it is a thread safety issue.
Caused by: java.lang.NullPointerException
at freemarker.cache.MruCacheStorage$MruEntry.unlink(MruCacheStorage.java:302)
at freemarker.cache.MruCacheStorage.unlinkEntryAndInspectIfSoft(MruCacheStorage.java:186)
at freemarker.cache.MruCacheStorage.relinkEntryAfterStrongHead(MruCacheStorage.java:134)
at freemarker.cache.MruCacheStorage.get(MruCacheStorage.java:89)
at freemarker.cache.FileTemplateLoader.isNameCaseCorrect(FileTemplateLoader.java:247)
at freemarker.cache.FileTemplateLoader.access$300(FileTemplateLoader.java:42)
at freemarker.cache.FileTemplateLoader$2.run(FileTemplateLoader.java:186)
at java.security.AccessController.doPrivileged(Native Method)
at freemarker.cache.FileTemplateLoader.findTemplateSource(FileTemplateLoader.java:167)
at freemarker.cache.MultiTemplateLoader.findTemplateSource(MultiTemplateLoader.java:62)
at org.apache.struts2.views.freemarker.FreemarkerThemeTemplateLoader.findTemplateSource(FreemarkerThemeTemplateLoader.java:37)
at freemarker.cache.TemplateCache.findTemplateSource(TemplateCache.java:742)
at freemarker.cache.TemplateCache.lookupTemplateWithAcquisitionStrategy(TemplateCache.java:695)
at freemarker.cache.TemplateCache.access$500(TemplateCache.java:54)
Indeed,
FileTemplateLoader.isNameCaseCorrectwasn't properly synchronized! Fixed in the Git repo, thanks! (Note for others that it isn't a bug inMruCacheStorage. This issue pops up if something usesMruCacheStoragewithout synchronization, as it's not a thread-safe class.)