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.