Author: apetrelli
Date: Sun Jul 27 07:40:05 2008
New Revision: 680114

URL: http://svn.apache.org/viewvc?rev=680114&view=rev
Log:
TILES-286
Now method calling via reflection forces the method to be accessible.
Moved ClassUtil in tiles-api.

TILES-84
Now URLs with underscores in file names are correctly excluded.

Added:
    tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/reflect/   
(with props)
    
tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/reflect/CannotAccessMethodException.java
    
tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/reflect/CannotInstantiateObjectException.java
    
tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/reflect/ClassUtil.java
    
tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/reflect/package.html
   (with props)
Removed:
    
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/util/CannotInstantiateObjectException.java
    
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/util/ClassUtil.java
Modified:
    
tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/access/TilesAccess.java
    
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/LocaleDefinitionsFactory.java
    
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/dao/BaseLocaleUrlDefinitionDAO.java
    
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/el/ELAttributeEvaluator.java
    
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/factory/AbstractTilesContainerFactory.java
    
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/factory/KeyedDefinitionsFactoryTilesContainerFactory.java
    
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/factory/TilesContainerFactory.java
    
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/preparer/BasicPreparerFactory.java
    
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/BasicRendererFactory.java
    tiles/framework/trunk/tiles-test/pom.xml
    
tiles/framework/trunk/tiles-test/src/main/java/org/apache/tiles/test/factory/TestTilesContainerFactory.java

Modified: 
tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/access/TilesAccess.java
URL: 
http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/access/TilesAccess.java?rev=680114&r1=680113&r2=680114&view=diff
==============================================================================
--- 
tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/access/TilesAccess.java
 (original)
+++ 
tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/access/TilesAccess.java
 Sun Jul 27 07:40:05 2008
@@ -24,6 +24,7 @@
 import org.apache.commons.logging.LogFactory;
 import org.apache.tiles.TilesApplicationContext;
 import org.apache.tiles.TilesContainer;
+import org.apache.tiles.reflect.ClassUtil;
 
 import java.lang.reflect.Method;
 
@@ -164,14 +165,10 @@
      * @return The object, that is the value of the specified attribute.
      */
     private static Object getAttribute(Object context, String attributeName) {
-        try {
-            Class<?> contextClass = context.getClass();
-            Method attrMethod = contextClass.getMethod("getAttribute", 
String.class);
-            return attrMethod.invoke(context, attributeName);
-        } catch (Exception e) {
-            LOG.warn("Unable to retrieve container from specified context: '" 
+ context + "'", e);
-            return null;
-        }
+        Class<?> contextClass = context.getClass();
+        Method attrMethod = ClassUtil.getForcedAccessibleMethod(
+                contextClass, "getAttribute", String.class);
+        return ClassUtil.invokeMethod(context, attrMethod, attributeName);
     }
 
     /**
@@ -184,17 +181,10 @@
      * attribute.
      */
     private static void setAttribute(Object context, String name, Object 
value) {
-        try {
-            Class<?> contextClass = context.getClass();
-            Method attrMethod = contextClass.getMethod("setAttribute", 
String.class, Object.class);
-            attrMethod.invoke(context, name, value);
-        } catch (RuntimeException e) {
-            throw e;
-        } catch (Exception e) {
-            throw new TilesAccessException(
-                    "Unable to set attribute for specified context: '"
-                            + context + "'", e);
-        }
+        Class<?> contextClass = context.getClass();
+        Method attrMethod = ClassUtil.getForcedAccessibleMethod(
+                contextClass, "setAttribute", String.class, Object.class);
+        ClassUtil.invokeMethod(context, attrMethod, name, value);
     }
 
     /**
@@ -205,16 +195,9 @@
      * @throws TilesAccessException If something goes wrong during removal.
      */
     private static void removeAttribute(Object context, String name) {
-        try {
-            Class<?> contextClass = context.getClass();
-            Method attrMethod = contextClass.getMethod("removeAttribute", 
String.class);
-            attrMethod.invoke(context, name);
-        } catch (RuntimeException e) {
-            throw e;
-        } catch (Exception e) {
-            throw new TilesAccessException(
-                    "Unable to remove attribute for specified context: '"
-                            + context + "'", e);
-        }
+        Class<?> contextClass = context.getClass();
+        Method attrMethod = ClassUtil.getForcedAccessibleMethod(
+                contextClass, "removeAttribute", String.class);
+        ClassUtil.invokeMethod(context, attrMethod, name);
     }
 }

Propchange: 
tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/reflect/
------------------------------------------------------------------------------
    svn:mergeinfo = 

Added: 
tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/reflect/CannotAccessMethodException.java
URL: 
http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/reflect/CannotAccessMethodException.java?rev=680114&view=auto
==============================================================================
--- 
tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/reflect/CannotAccessMethodException.java
 (added)
+++ 
tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/reflect/CannotAccessMethodException.java
 Sun Jul 27 07:40:05 2008
@@ -0,0 +1,72 @@
+/*
+ * $Id: CannotInstantiateObjectException.java 637434 2008-03-15 15:48:38Z 
apetrelli $
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tiles.reflect;
+
+import org.apache.tiles.TilesException;
+
+/**
+ * Indicates that a method cannot be accessed.
+ *
+ * @version $Rev: 637434 $ $Date: 2008-03-15 16:48:38 +0100 (sab, 15 mar 2008) 
$
+ * @since 2.1.0
+ */
+public class CannotAccessMethodException extends TilesException {
+
+    /**
+     * Constructor.
+     *
+     * @since 2.1.0
+     */
+    public CannotAccessMethodException() {
+    }
+
+    /**
+     * Constructor.
+     *
+     * @param message The detail message.
+     * @since 2.1.0
+     */
+    public CannotAccessMethodException(String message) {
+        super(message);
+    }
+
+    /**
+     * Constructor.
+     *
+     * @param e The exception to be wrapped.
+     * @since 2.1.0
+     */
+    public CannotAccessMethodException(Exception e) {
+        super(e);
+    }
+
+    /**
+     * Constructor.
+     *
+     * @param message The detail message.
+     * @param e The exception to be wrapped.
+     * @since 2.1.0
+     */
+    public CannotAccessMethodException(String message, Exception e) {
+        super(message, e);
+    }
+
+}

Added: 
tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/reflect/CannotInstantiateObjectException.java
URL: 
http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/reflect/CannotInstantiateObjectException.java?rev=680114&view=auto
==============================================================================
--- 
tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/reflect/CannotInstantiateObjectException.java
 (added)
+++ 
tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/reflect/CannotInstantiateObjectException.java
 Sun Jul 27 07:40:05 2008
@@ -0,0 +1,72 @@
+/*
+ * $Id: CannotInstantiateObjectException.java 637434 2008-03-15 15:48:38Z 
apetrelli $
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tiles.reflect;
+
+import org.apache.tiles.TilesException;
+
+/**
+ * Indicates that an object cannot be instantiated.
+ *
+ * @version $Rev: 637434 $ $Date: 2008-03-15 16:48:38 +0100 (sab, 15 mar 2008) 
$
+ * @since 2.1.0
+ */
+public class CannotInstantiateObjectException extends TilesException {
+
+    /**
+     * Constructor.
+     *
+     * @since 2.1.0
+     */
+    public CannotInstantiateObjectException() {
+    }
+
+    /**
+     * Constructor.
+     *
+     * @param message The detail message.
+     * @since 2.1.0
+     */
+    public CannotInstantiateObjectException(String message) {
+        super(message);
+    }
+
+    /**
+     * Constructor.
+     *
+     * @param e The exception to be wrapped.
+     * @since 2.1.0
+     */
+    public CannotInstantiateObjectException(Exception e) {
+        super(e);
+    }
+
+    /**
+     * Constructor.
+     *
+     * @param message The detail message.
+     * @param e The exception to be wrapped.
+     * @since 2.1.0
+     */
+    public CannotInstantiateObjectException(String message, Exception e) {
+        super(message, e);
+    }
+
+}

Added: 
tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/reflect/ClassUtil.java
URL: 
http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/reflect/ClassUtil.java?rev=680114&view=auto
==============================================================================
--- 
tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/reflect/ClassUtil.java
 (added)
+++ 
tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/reflect/ClassUtil.java
 Sun Jul 27 07:40:05 2008
@@ -0,0 +1,145 @@
+/*
+ * $Id: ClassUtil.java 637434 2008-03-15 15:48:38Z apetrelli $
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tiles.reflect;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
+
+/**
+ * Utilities to work with dynamic class loading and instantiation.
+ *
+ * @version $Rev: 637434 $ $Date: 2008-03-15 16:48:38 +0100 (sab, 15 mar 2008) 
$
+ */
+public final class ClassUtil {
+
+    /**
+     * Constructor, private to avoid instantiation.
+     */
+    private ClassUtil() {
+    }
+
+    /**
+     * Returns an instance of the given class name, by calling the default
+     * constructor.
+     *
+     * @param className The class name to load and to instantiate.
+     * @return The new instance of the class name.
+     * @throws CannotInstantiateObjectException If something goes wrong during
+     * instantiation.
+     */
+    public static Object instantiate(String className) {
+        return instantiate(className, false);
+    }
+
+    /**
+     * Returns an instance of the given class name, by calling the default
+     * constructor.
+     *
+     * @param className The class name to load and to instantiate.
+     * @param returnNull If <code>true</code>, if the class is not found it
+     * returns <code>true</code>, otherwise it throws a
+     * <code>TilesException</code>.
+     * @return The new instance of the class name.
+     * @throws CannotInstantiateObjectException If something goes wrong during 
instantiation.
+     */
+    public static Object instantiate(String className, boolean returnNull) {
+        ClassLoader original = Thread.currentThread().getContextClassLoader();
+        if (original == null) {
+            
Thread.currentThread().setContextClassLoader(ClassUtil.class.getClassLoader());
+        }
+        try {
+            Class<?> namedClass = Class.forName(className);
+            return namedClass.newInstance();
+        } catch (ClassNotFoundException e) {
+            if (returnNull) {
+                return null;
+            }
+            throw new CannotInstantiateObjectException(
+                    "Unable to resolve factory class: '" + className + "'", e);
+        } catch (IllegalAccessException e) {
+            throw new CannotInstantiateObjectException(
+                    "Unable to access factory class: '" + className + "'", e);
+        } catch (InstantiationException e) {
+            throw new CannotInstantiateObjectException(
+                    "Unable to instantiate factory class: '"
+                            + className
+                            + "'. Make sure that this class has a default 
constructor",
+                    e);
+        } finally {
+            Thread.currentThread().setContextClassLoader(original);
+        }
+    }
+
+    /**
+     * Gets a method and forces it to be accessible, even if it is not.
+     *
+     * @param clazz The class from which the method will be got.
+     * @param methodName The name of the method.
+     * @param parameterTypes The parameter types that the method must match.
+     * @return The method, if it is found.
+     */
+    public static Method getForcedAccessibleMethod(Class<?> clazz,
+            String methodName, Class<?>... parameterTypes) {
+        Method method;
+        try {
+            method = clazz.getMethod(methodName, parameterTypes);
+        } catch (SecurityException e) {
+            throw new CannotAccessMethodException("Cannot access method '"
+                    + methodName + "' in class '" + clazz.getName()
+                    + "' for security reasons", e);
+        } catch (NoSuchMethodException e) {
+            throw new CannotAccessMethodException("The method '"
+                    + methodName + "' in class '" + clazz.getName()
+                    + "' does not exist", e);
+        }
+        if (!method.isAccessible()) {
+            method.setAccessible(true);
+        }
+        return method;
+    }
+
+    /**
+     * Invokes a method, masking with a runtime exception all the exceptions.
+     *
+     * @param obj The object from which a method will be called.
+     * @param method The method to call.
+     * @param args The arguments of the method.
+     * @return The object returned, if the method is not "void".
+     */
+    public static Object invokeMethod(Object obj, Method method, Object... 
args) {
+        try {
+            return method.invoke(obj, args);
+        } catch (IllegalArgumentException e) {
+            throw new CannotAccessMethodException("The arguments for '"
+                    + method.getName() + "' in class '"
+                    + obj.getClass().getName() + "' are not valid", e);
+        } catch (IllegalAccessException e) {
+            throw new CannotAccessMethodException("Cannot access '"
+                    + method.getName() + "' in class '"
+                    + obj.getClass().getName() + "'", e);
+        } catch (InvocationTargetException e) {
+            throw new CannotAccessMethodException(
+                    "An exception has been thrown inside '" + method.getName()
+                    + "' in class '" + obj.getClass().getName() + "'", e);
+        }
+    }
+}

Added: 
tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/reflect/package.html
URL: 
http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/reflect/package.html?rev=680114&view=auto
==============================================================================
--- 
tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/reflect/package.html
 (added)
+++ 
tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/reflect/package.html
 Sun Jul 27 07:40:05 2008
@@ -0,0 +1,30 @@
+<!--
+/*
+ * $Id$
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+-->
+<html>
+<head>
+    <title>Tiles reflection utilities</title>
+</head>
+<body>
+Classes to manage reflection in a centralized way for Tiles.
+</body>
+</html>
\ No newline at end of file

Propchange: 
tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/reflect/package.html
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
tiles/framework/trunk/tiles-api/src/main/java/org/apache/tiles/reflect/package.html
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Modified: 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/LocaleDefinitionsFactory.java
URL: 
http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/LocaleDefinitionsFactory.java?rev=680114&r1=680113&r2=680114&view=diff
==============================================================================
--- 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/LocaleDefinitionsFactory.java
 (original)
+++ 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/LocaleDefinitionsFactory.java
 Sun Jul 27 07:40:05 2008
@@ -33,7 +33,7 @@
 import org.apache.tiles.definition.dao.DefinitionDAO;
 import org.apache.tiles.locale.LocaleResolver;
 import org.apache.tiles.locale.impl.DefaultLocaleResolver;
-import org.apache.tiles.util.ClassUtil;
+import org.apache.tiles.reflect.ClassUtil;
 
 /**
  * [EMAIL PROTECTED] DefinitionsFactory DefinitionsFactory} implementation 
that manages

Modified: 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/dao/BaseLocaleUrlDefinitionDAO.java
URL: 
http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/dao/BaseLocaleUrlDefinitionDAO.java?rev=680114&r1=680113&r2=680114&view=diff
==============================================================================
--- 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/dao/BaseLocaleUrlDefinitionDAO.java
 (original)
+++ 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/dao/BaseLocaleUrlDefinitionDAO.java
 Sun Jul 27 07:40:05 2008
@@ -44,7 +44,7 @@
 import org.apache.tiles.definition.RefreshMonitor;
 import org.apache.tiles.definition.digester.DigesterDefinitionsReader;
 import org.apache.tiles.impl.BasicTilesContainer;
-import org.apache.tiles.util.ClassUtil;
+import org.apache.tiles.reflect.ClassUtil;
 
 /**
  * Base abstract class for a DAO that is based on URLs and locale as a
@@ -193,7 +193,9 @@
                                 LOG.debug("Adding resource '" + resourceUrl
                                         + "' to definitions factory.");
                             }
-                            if (!resourceUrl.toExternalForm().contains("_")) {
+                            String externalForm = resourceUrl.toExternalForm();
+                            if (externalForm.indexOf('_', externalForm
+                                    .lastIndexOf("/")) < 0) {
                                 sourceURLs.add(resourceUrl);
                             } else if (LOG.isDebugEnabled()) {
                                 LOG.debug("Not adding resource '" + resourceUrl

Modified: 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/el/ELAttributeEvaluator.java
URL: 
http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/el/ELAttributeEvaluator.java?rev=680114&r1=680113&r2=680114&view=diff
==============================================================================
--- 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/el/ELAttributeEvaluator.java
 (original)
+++ 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/evaluator/el/ELAttributeEvaluator.java
 Sun Jul 27 07:40:05 2008
@@ -36,7 +36,7 @@
 import org.apache.tiles.awareness.TilesApplicationContextAware;
 import org.apache.tiles.context.TilesRequestContext;
 import org.apache.tiles.evaluator.AttributeEvaluator;
-import org.apache.tiles.util.ClassUtil;
+import org.apache.tiles.reflect.ClassUtil;
 
 /**
  * Evaluates string expression with typical EL syntax.<br>

Modified: 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/factory/AbstractTilesContainerFactory.java
URL: 
http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/factory/AbstractTilesContainerFactory.java?rev=680114&r1=680113&r2=680114&view=diff
==============================================================================
--- 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/factory/AbstractTilesContainerFactory.java
 (original)
+++ 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/factory/AbstractTilesContainerFactory.java
 Sun Jul 27 07:40:05 2008
@@ -26,7 +26,7 @@
 import java.util.Map;
 
 import org.apache.tiles.TilesContainer;
-import org.apache.tiles.util.ClassUtil;
+import org.apache.tiles.reflect.ClassUtil;
 
 /**
  * Abstract Factory that creates instances of [EMAIL PROTECTED] 
TilesContainerFactory}.
@@ -104,22 +104,19 @@
     protected static Map<String, String> getInitParameterMap(Object context) {
         Map<String, String> initParameters = new HashMap<String, String>();
         Class<?> contextClass = context.getClass();
-        try {
-            Method method = contextClass.getMethod("getInitParameterNames");
-            Enumeration<String> e = (Enumeration<String>) method
-                    .invoke(context);
-
-            method = contextClass.getMethod("getInitParameter", String.class);
-            while (e.hasMoreElements()) {
-                String key = e.nextElement();
-                initParameters.put(key, (String) method.invoke(context, key));
-            }
-        } catch (Exception e) {
-            throw new TilesContainerFactoryException(
-                    "Unable to retrieve init parameters."
-                    + " Is this context a ServletContext, PortletContext,"
-                    + " or similar object?", e);
+        Method method = ClassUtil.getForcedAccessibleMethod(contextClass,
+                "getInitParameterNames");
+        Enumeration<String> e = (Enumeration<String>) ClassUtil
+                .invokeMethod(context, method);
+
+        method = ClassUtil.getForcedAccessibleMethod(contextClass,
+                "getInitParameter", String.class);
+        while (e.hasMoreElements()) {
+            String key = e.nextElement();
+            initParameters.put(key, (String) ClassUtil.invokeMethod(
+                    context, method, key));
         }
+
         return initParameters;
     }
 
@@ -136,16 +133,13 @@
     protected static String getInitParameter(Object context,
             String parameterName) {
         Object value;
-        try {
-            Class<?> contextClass = context.getClass();
-            Method getInitParameterMethod =
-                contextClass.getMethod("getInitParameter", String.class);
-            value = getInitParameterMethod.invoke(context, parameterName);
-        } catch (Exception e) {
-            throw new TilesContainerFactoryException(
-                    "Unrecognized context.  Is this context"
-                    + " a ServletContext, PortletContext, or similar?", e);
-        }
+        Class<?> contextClass = context.getClass();
+        Method getInitParameterMethod = ClassUtil
+                .getForcedAccessibleMethod(contextClass,
+                        "getInitParameter", String.class);
+        value = ClassUtil.invokeMethod(context, getInitParameterMethod,
+                parameterName);
+
         return value == null ? null : value.toString();
     }
 }

Modified: 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/factory/KeyedDefinitionsFactoryTilesContainerFactory.java
URL: 
http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/factory/KeyedDefinitionsFactoryTilesContainerFactory.java?rev=680114&r1=680113&r2=680114&view=diff
==============================================================================
--- 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/factory/KeyedDefinitionsFactoryTilesContainerFactory.java
 (original)
+++ 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/factory/KeyedDefinitionsFactoryTilesContainerFactory.java
 Sun Jul 27 07:40:05 2008
@@ -34,8 +34,8 @@
 import 
org.apache.tiles.impl.KeyedDefinitionsFactoryTilesContainer.KeyExtractor;
 import org.apache.tiles.impl.mgmt.CachingKeyedDefinitionsFactoryTilesContainer;
 import org.apache.tiles.mgmt.MutableTilesContainer;
+import org.apache.tiles.reflect.ClassUtil;
 import org.apache.tiles.renderer.RendererFactory;
-import org.apache.tiles.util.ClassUtil;
 
 /**
  * Factory that creates instances of container that will extend the

Modified: 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/factory/TilesContainerFactory.java
URL: 
http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/factory/TilesContainerFactory.java?rev=680114&r1=680113&r2=680114&view=diff
==============================================================================
--- 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/factory/TilesContainerFactory.java
 (original)
+++ 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/factory/TilesContainerFactory.java
 Sun Jul 27 07:40:05 2008
@@ -39,9 +39,9 @@
 import org.apache.tiles.mgmt.MutableTilesContainer;
 import org.apache.tiles.preparer.BasicPreparerFactory;
 import org.apache.tiles.preparer.PreparerFactory;
+import org.apache.tiles.reflect.ClassUtil;
 import org.apache.tiles.renderer.RendererFactory;
 import org.apache.tiles.renderer.impl.BasicRendererFactory;
-import org.apache.tiles.util.ClassUtil;
 
 import java.util.HashMap;
 import java.util.Map;

Modified: 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/preparer/BasicPreparerFactory.java
URL: 
http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/preparer/BasicPreparerFactory.java?rev=680114&r1=680113&r2=680114&view=diff
==============================================================================
--- 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/preparer/BasicPreparerFactory.java
 (original)
+++ 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/preparer/BasicPreparerFactory.java
 Sun Jul 27 07:40:05 2008
@@ -23,7 +23,7 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.tiles.context.TilesRequestContext;
-import org.apache.tiles.util.ClassUtil;
+import org.apache.tiles.reflect.ClassUtil;
 
 import java.util.HashMap;
 import java.util.Map;

Modified: 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/BasicRendererFactory.java
URL: 
http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/BasicRendererFactory.java?rev=680114&r1=680113&r2=680114&view=diff
==============================================================================
--- 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/BasicRendererFactory.java
 (original)
+++ 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/renderer/impl/BasicRendererFactory.java
 Sun Jul 27 07:40:05 2008
@@ -31,10 +31,10 @@
 import org.apache.tiles.context.TilesContextFactory;
 import org.apache.tiles.evaluator.AttributeEvaluator;
 import org.apache.tiles.evaluator.AttributeEvaluatorAware;
+import org.apache.tiles.reflect.ClassUtil;
 import org.apache.tiles.renderer.AttributeRenderer;
 import org.apache.tiles.renderer.RendererException;
 import org.apache.tiles.renderer.RendererFactory;
-import org.apache.tiles.util.ClassUtil;
 
 /**
  * Basic renderer factory implementation.

Modified: tiles/framework/trunk/tiles-test/pom.xml
URL: 
http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-test/pom.xml?rev=680114&r1=680113&r2=680114&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-test/pom.xml (original)
+++ tiles/framework/trunk/tiles-test/pom.xml Sun Jul 27 07:40:05 2008
@@ -312,18 +312,6 @@
             <dependencies>
                 <dependency>
                    <groupId>javax.servlet</groupId>
-                   <artifactId>servlet-api</artifactId>
-                   <version>2.4</version>
-                   <scope>provided</scope>
-                </dependency>
-                <dependency>
-                   <groupId>javax.servlet</groupId>
-                   <artifactId>jsp-api</artifactId>
-                   <version>2.0</version>
-                   <scope>provided</scope>
-                </dependency>
-                <dependency>
-                   <groupId>javax.servlet</groupId>
                    <artifactId>jstl</artifactId>
                    <version>1.1.2</version>
                    <scope>runtime</scope>

Modified: 
tiles/framework/trunk/tiles-test/src/main/java/org/apache/tiles/test/factory/TestTilesContainerFactory.java
URL: 
http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-test/src/main/java/org/apache/tiles/test/factory/TestTilesContainerFactory.java?rev=680114&r1=680113&r2=680114&view=diff
==============================================================================
--- 
tiles/framework/trunk/tiles-test/src/main/java/org/apache/tiles/test/factory/TestTilesContainerFactory.java
 (original)
+++ 
tiles/framework/trunk/tiles-test/src/main/java/org/apache/tiles/test/factory/TestTilesContainerFactory.java
 Sun Jul 27 07:40:05 2008
@@ -139,7 +139,8 @@
             Set<URL> urlSet = applicationContext
                     .getResources("/WEB-INF/tiles-defs*.xml");
             for (URL url : urlSet) {
-                if (!url.toExternalForm().contains("_")) {
+                String externalForm = url.toExternalForm();
+                if (externalForm.indexOf('_', externalForm.lastIndexOf("/")) < 
0) {
                     urls.add(url);
                 }
             }


Reply via email to