[ 
https://issues.apache.org/jira/browse/WW-5101?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17257402#comment-17257402
 ] 

ASF subversion and git services commented on WW-5101:
-----------------------------------------------------

Commit 213990944ffdc131b4f7595f52f05f5fb8d56b31 in struts's branch 
refs/heads/master from Lukasz Lenart
[ https://gitbox.apache.org/repos/asf?p=struts.git;h=2139909 ]

Merge pull request #460 from 
JCgH4164838Gh792C124B5/localS2_26_WW-5101_cleanupfix1

Initial attempt to address WW-5101

> 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: 1.5h
>  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)

Reply via email to