Bug of Seam ComponentTest for EntityHome?
alartin Jun 13, 2010 4:29 AMTo validate seam component test, I create a simple project with seam-gen:
Only one user entity with userHome.
As seam-gen, the userHome is a seam component with name userHome
and add a simple sayHello method to it with return value is hello
Here is the UserHomeTest code:
public class UserHomeTest extends SeamTest { private static LogProvider log = Logging.getLogProvider(UserTest.class); @Test public void testSayHello() throws Exception { new ComponentTest() { protected void testComponents() throws Exception { String result = (String)invokeMethod("#{userHome.sayHello}"); log.info("Result: "+result); assert result.equals("hello"); } }.run(); } }
It failed to pass the test:
WARN [org.jboss.seam.security.permission.PersistentPermissionResolver] no permission store available - please install a PermissionStore with the name 'org.jboss.seam.security.jpaPermissionStore' if persistent permissions are required. FAILED: testSayHello org.jboss.seam.InstantiationException: Could not instantiate Seam component: userHome at org.jboss.seam.Component.newInstance(Component.java:2144) at org.jboss.seam.Component.getInstance(Component.java:2021) at org.jboss.seam.Component.getInstance(Component.java:1983) at org.jboss.seam.Component.getInstance(Component.java:1977) at org.jboss.seam.Namespace.getComponentInstance(Namespace.java:55) at org.jboss.seam.Namespace.getComponentInstance(Namespace.java:50) at org.jboss.seam.el.SeamELResolver.resolveBase(SeamELResolver.java:148) at org.jboss.seam.el.SeamELResolver.getValue(SeamELResolver.java:51) at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:143) at org.jboss.el.parser.AstIdentifier.getValue(AstIdentifier.java:44) at org.jboss.el.parser.AstValue.getTarget(AstValue.java:34) at org.jboss.el.parser.AstValue.invoke(AstValue.java:95) at org.jboss.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276) at org.jboss.seam.core.Expressions$2.invoke(Expressions.java:175) at org.jboss.seam.mock.AbstractSeamTest$ComponentTest.invokeMethod(AbstractSeamTest.java:136) at com.monsanto.bizcard.test.UserHomeTest$1.testComponents(UserHomeTest.java:32) at org.jboss.seam.mock.AbstractSeamTest$ComponentTest.run(AbstractSeamTest.java:162) at com.monsanto.bizcard.test.UserHomeTest.testSayHello(UserHomeTest.java:30) Caused by: java.lang.IllegalArgumentException: Stack must not be null at org.jboss.seam.core.ConversationEntry.<init>(ConversationEntry.java:45) at org.jboss.seam.core.ConversationEntries.createConversationEntry(ConversationEntries.java:53) at org.jboss.seam.core.Manager.createConversationEntry(Manager.java:664) at org.jboss.seam.core.Manager.beginConversation(Manager.java:685) at org.jboss.seam.core.ConversationInterceptor.beginConversation(ConversationInterceptor.java:229) at org.jboss.seam.core.ConversationInterceptor.beginConversationIfNecessary(ConversationInterceptor.java:166) at org.jboss.seam.core.ConversationInterceptor.aroundInvoke(ConversationInterceptor.java:57) at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68) at org.jboss.seam.transaction.TransactionInterceptor$1.work(TransactionInterceptor.java:97) at org.jboss.seam.util.Work.workInTransaction(Work.java:47) at org.jboss.seam.transaction.TransactionInterceptor.aroundInvoke(TransactionInterceptor.java:91) at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68) at org.jboss.seam.core.MethodContextInterceptor.aroundInvoke(MethodContextInterceptor.java:44) at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68) at org.jboss.seam.core.SynchronizationInterceptor.aroundInvoke(SynchronizationInterceptor.java:32) at org.jboss.seam.intercept.SeamInvocationContext.proceed(SeamInvocationContext.java:68) at org.jboss.seam.intercept.RootInterceptor.invoke(RootInterceptor.java:107) at org.jboss.seam.intercept.JavaBeanInterceptor.interceptInvocation(JavaBeanInterceptor.java:185) at org.jboss.seam.intercept.JavaBeanInterceptor.invoke(JavaBeanInterceptor.java:103) at com.monsanto.bizcard.action.UserHome_$$_javassist_seam_1.create(UserHome_$$_javassist_seam_1.java) at org.jboss.seam.util.Reflections.invoke(Reflections.java:22) at org.jboss.seam.util.Reflections.invokeAndWrap(Reflections.java:144) at org.jboss.seam.Component.callComponentMethod(Component.java:2249) at org.jboss.seam.Component.callCreateMethod(Component.java:2172) at org.jboss.seam.Component.newInstance(Component.java:2132) ... 39 more
I think it is due to EntityHome since I move the sayHello method to User class
and make it as a component with name of user
, then I write the same component test for user component. It works and passes the test!!
The only difference is the seam component type: UserHome extends EntityHome and User is an Entity. I've worked on it for days and read all of exception about SeamTest, could not instantiate seam component and stack must not be null, etc but still can not fix it and find the reason. Could somebody help?
Thanks in advance.