[
https://issues.apache.org/jira/browse/WW-5101?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17257401#comment-17257401
]
ASF subversion and git services commented on WW-5101:
-----------------------------------------------------
Commit c2eadc2bcefccc882f2445f1201043185e4a6624 in struts's branch
refs/heads/master from JCgH4164838Gh792C124B5
[ https://gitbox.apache.org/repos/asf?p=struts.git;h=c2eadc2 ]
Initial attempt to address WW-5101
- Add comments to methods related to ResrouceBundle cache clearing.
- Correct clearTomcatCache() so that it acts as intended for Tomcat 7-10.
- Add clearResourceBundleClassloaderCaches() method that uses standard Java
API calls to perform the cache clearing.
- Adjust clearMap() logic to only change accessiblity when required.
> AbstractLocalizedTextProvider illegal reflective access operation has occurred
> ------------------------------------------------------------------------------
>
> Key: WW-5101
> URL: https://issues.apache.org/jira/browse/WW-5101
> Project: Struts 2
> Issue Type: New Feature
> Components: Core
> Affects Versions: 2.5.26
> Reporter: Greg Huber
> Assignee: Greg Huber
> Priority: Minor
> Fix For: 2.6
>
> Time Spent: 1h 20m
> Remaining Estimate: 0h
>
> Testing on java 11 AbstractLocalizedTextProvider outputs
> WARNING: An illegal reflective access operation has occurred
> WARNING: Illegal reflective access by
> com.opensymphony.xwork2.util.AbstractLocalizedTextProvider
> (file:struts2-core-2.5.26.jar|file:///struts2-core-2.5.26.jar) to field
> java.util.ResourceBundle.cacheList
> WARNING: Please consider reporting this to the maintainers of
> com.opensymphony.xwork2.util.AbstractLocalizedTextProvider
> WARNING: Use --illegal-access=warn to enable warnings of further illegal
> reflective access operations
> WARNING: All illegal access operations will be denied in a future release
> {code:java}
> clearMap(ResourceBundle.class, null, "cacheList");
> private void clearMap(Class cl, Object obj, String name) throws
> NoSuchFieldException, IllegalAccessException,
> NoSuchMethodException, InvocationTargetException{
> Field field = cl.getDeclaredField(name);
> field.setAccessible(true);
> Object cache = field.get(obj);
> synchronized (cache) {
> Class ccl = cache.getClass();
> Method clearMethod = ccl.getMethod("clear");
> clearMethod.invoke(cache);
> }
> }
> {code}
> When it executes the line field.setAccessible(true); produces the warning.
> Seems we might be able to replace
> {code:java}
> try{
> clearMap(ResourceBundle.class, null, "cacheList"); }
> catch (NoSuchFieldException e) {
> // happens in IBM JVM, that has a different ResourceBundle impl it has a
> 'cache' member
> clearMap(ResourceBundle.class, null, "cache");
> }{code}
> with
> {code:java}
> ResourceBundle.clearCache();
> {code}
> Tomcat also uses the same method to flush resourceEntries. Tomcat checks
> org.apache.catalina.loader.WebappClassLoader but for version #9 its using
> org.apache.catalina.loader.ParallelWebappClassLoader, so defaults to
> {code:java}
> clearMap(cl.getSuperclass(), loader, TOMCAT_RESOURCE_ENTRIES_FIELD);
> {code}
> Commenting out the tomcat reload, the Struts bundles seem to reload ok.
> Maybe drop this going forward?
>
--
This message was sent by Atlassian Jira
(v8.3.4#803005)