You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by "Priit Karu (JIRA)" <de...@tapestry.apache.org> on 2008/01/24 09:26:36 UTC
[jira] Created: (TAPESTRY-2078) Tapestry should display more
understandable error messages when it finds non component classes inside
component/page package
Tapestry should display more understandable error messages when it finds non component classes inside component/page package
----------------------------------------------------------------------------------------------------------------------------
Key: TAPESTRY-2078
URL: https://issues.apache.org/jira/browse/TAPESTRY-2078
Project: Tapestry
Issue Type: Improvement
Affects Versions: 5.0
Reporter: Priit Karu
Priority: Minor
Currently Tapestry throws confusing error message (stacktrace with java.lang.NoClassDefFoundError) when putting *non* component classes to the Tapestry components/pages package and these classes do not follow the same restrictions as component classes.
For example if there is a value holder class defined within page package or a sub package inside page package with protected/public variables then NoClassDefFoundError is thrown. If they are changed to private (like component classes should) then the error goes away and class is again found;-)
Tapestry application path is org.example.myapp and there is a simple value object class Test defined (and used inside page Start).
-------------------->>--------------------<code>
package org.example.myapp.pages.test;
public class Test {
protected String test = "blaah";
public String getTest() {
return test;
}
}
-----
package org.example.myapp.pages;
import org.example.myapp.pages.test.Test;
/**
* Start page of application myapp.
*/
public class Start
{
private Test test = new Test();
public Test getTest() {
return test;
}
}
-----
<html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">
<head>
<title>myapp Start Page</title>
</head>
<body>
<h1>myapp Start Page</h1>
<p> ${test.test}. </p>
</body>
</html>
</code>-------------------->>--------------------
Then the following stacktrace is generated:
# java.lang.NoClassDefFoundError
org/example/myapp/pages/test/Test
Stack trace
* org.example.myapp.pages.Start.initializer(Start.java:27)
* org.example.myapp.pages.Start.<init>(Start.java)
* sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
* sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
* sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
* java.lang.reflect.Constructor.newInstance(Unknown Source)
* org.apache.tapestry.internal.services.ReflectiveInstantiator.newInstance(ReflectiveInstantiator.java:79)
* org.apache.tapestry.internal.structure.InternalComponentResourcesImpl.<init>(InternalComponentResourcesImpl.java:70)
* org.apache.tapestry.internal.structure.ComponentPageElementImpl.<init>(ComponentPageElementImpl.java:528)
* org.apache.tapestry.internal.structure.ComponentPageElementImpl.<init>(ComponentPageElementImpl.java:572)
* org.apache.tapestry.internal.services.PageElementFactoryImpl.newRootComponentElement(PageElementFactoryImpl.java:311)
* org.apache.tapestry.internal.services.PageLoaderProcessor.loadRootComponent(PageLoaderProcessor.java:354)
* org.apache.tapestry.internal.services.PageLoaderProcessor.loadPage(PageLoaderProcessor.java:339)
* org.apache.tapestry.internal.services.PageLoaderImpl.loadPage(PageLoaderImpl.java:60)
* org.apache.tapestry.internal.services.PagePoolImpl.checkout(PagePoolImpl.java:69)
* org.apache.tapestry.internal.services.RequestPageCacheImpl.get(RequestPageCacheImpl.java:43)
* org.apache.tapestry.internal.services.PageRenderRequestHandlerImpl.handle(PageRenderRequestHandlerImpl.java:55)
* org.apache.tapestry.internal.services.RootPathDispatcher.dispatch(RootPathDispatcher.java:52)
* org.apache.tapestry.services.TapestryModule$12.service(TapestryModule.java:905)
* org.example.myapp.services.AppModule$1.service(AppModule.java:92)
* org.apache.tapestry.internal.services.LocalizationFilter.service(LocalizationFilter.java:43)
* org.apache.tapestry.services.TapestryModule$2.service(TapestryModule.java:487)
* org.apache.tapestry.internal.services.StaticFilesFilter.service(StaticFilesFilter.java:79)
* org.apache.tapestry.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:94)
* org.apache.tapestry.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:85)
* org.apache.tapestry.ioc.internal.util.ConcurrentBarrier.withRead(ConcurrentBarrier.java:77)
* org.apache.tapestry.internal.services.CheckForUpdatesFilter.service(CheckForUpdatesFilter.java:107)
* org.apache.tapestry.services.TapestryModule$11.service(TapestryModule.java:888)
* org.apache.tapestry.TapestryFilter.doFilter(TapestryFilter.java:164)
* org.mortbay.jetty.servlet.WebApplicationHandler$CachedChain.doFilter(WebApplicationHandler.java:821)
* org.mortbay.jetty.servlet.WebApplicationHandler.dispatch(WebApplicationHandler.java:471)
* org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:568)
* org.mortbay.http.HttpContext.handle(HttpContext.java:1530)
* org.mortbay.jetty.servlet.WebApplicationContext.handle(WebApplicationContext.java:633)
* org.mortbay.http.HttpContext.handle(HttpContext.java:1482)
* org.mortbay.http.HttpServer.service(HttpServer.java:909)
* org.mortbay.http.HttpConnection.service(HttpConnection.java:820)
* org.mortbay.http.HttpConnection.handleNext(HttpConnection.java:986)
* org.mortbay.http.HttpConnection.handle(HttpConnection.java:837)
* org.mortbay.http.SocketListener.handleConnection(SocketListener.java:245)
* org.mortbay.util.ThreadedServer.handle(ThreadedServer.java:357)
* org.mortbay.util.ThreadPool$PoolThread.run(ThreadPool.java:534)
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tapestry.apache.org
For additional commands, e-mail: dev-help@tapestry.apache.org
[jira] Updated: (TAPESTRY-2078) More understandable error messages
needed when incorrect classes found in component/page packages
Posted by "Priit Karu (JIRA)" <de...@tapestry.apache.org>.
[ https://issues.apache.org/jira/browse/TAPESTRY-2078?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Priit Karu updated TAPESTRY-2078:
---------------------------------
Summary: More understandable error messages needed when incorrect classes found in component/page packages (was: Tapestry should display more understandable error messages when it finds non component classes inside component/page package)
> More understandable error messages needed when incorrect classes found in component/page packages
> -------------------------------------------------------------------------------------------------
>
> Key: TAPESTRY-2078
> URL: https://issues.apache.org/jira/browse/TAPESTRY-2078
> Project: Tapestry
> Issue Type: Improvement
> Affects Versions: 5.0
> Reporter: Priit Karu
> Priority: Minor
>
> Currently Tapestry throws confusing error message (stacktrace with java.lang.NoClassDefFoundError) when putting *non* component classes to the Tapestry components/pages package and these classes do not follow the same restrictions as component classes.
> For example if there is a value holder class defined within page package or a sub package inside page package with protected/public variables then NoClassDefFoundError is thrown. If they are changed to private (like component classes should) then the error goes away and class is again found;-)
> Tapestry application path is org.example.myapp and there is a simple value object class Test defined (and used inside page Start).
> -------------------->>--------------------<code>
> package org.example.myapp.pages.test;
> public class Test {
> protected String test = "blaah";
> public String getTest() {
> return test;
> }
>
> }
> -----
> package org.example.myapp.pages;
> import org.example.myapp.pages.test.Test;
> /**
> * Start page of application myapp.
> */
> public class Start
> {
> private Test test = new Test();
> public Test getTest() {
> return test;
> }
>
>
> }
> -----
> <html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">
> <head>
> <title>myapp Start Page</title>
> </head>
> <body>
> <h1>myapp Start Page</h1>
> <p> ${test.test}. </p>
> </body>
> </html>
> </code>-------------------->>--------------------
> Then the following stacktrace is generated:
> # java.lang.NoClassDefFoundError
> org/example/myapp/pages/test/Test
> Stack trace
> * org.example.myapp.pages.Start.initializer(Start.java:27)
> * org.example.myapp.pages.Start.<init>(Start.java)
> * sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
> * sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
> * sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
> * java.lang.reflect.Constructor.newInstance(Unknown Source)
> * org.apache.tapestry.internal.services.ReflectiveInstantiator.newInstance(ReflectiveInstantiator.java:79)
> * org.apache.tapestry.internal.structure.InternalComponentResourcesImpl.<init>(InternalComponentResourcesImpl.java:70)
> * org.apache.tapestry.internal.structure.ComponentPageElementImpl.<init>(ComponentPageElementImpl.java:528)
> * org.apache.tapestry.internal.structure.ComponentPageElementImpl.<init>(ComponentPageElementImpl.java:572)
> * org.apache.tapestry.internal.services.PageElementFactoryImpl.newRootComponentElement(PageElementFactoryImpl.java:311)
> * org.apache.tapestry.internal.services.PageLoaderProcessor.loadRootComponent(PageLoaderProcessor.java:354)
> * org.apache.tapestry.internal.services.PageLoaderProcessor.loadPage(PageLoaderProcessor.java:339)
> * org.apache.tapestry.internal.services.PageLoaderImpl.loadPage(PageLoaderImpl.java:60)
> * org.apache.tapestry.internal.services.PagePoolImpl.checkout(PagePoolImpl.java:69)
> * org.apache.tapestry.internal.services.RequestPageCacheImpl.get(RequestPageCacheImpl.java:43)
> * org.apache.tapestry.internal.services.PageRenderRequestHandlerImpl.handle(PageRenderRequestHandlerImpl.java:55)
> * org.apache.tapestry.internal.services.RootPathDispatcher.dispatch(RootPathDispatcher.java:52)
> * org.apache.tapestry.services.TapestryModule$12.service(TapestryModule.java:905)
> * org.example.myapp.services.AppModule$1.service(AppModule.java:92)
> * org.apache.tapestry.internal.services.LocalizationFilter.service(LocalizationFilter.java:43)
> * org.apache.tapestry.services.TapestryModule$2.service(TapestryModule.java:487)
> * org.apache.tapestry.internal.services.StaticFilesFilter.service(StaticFilesFilter.java:79)
> * org.apache.tapestry.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:94)
> * org.apache.tapestry.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:85)
> * org.apache.tapestry.ioc.internal.util.ConcurrentBarrier.withRead(ConcurrentBarrier.java:77)
> * org.apache.tapestry.internal.services.CheckForUpdatesFilter.service(CheckForUpdatesFilter.java:107)
> * org.apache.tapestry.services.TapestryModule$11.service(TapestryModule.java:888)
> * org.apache.tapestry.TapestryFilter.doFilter(TapestryFilter.java:164)
> * org.mortbay.jetty.servlet.WebApplicationHandler$CachedChain.doFilter(WebApplicationHandler.java:821)
> * org.mortbay.jetty.servlet.WebApplicationHandler.dispatch(WebApplicationHandler.java:471)
> * org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:568)
> * org.mortbay.http.HttpContext.handle(HttpContext.java:1530)
> * org.mortbay.jetty.servlet.WebApplicationContext.handle(WebApplicationContext.java:633)
> * org.mortbay.http.HttpContext.handle(HttpContext.java:1482)
> * org.mortbay.http.HttpServer.service(HttpServer.java:909)
> * org.mortbay.http.HttpConnection.service(HttpConnection.java:820)
> * org.mortbay.http.HttpConnection.handleNext(HttpConnection.java:986)
> * org.mortbay.http.HttpConnection.handle(HttpConnection.java:837)
> * org.mortbay.http.SocketListener.handleConnection(SocketListener.java:245)
> * org.mortbay.util.ThreadedServer.handle(ThreadedServer.java:357)
> * org.mortbay.util.ThreadPool$PoolThread.run(ThreadPool.java:534)
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tapestry.apache.org
For additional commands, e-mail: dev-help@tapestry.apache.org
[jira] Closed: (TAPESTRY-2078) More understandable error messages
needed when incorrect classes found in component/page packages
Posted by "Howard M. Lewis Ship (JIRA)" <de...@tapestry.apache.org>.
[ https://issues.apache.org/jira/browse/TAPESTRY-2078?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Howard M. Lewis Ship closed TAPESTRY-2078.
------------------------------------------
Resolution: Fixed
Fix Version/s: 5.0.11
> More understandable error messages needed when incorrect classes found in component/page packages
> -------------------------------------------------------------------------------------------------
>
> Key: TAPESTRY-2078
> URL: https://issues.apache.org/jira/browse/TAPESTRY-2078
> Project: Tapestry
> Issue Type: Improvement
> Affects Versions: 5.0
> Reporter: Priit Karu
> Assignee: Howard M. Lewis Ship
> Priority: Minor
> Fix For: 5.0.11
>
>
> Currently Tapestry throws confusing error message (stacktrace with java.lang.NoClassDefFoundError) when putting *non* component classes to the Tapestry components/pages package and these classes do not follow the same restrictions as component classes.
> For example if there is a value holder class defined within page package or a sub package inside page package with protected/public variables then NoClassDefFoundError is thrown. If they are changed to private (like component classes should) then the error goes away and class is again found;-)
> Tapestry application path is org.example.myapp and there is a simple value object class Test defined (and used inside page Start).
> -------------------->>--------------------<code>
> package org.example.myapp.pages.test;
> public class Test {
> protected String test = "blaah";
> public String getTest() {
> return test;
> }
>
> }
> -----
> package org.example.myapp.pages;
> import org.example.myapp.pages.test.Test;
> /**
> * Start page of application myapp.
> */
> public class Start
> {
> private Test test = new Test();
> public Test getTest() {
> return test;
> }
>
>
> }
> -----
> <html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">
> <head>
> <title>myapp Start Page</title>
> </head>
> <body>
> <h1>myapp Start Page</h1>
> <p> ${test.test}. </p>
> </body>
> </html>
> </code>-------------------->>--------------------
> Then the following stacktrace is generated:
> # java.lang.NoClassDefFoundError
> org/example/myapp/pages/test/Test
> Stack trace
> * org.example.myapp.pages.Start.initializer(Start.java:27)
> * org.example.myapp.pages.Start.<init>(Start.java)
> * sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
> * sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
> * sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
> * java.lang.reflect.Constructor.newInstance(Unknown Source)
> * org.apache.tapestry.internal.services.ReflectiveInstantiator.newInstance(ReflectiveInstantiator.java:79)
> * org.apache.tapestry.internal.structure.InternalComponentResourcesImpl.<init>(InternalComponentResourcesImpl.java:70)
> * org.apache.tapestry.internal.structure.ComponentPageElementImpl.<init>(ComponentPageElementImpl.java:528)
> * org.apache.tapestry.internal.structure.ComponentPageElementImpl.<init>(ComponentPageElementImpl.java:572)
> * org.apache.tapestry.internal.services.PageElementFactoryImpl.newRootComponentElement(PageElementFactoryImpl.java:311)
> * org.apache.tapestry.internal.services.PageLoaderProcessor.loadRootComponent(PageLoaderProcessor.java:354)
> * org.apache.tapestry.internal.services.PageLoaderProcessor.loadPage(PageLoaderProcessor.java:339)
> * org.apache.tapestry.internal.services.PageLoaderImpl.loadPage(PageLoaderImpl.java:60)
> * org.apache.tapestry.internal.services.PagePoolImpl.checkout(PagePoolImpl.java:69)
> * org.apache.tapestry.internal.services.RequestPageCacheImpl.get(RequestPageCacheImpl.java:43)
> * org.apache.tapestry.internal.services.PageRenderRequestHandlerImpl.handle(PageRenderRequestHandlerImpl.java:55)
> * org.apache.tapestry.internal.services.RootPathDispatcher.dispatch(RootPathDispatcher.java:52)
> * org.apache.tapestry.services.TapestryModule$12.service(TapestryModule.java:905)
> * org.example.myapp.services.AppModule$1.service(AppModule.java:92)
> * org.apache.tapestry.internal.services.LocalizationFilter.service(LocalizationFilter.java:43)
> * org.apache.tapestry.services.TapestryModule$2.service(TapestryModule.java:487)
> * org.apache.tapestry.internal.services.StaticFilesFilter.service(StaticFilesFilter.java:79)
> * org.apache.tapestry.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:94)
> * org.apache.tapestry.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:85)
> * org.apache.tapestry.ioc.internal.util.ConcurrentBarrier.withRead(ConcurrentBarrier.java:77)
> * org.apache.tapestry.internal.services.CheckForUpdatesFilter.service(CheckForUpdatesFilter.java:107)
> * org.apache.tapestry.services.TapestryModule$11.service(TapestryModule.java:888)
> * org.apache.tapestry.TapestryFilter.doFilter(TapestryFilter.java:164)
> * org.mortbay.jetty.servlet.WebApplicationHandler$CachedChain.doFilter(WebApplicationHandler.java:821)
> * org.mortbay.jetty.servlet.WebApplicationHandler.dispatch(WebApplicationHandler.java:471)
> * org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:568)
> * org.mortbay.http.HttpContext.handle(HttpContext.java:1530)
> * org.mortbay.jetty.servlet.WebApplicationContext.handle(WebApplicationContext.java:633)
> * org.mortbay.http.HttpContext.handle(HttpContext.java:1482)
> * org.mortbay.http.HttpServer.service(HttpServer.java:909)
> * org.mortbay.http.HttpConnection.service(HttpConnection.java:820)
> * org.mortbay.http.HttpConnection.handleNext(HttpConnection.java:986)
> * org.mortbay.http.HttpConnection.handle(HttpConnection.java:837)
> * org.mortbay.http.SocketListener.handleConnection(SocketListener.java:245)
> * org.mortbay.util.ThreadedServer.handle(ThreadedServer.java:357)
> * org.mortbay.util.ThreadPool$PoolThread.run(ThreadPool.java:534)
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tapestry.apache.org
For additional commands, e-mail: dev-help@tapestry.apache.org
[jira] Assigned: (TAPESTRY-2078) More understandable error messages
needed when incorrect classes found in component/page packages
Posted by "Howard M. Lewis Ship (JIRA)" <de...@tapestry.apache.org>.
[ https://issues.apache.org/jira/browse/TAPESTRY-2078?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Howard M. Lewis Ship reassigned TAPESTRY-2078:
----------------------------------------------
Assignee: Howard M. Lewis Ship
> More understandable error messages needed when incorrect classes found in component/page packages
> -------------------------------------------------------------------------------------------------
>
> Key: TAPESTRY-2078
> URL: https://issues.apache.org/jira/browse/TAPESTRY-2078
> Project: Tapestry
> Issue Type: Improvement
> Affects Versions: 5.0
> Reporter: Priit Karu
> Assignee: Howard M. Lewis Ship
> Priority: Minor
>
> Currently Tapestry throws confusing error message (stacktrace with java.lang.NoClassDefFoundError) when putting *non* component classes to the Tapestry components/pages package and these classes do not follow the same restrictions as component classes.
> For example if there is a value holder class defined within page package or a sub package inside page package with protected/public variables then NoClassDefFoundError is thrown. If they are changed to private (like component classes should) then the error goes away and class is again found;-)
> Tapestry application path is org.example.myapp and there is a simple value object class Test defined (and used inside page Start).
> -------------------->>--------------------<code>
> package org.example.myapp.pages.test;
> public class Test {
> protected String test = "blaah";
> public String getTest() {
> return test;
> }
>
> }
> -----
> package org.example.myapp.pages;
> import org.example.myapp.pages.test.Test;
> /**
> * Start page of application myapp.
> */
> public class Start
> {
> private Test test = new Test();
> public Test getTest() {
> return test;
> }
>
>
> }
> -----
> <html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">
> <head>
> <title>myapp Start Page</title>
> </head>
> <body>
> <h1>myapp Start Page</h1>
> <p> ${test.test}. </p>
> </body>
> </html>
> </code>-------------------->>--------------------
> Then the following stacktrace is generated:
> # java.lang.NoClassDefFoundError
> org/example/myapp/pages/test/Test
> Stack trace
> * org.example.myapp.pages.Start.initializer(Start.java:27)
> * org.example.myapp.pages.Start.<init>(Start.java)
> * sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
> * sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
> * sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
> * java.lang.reflect.Constructor.newInstance(Unknown Source)
> * org.apache.tapestry.internal.services.ReflectiveInstantiator.newInstance(ReflectiveInstantiator.java:79)
> * org.apache.tapestry.internal.structure.InternalComponentResourcesImpl.<init>(InternalComponentResourcesImpl.java:70)
> * org.apache.tapestry.internal.structure.ComponentPageElementImpl.<init>(ComponentPageElementImpl.java:528)
> * org.apache.tapestry.internal.structure.ComponentPageElementImpl.<init>(ComponentPageElementImpl.java:572)
> * org.apache.tapestry.internal.services.PageElementFactoryImpl.newRootComponentElement(PageElementFactoryImpl.java:311)
> * org.apache.tapestry.internal.services.PageLoaderProcessor.loadRootComponent(PageLoaderProcessor.java:354)
> * org.apache.tapestry.internal.services.PageLoaderProcessor.loadPage(PageLoaderProcessor.java:339)
> * org.apache.tapestry.internal.services.PageLoaderImpl.loadPage(PageLoaderImpl.java:60)
> * org.apache.tapestry.internal.services.PagePoolImpl.checkout(PagePoolImpl.java:69)
> * org.apache.tapestry.internal.services.RequestPageCacheImpl.get(RequestPageCacheImpl.java:43)
> * org.apache.tapestry.internal.services.PageRenderRequestHandlerImpl.handle(PageRenderRequestHandlerImpl.java:55)
> * org.apache.tapestry.internal.services.RootPathDispatcher.dispatch(RootPathDispatcher.java:52)
> * org.apache.tapestry.services.TapestryModule$12.service(TapestryModule.java:905)
> * org.example.myapp.services.AppModule$1.service(AppModule.java:92)
> * org.apache.tapestry.internal.services.LocalizationFilter.service(LocalizationFilter.java:43)
> * org.apache.tapestry.services.TapestryModule$2.service(TapestryModule.java:487)
> * org.apache.tapestry.internal.services.StaticFilesFilter.service(StaticFilesFilter.java:79)
> * org.apache.tapestry.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:94)
> * org.apache.tapestry.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:85)
> * org.apache.tapestry.ioc.internal.util.ConcurrentBarrier.withRead(ConcurrentBarrier.java:77)
> * org.apache.tapestry.internal.services.CheckForUpdatesFilter.service(CheckForUpdatesFilter.java:107)
> * org.apache.tapestry.services.TapestryModule$11.service(TapestryModule.java:888)
> * org.apache.tapestry.TapestryFilter.doFilter(TapestryFilter.java:164)
> * org.mortbay.jetty.servlet.WebApplicationHandler$CachedChain.doFilter(WebApplicationHandler.java:821)
> * org.mortbay.jetty.servlet.WebApplicationHandler.dispatch(WebApplicationHandler.java:471)
> * org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:568)
> * org.mortbay.http.HttpContext.handle(HttpContext.java:1530)
> * org.mortbay.jetty.servlet.WebApplicationContext.handle(WebApplicationContext.java:633)
> * org.mortbay.http.HttpContext.handle(HttpContext.java:1482)
> * org.mortbay.http.HttpServer.service(HttpServer.java:909)
> * org.mortbay.http.HttpConnection.service(HttpConnection.java:820)
> * org.mortbay.http.HttpConnection.handleNext(HttpConnection.java:986)
> * org.mortbay.http.HttpConnection.handle(HttpConnection.java:837)
> * org.mortbay.http.SocketListener.handleConnection(SocketListener.java:245)
> * org.mortbay.util.ThreadedServer.handle(ThreadedServer.java:357)
> * org.mortbay.util.ThreadPool$PoolThread.run(ThreadPool.java:534)
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tapestry.apache.org
For additional commands, e-mail: dev-help@tapestry.apache.org
[jira] Commented: (TAPESTRY-2078) More understandable error
messages needed when incorrect classes found in component/page packages
Posted by "Howard M. Lewis Ship (JIRA)" <de...@tapestry.apache.org>.
[ https://issues.apache.org/jira/browse/TAPESTRY-2078?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12574318#action_12574318 ]
Howard M. Lewis Ship commented on TAPESTRY-2078:
------------------------------------------------
The issue, I think, is that we are getting an Error (not an Exception) thrown. There's a number of catch(Exception) clauses that probably should change to catch(Throwable).
> More understandable error messages needed when incorrect classes found in component/page packages
> -------------------------------------------------------------------------------------------------
>
> Key: TAPESTRY-2078
> URL: https://issues.apache.org/jira/browse/TAPESTRY-2078
> Project: Tapestry
> Issue Type: Improvement
> Affects Versions: 5.0
> Reporter: Priit Karu
> Assignee: Howard M. Lewis Ship
> Priority: Minor
>
> Currently Tapestry throws confusing error message (stacktrace with java.lang.NoClassDefFoundError) when putting *non* component classes to the Tapestry components/pages package and these classes do not follow the same restrictions as component classes.
> For example if there is a value holder class defined within page package or a sub package inside page package with protected/public variables then NoClassDefFoundError is thrown. If they are changed to private (like component classes should) then the error goes away and class is again found;-)
> Tapestry application path is org.example.myapp and there is a simple value object class Test defined (and used inside page Start).
> -------------------->>--------------------<code>
> package org.example.myapp.pages.test;
> public class Test {
> protected String test = "blaah";
> public String getTest() {
> return test;
> }
>
> }
> -----
> package org.example.myapp.pages;
> import org.example.myapp.pages.test.Test;
> /**
> * Start page of application myapp.
> */
> public class Start
> {
> private Test test = new Test();
> public Test getTest() {
> return test;
> }
>
>
> }
> -----
> <html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">
> <head>
> <title>myapp Start Page</title>
> </head>
> <body>
> <h1>myapp Start Page</h1>
> <p> ${test.test}. </p>
> </body>
> </html>
> </code>-------------------->>--------------------
> Then the following stacktrace is generated:
> # java.lang.NoClassDefFoundError
> org/example/myapp/pages/test/Test
> Stack trace
> * org.example.myapp.pages.Start.initializer(Start.java:27)
> * org.example.myapp.pages.Start.<init>(Start.java)
> * sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
> * sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
> * sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
> * java.lang.reflect.Constructor.newInstance(Unknown Source)
> * org.apache.tapestry.internal.services.ReflectiveInstantiator.newInstance(ReflectiveInstantiator.java:79)
> * org.apache.tapestry.internal.structure.InternalComponentResourcesImpl.<init>(InternalComponentResourcesImpl.java:70)
> * org.apache.tapestry.internal.structure.ComponentPageElementImpl.<init>(ComponentPageElementImpl.java:528)
> * org.apache.tapestry.internal.structure.ComponentPageElementImpl.<init>(ComponentPageElementImpl.java:572)
> * org.apache.tapestry.internal.services.PageElementFactoryImpl.newRootComponentElement(PageElementFactoryImpl.java:311)
> * org.apache.tapestry.internal.services.PageLoaderProcessor.loadRootComponent(PageLoaderProcessor.java:354)
> * org.apache.tapestry.internal.services.PageLoaderProcessor.loadPage(PageLoaderProcessor.java:339)
> * org.apache.tapestry.internal.services.PageLoaderImpl.loadPage(PageLoaderImpl.java:60)
> * org.apache.tapestry.internal.services.PagePoolImpl.checkout(PagePoolImpl.java:69)
> * org.apache.tapestry.internal.services.RequestPageCacheImpl.get(RequestPageCacheImpl.java:43)
> * org.apache.tapestry.internal.services.PageRenderRequestHandlerImpl.handle(PageRenderRequestHandlerImpl.java:55)
> * org.apache.tapestry.internal.services.RootPathDispatcher.dispatch(RootPathDispatcher.java:52)
> * org.apache.tapestry.services.TapestryModule$12.service(TapestryModule.java:905)
> * org.example.myapp.services.AppModule$1.service(AppModule.java:92)
> * org.apache.tapestry.internal.services.LocalizationFilter.service(LocalizationFilter.java:43)
> * org.apache.tapestry.services.TapestryModule$2.service(TapestryModule.java:487)
> * org.apache.tapestry.internal.services.StaticFilesFilter.service(StaticFilesFilter.java:79)
> * org.apache.tapestry.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:94)
> * org.apache.tapestry.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:85)
> * org.apache.tapestry.ioc.internal.util.ConcurrentBarrier.withRead(ConcurrentBarrier.java:77)
> * org.apache.tapestry.internal.services.CheckForUpdatesFilter.service(CheckForUpdatesFilter.java:107)
> * org.apache.tapestry.services.TapestryModule$11.service(TapestryModule.java:888)
> * org.apache.tapestry.TapestryFilter.doFilter(TapestryFilter.java:164)
> * org.mortbay.jetty.servlet.WebApplicationHandler$CachedChain.doFilter(WebApplicationHandler.java:821)
> * org.mortbay.jetty.servlet.WebApplicationHandler.dispatch(WebApplicationHandler.java:471)
> * org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:568)
> * org.mortbay.http.HttpContext.handle(HttpContext.java:1530)
> * org.mortbay.jetty.servlet.WebApplicationContext.handle(WebApplicationContext.java:633)
> * org.mortbay.http.HttpContext.handle(HttpContext.java:1482)
> * org.mortbay.http.HttpServer.service(HttpServer.java:909)
> * org.mortbay.http.HttpConnection.service(HttpConnection.java:820)
> * org.mortbay.http.HttpConnection.handleNext(HttpConnection.java:986)
> * org.mortbay.http.HttpConnection.handle(HttpConnection.java:837)
> * org.mortbay.http.SocketListener.handleConnection(SocketListener.java:245)
> * org.mortbay.util.ThreadedServer.handle(ThreadedServer.java:357)
> * org.mortbay.util.ThreadPool$PoolThread.run(ThreadPool.java:534)
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tapestry.apache.org
For additional commands, e-mail: dev-help@tapestry.apache.org
[jira] Commented: (TAPESTRY-2078) More understandable error
messages needed when incorrect classes found in component/page packages
Posted by "Howard M. Lewis Ship (JIRA)" <de...@tapestry.apache.org>.
[ https://issues.apache.org/jira/browse/TAPESTRY-2078?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12574320#action_12574320 ]
Howard M. Lewis Ship commented on TAPESTRY-2078:
------------------------------------------------
You'd think this:
try
{
_workerChain.transform(transformation, model);
transformation.finish();
}
catch (Throwable ex)
{
throw new TransformationException(transformation, ex);
}
would handle it, but no such luck. Something else needs to be involved in reporting the exception properly.
> More understandable error messages needed when incorrect classes found in component/page packages
> -------------------------------------------------------------------------------------------------
>
> Key: TAPESTRY-2078
> URL: https://issues.apache.org/jira/browse/TAPESTRY-2078
> Project: Tapestry
> Issue Type: Improvement
> Affects Versions: 5.0
> Reporter: Priit Karu
> Assignee: Howard M. Lewis Ship
> Priority: Minor
>
> Currently Tapestry throws confusing error message (stacktrace with java.lang.NoClassDefFoundError) when putting *non* component classes to the Tapestry components/pages package and these classes do not follow the same restrictions as component classes.
> For example if there is a value holder class defined within page package or a sub package inside page package with protected/public variables then NoClassDefFoundError is thrown. If they are changed to private (like component classes should) then the error goes away and class is again found;-)
> Tapestry application path is org.example.myapp and there is a simple value object class Test defined (and used inside page Start).
> -------------------->>--------------------<code>
> package org.example.myapp.pages.test;
> public class Test {
> protected String test = "blaah";
> public String getTest() {
> return test;
> }
>
> }
> -----
> package org.example.myapp.pages;
> import org.example.myapp.pages.test.Test;
> /**
> * Start page of application myapp.
> */
> public class Start
> {
> private Test test = new Test();
> public Test getTest() {
> return test;
> }
>
>
> }
> -----
> <html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">
> <head>
> <title>myapp Start Page</title>
> </head>
> <body>
> <h1>myapp Start Page</h1>
> <p> ${test.test}. </p>
> </body>
> </html>
> </code>-------------------->>--------------------
> Then the following stacktrace is generated:
> # java.lang.NoClassDefFoundError
> org/example/myapp/pages/test/Test
> Stack trace
> * org.example.myapp.pages.Start.initializer(Start.java:27)
> * org.example.myapp.pages.Start.<init>(Start.java)
> * sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
> * sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
> * sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
> * java.lang.reflect.Constructor.newInstance(Unknown Source)
> * org.apache.tapestry.internal.services.ReflectiveInstantiator.newInstance(ReflectiveInstantiator.java:79)
> * org.apache.tapestry.internal.structure.InternalComponentResourcesImpl.<init>(InternalComponentResourcesImpl.java:70)
> * org.apache.tapestry.internal.structure.ComponentPageElementImpl.<init>(ComponentPageElementImpl.java:528)
> * org.apache.tapestry.internal.structure.ComponentPageElementImpl.<init>(ComponentPageElementImpl.java:572)
> * org.apache.tapestry.internal.services.PageElementFactoryImpl.newRootComponentElement(PageElementFactoryImpl.java:311)
> * org.apache.tapestry.internal.services.PageLoaderProcessor.loadRootComponent(PageLoaderProcessor.java:354)
> * org.apache.tapestry.internal.services.PageLoaderProcessor.loadPage(PageLoaderProcessor.java:339)
> * org.apache.tapestry.internal.services.PageLoaderImpl.loadPage(PageLoaderImpl.java:60)
> * org.apache.tapestry.internal.services.PagePoolImpl.checkout(PagePoolImpl.java:69)
> * org.apache.tapestry.internal.services.RequestPageCacheImpl.get(RequestPageCacheImpl.java:43)
> * org.apache.tapestry.internal.services.PageRenderRequestHandlerImpl.handle(PageRenderRequestHandlerImpl.java:55)
> * org.apache.tapestry.internal.services.RootPathDispatcher.dispatch(RootPathDispatcher.java:52)
> * org.apache.tapestry.services.TapestryModule$12.service(TapestryModule.java:905)
> * org.example.myapp.services.AppModule$1.service(AppModule.java:92)
> * org.apache.tapestry.internal.services.LocalizationFilter.service(LocalizationFilter.java:43)
> * org.apache.tapestry.services.TapestryModule$2.service(TapestryModule.java:487)
> * org.apache.tapestry.internal.services.StaticFilesFilter.service(StaticFilesFilter.java:79)
> * org.apache.tapestry.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:94)
> * org.apache.tapestry.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:85)
> * org.apache.tapestry.ioc.internal.util.ConcurrentBarrier.withRead(ConcurrentBarrier.java:77)
> * org.apache.tapestry.internal.services.CheckForUpdatesFilter.service(CheckForUpdatesFilter.java:107)
> * org.apache.tapestry.services.TapestryModule$11.service(TapestryModule.java:888)
> * org.apache.tapestry.TapestryFilter.doFilter(TapestryFilter.java:164)
> * org.mortbay.jetty.servlet.WebApplicationHandler$CachedChain.doFilter(WebApplicationHandler.java:821)
> * org.mortbay.jetty.servlet.WebApplicationHandler.dispatch(WebApplicationHandler.java:471)
> * org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:568)
> * org.mortbay.http.HttpContext.handle(HttpContext.java:1530)
> * org.mortbay.jetty.servlet.WebApplicationContext.handle(WebApplicationContext.java:633)
> * org.mortbay.http.HttpContext.handle(HttpContext.java:1482)
> * org.mortbay.http.HttpServer.service(HttpServer.java:909)
> * org.mortbay.http.HttpConnection.service(HttpConnection.java:820)
> * org.mortbay.http.HttpConnection.handleNext(HttpConnection.java:986)
> * org.mortbay.http.HttpConnection.handle(HttpConnection.java:837)
> * org.mortbay.http.SocketListener.handleConnection(SocketListener.java:245)
> * org.mortbay.util.ThreadedServer.handle(ThreadedServer.java:357)
> * org.mortbay.util.ThreadPool$PoolThread.run(ThreadPool.java:534)
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tapestry.apache.org
For additional commands, e-mail: dev-help@tapestry.apache.org