[jboss-user] [JBoss Seam] - FacesRequest masks the root cause of an Exception

bytor99999 do-not-reply at jboss.com
Tue Mar 13 17:18:19 EDT 2007


I was going to make a Jira entry about it, but figured it is best to post in the forums first. Especially when doing a little research, it looks like this might be happening at the EL apis level.

Here is what is happening

SUMMARY: Exception thrown in FacesRequest in SeamTest masks the root cause of the Exception


ENVIRONMENT: Windows XP. build and running of tests through Maven2.


DETAILS:
In running a SeamTest that throws an exception in a FacesRequest masks the real cause of the exception, which makes it difficult to find the root cause in the stack trace.

In the following example, I ran a FacesRequest that calls a method in an "Action" class. It throws a NPE. And if I test calling the method in the class directly I also get the NPE, but the stacktrace shows me exactly where it occurs. In the NPE thrown by the FacesRequest, it only shows the request in the stacktrace.

(Note, my requests are not directly created inside the SeamTest class, but in a class that creates different requests that I can reuse in multiple SeamTest classes.

Here is the FacesRequest code


  | test.new FacesRequest() {
  |          @Override
  |          protected void updateModelValues() throws Exception
  |          {
  |             //Set the resource selected
  | 
  |          }
  | 
  |          @Override
  |          protected void invokeApplication() throws Exception
  |          {
  |             //Invoke to get the Navigation Map
  |             invokeMethod("#{navigationAction.getNavigationMap()}");
  |          }
  | 
  |          @Override
  |          protected void renderResponse() throws Exception
  |          {
  | 
  |          }
  |       }.run();
  | 

this is the exception stacktrace I see when running the test (Maven is used)


  | Running myapp.ui.test.DataSourceActionTest
  | java.lang.NullPointerException
  |         at org.jboss.seam.mock.SeamTest$Request.run(SeamTest.java:407)
  |         at myapp.util.NavigationRequests.getNavigationMap(NavigationRequests.java:21)
  |         at myapp.ui.test.DataSourceActionTest.testLeftNavigation(DataSourceActionTest.java:34)
  |         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  |         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
  |         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
  |         at java.lang.reflect.Method.invoke(Method.java:585)
  |         at org.testng.internal.MethodHelper.invokeMethod(MethodHelper.java:552)
  |         at org.testng.internal.Invoker.invokeMethod(Invoker.java:411)
  |         at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:785)
  |         at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:114)
  |         at org.testng.TestRunner.privateRun(TestRunner.java:693)
  |         at org.testng.TestRunner.run(TestRunner.java:574)
  |         at org.testng.SuiteRunner.privateRun(SuiteRunner.java:241)
  |         at org.testng.SuiteRunner.run(SuiteRunner.java:145)
  |         at org.testng.TestNG.createAndRunSuiteRunners(TestNG.java:901)
  |         at org.testng.TestNG.runSuitesLocally(TestNG.java:863)
  |         at org.apache.maven.surefire.testng.TestNGDirectoryTestSuite.executeTestNG(TestNGDirectoryTestSuite.java:194)
  |         at org.apache.maven.surefire.testng.TestNGDirectoryTestSuite.execute(TestNGDirectoryTestSuite.java:131)
  |         at org.apache.maven.surefire.Surefire.run(Surefire.java:129)
  |         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  |         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
  |         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
  |         at java.lang.reflect.Method.invoke(Method.java:585)
  |         at org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:288)
  |         at org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:816)
  |         
        
If I call the action method directly, I get the correct stacktrace I would expect to find. 

(Another Note, in stepping through the code in both examples here, they both threw the exception from the same line of code)


  | NavigationAction navAction = new NavigationAction();
  | navAction.getNavigationMap();        


  | Running myapp.ui.test.DataSourceActionTest
  | java.lang.NullPointerException
  |         at myapp.InventoryManager.getResourcesWithType(InventoryManager.java:485)
  |         at myapp.impl.inventory.InventoryManager.getResourcesWithType(InventoryManager.java:483)
  |         at myapp.impl.inventory.InventoryManager.getResourcesWithType(InventoryManager.java:471)
  |         at myapp.pc.PluginContainerResourceManager.getResources(PluginContainerResourceManager.j
  | ava:104)
  |         at myapp.ResourceManagerBean.getResourceListByCategory(ResourceManagerBean.java:56)
  |         at myapp.ui.NavigationAction.getNavigationMap(NavigationAction.java:76)
  |         at myapp.ui.test.DataSourceActionTest.getNavigationList(DataSourceActionTest.java:90)
  |         at myapp.ui.test.DataSourceActionTest.testLeftNavigation(DataSourceActionTest.java:34)
  |         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  |         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
  |         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
  |         at java.lang.reflect.Method.invoke(Method.java:585)
  |         at org.testng.internal.MethodHelper.invokeMethod(MethodHelper.java:552)
  |         at org.testng.internal.Invoker.invokeMethod(Invoker.java:411)
  |         at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:785)
  |         at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:114)
  |         at org.testng.TestRunner.privateRun(TestRunner.java:693)
  |         at org.testng.TestRunner.run(TestRunner.java:574)
  |         at org.testng.SuiteRunner.privateRun(SuiteRunner.java:241)
  |         at org.testng.SuiteRunner.run(SuiteRunner.java:145)
  |         at org.testng.TestNG.createAndRunSuiteRunners(TestNG.java:901)
  |         at org.testng.TestNG.runSuitesLocally(TestNG.java:863)
  |         at org.apache.maven.surefire.testng.TestNGDirectoryTestSuite.executeTestNG(TestNGDirectoryTestSuite.java:194)
  |         at org.apache.maven.surefire.testng.TestNGDirectoryTestSuite.execute(TestNGDirectoryTestSuite.java:131)
  |         at org.apache.maven.surefire.Surefire.run(Surefire.java:129)
  |         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  |         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
  |         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
  |         at java.lang.reflect.Method.invoke(Method.java:585)
  |         at org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:288)
  |         at org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:816)

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4027706#4027706

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4027706



More information about the jboss-user mailing list