Tapestry 5.x can not find the core pages and components from the URLs provided from classloaders in JBoss 5.x. Please see https://issues.apache.org/jira/browse/TAP5-576 for details. In JIRA 576, Benjamin Bentmann provided an implementation of ClasspathURLConverter to overcome the problem.
public class ClasspathURLConverterJBoss5 implements ClasspathURLConverter { private static Logger log = Logger.getLogger(ClasspathURLConverterJBoss5.class); public URL convert(URL url) { // If the URL is a "vfs" URL (JBoss 5 uses a Virtual File System)... if (url != null && url.getProtocol().startsWith("vfs")) { // Ask the VFS what the physical URL is... try { URLConnection connection = url.openConnection(); Object virtualFile = invokerGetter(connection, "getContent"); // Use reflection so that we don't need JBoss in the classpath at compile time. Object zipEntryHandler = invokerGetter(virtualFile, "getHandler"); Object realUrl = invokerGetter(zipEntryHandler, "getRealURL"); return (URL) realUrl; } catch (Exception e) { log.info(e.getCause()); if (e.getCause() == null) { logger.error(e.toString()); } else { logger.error(e.getCause().toString()); } } } return url; } private Object invokerGetter(Object target, String getter) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException { Class<?> type = target.getClass(); Method method; try { method = type.getMethod(getter); } catch (NoSuchMethodException e) { method = type.getDeclaredMethod(getter); method.setAccessible(true); } return method.invoke(target); } }
To override the default implementation of ClasspathURLConverter, just add the above ClasspathURLConverterJBoss5.java to your project and add the following piece of code to your AppModule.java.
public static void contributeServiceOverride(MappedConfiguration<Class,Object> configuration) { configuration.add(ClasspathURLConverter.class, new ClasspathURLConverterJBoss5()); }
The above just override the default ClaspathURLConverter service. For more information on overriding a general service, please see http://tapestry.apache.org/tapestry5.1/tapestry-ioc/cookbook/override.html
The above fix has been test with Tapestry 5.1 and 5.2 on JBoss 5.0.1. It does not work on JBoss 5.1.0!