[ 
https://issues.apache.org/struts/browse/TILES-286?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=44471#action_44471
 ] 

Antonio Petrelli commented on TILES-286:
----------------------------------------

Reflection is used since it is possible to use Tiles under a portlet 
environment, thus using PortletContext instead of ServletContext.

About the upgrade, why don't you try, at least on your machine, with Jetty 
5.1.14? If the bug is still there, we could fix the problem.
What I don't want to do is writing a workaround in Tiles for a bug in Jetty.

> TilesAccess won't set context attributes in Jetty 5.1.10
> --------------------------------------------------------
>
>                 Key: TILES-286
>                 URL: https://issues.apache.org/struts/browse/TILES-286
>             Project: Tiles
>          Issue Type: Bug
>          Components: tiles-api
>    Affects Versions: 2.0.6
>         Environment: Java(TM) 2 Runtime Environment, Standard Edition (build 
> 1.5.0_12-b04), Jetty 5.1.11, SUSE Linux Enterprise 10, 64 bit
>            Reporter: Dmitry
>
> The code for setting a context attribute in the TilesAccess class is as 
> follows: 
>     private static void setAttribute(Object context, String name, Object 
> value) 
>         throws TilesException { 
>         try { 
>             Class<?> contextClass = context.getClass(); 
>             Method attrMethod = contextClass.getMethod("setAttribute", 
> String.class, Object.class); 
>             attrMethod.invoke(context, name, value); 
>         } catch (Exception e) { 
>             throw new TilesException("Unable to set attribute for specified 
> context: '" + context + "'"); 
>         } 
>     } 
> The line 
>             attrMethod.invoke(context, name, value); 
> throws an IllegalAccessException if Tiles are used inside a Jetty 5.1.11. 
> This happens because Jetty's implementation of the 
> javax.servlet.ServletContext interface is an inner class without the public 
> modifier. 
> I.e., Jetty's org.mortbay.jetty.servlet.ServletHandler$Context is not public 
> although it's setAttribute() is. 
> The same applies to getAttribute() and removeAttribute() methods.
> One of the possible solutions is to reflect the method not only from the 
> class itself, but from all its superclasses and interfaces as well.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to