Hibernate Validator Issue in jboss-seam-1.0.0.CR3 on JBossAS
james.williams May 25, 2006 9:56 PMI was trying to do the following:
1. Add a message resource bundle to SEAM's registration example app faces.config.xml
<application> <message-bundle>messages</message-bundle> <locale-config> <default-locale>en</default-locale> <supported-locale>en</supported-locale> </locale-config> </application>
2. Make sure that messages_en.properties is in WEB-INF/classes
3. Tweak the User.getUserName so that the validator returns a resource bundle property instead of the standard hibernate validator message (kinda works)
@Id @NotNull @Length(min=5, max=15, message="{invalid.username}") public String getUsername() { return username; }
Here's my problem:
This works fine when I run in JBossAS 4.0.4GA but blows up when I run a testng case against embedded-ejb. I get a nasty stack trace that looks like:
[testng] ERROR 25-05 19:53:39,250 (AbstractController.java:incrementState:350) -Error installing to Start: name=persistence.units:jar=seam-shell.jar,unitName=userDatabase state=Create [testng] java.lang.IllegalArgumentException: could not instantiate ClassValidator [testng] at org.hibernate.validator.ClassValidator.createValidator(ClassValidator.java:257) [testng] at org.hibernate.validator.ClassValidator.createMemberValidator(ClassValidator.java:225) [testng] at org.hibernate.validator.ClassValidator.initValidator(ClassValidator.java:169) [testng] at org.hibernate.validator.ClassValidator.<init>(ClassValidator.java:103) [testng] at org.hibernate.validator.ClassValidator.<init>(ClassValidator.java:91) [testng] at org.hibernate.validator.ClassValidator.<init>(ClassValidator.java:85) [testng] at org.hibernate.validator.ClassValidator.<init>(ClassValidator.java:77) [testng] at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:267) [testng] at org.hibernate.cfg.Configuration.buildMappings(Configuration.java:1001) [testng] at org.hibernate.ejb.Ejb3Configuration.buildMappings(Ejb3Configuration.java:828) [testng] at org.hibernate.ejb.EventListenerConfigurator.configure(EventListenerConfigurator.java:161) [testng] at org.hibernate.ejb.Ejb3Configuration.createEntityManagerFactory(Ejb3Configuration.java:619) [testng] at org.hibernate.ejb.Ejb3Configuration.createContainerEntityManagerFactory(Ejb3Configuration.java:306) [testng] at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:115) [testng] at org.jboss.ejb3.entity.PersistenceUnitDeployment.start(PersistenceUnitDeployment.java:264) [testng] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [testng] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) [testng] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) [testng] at java.lang.reflect.Method.invoke(Method.java:585) [testng] at org.jboss.reflect.plugins.introspection.ReflectionUtils.invoke(ReflectionUtils.java:55) [testng] at org.jboss.reflect.plugins.introspection.ReflectMethodInfoImpl.invoke(ReflectMethodInfoImpl.java:107) [testng] at org.jboss.joinpoint.plugins.BasicMethodJoinPoint.dispatch(BasicMethodJoinPoint.java:66) [testng] at org.jboss.kernel.plugins.dependency.KernelControllerContextActions.dispatchJoinPoint(KernelControllerContextActions.java:100) [testng] at org.jboss.kernel.plugins.dependency.KernelControllerContextActions$LifecycleAction.installAction(KernelControllerContextActions.java:582) [testng] at org.jboss.kernel.plugins.dependency.KernelControllerContextActions$KernelControllerContextAction.install(KernelControllerContextActions.java:175) [testng] at org.jboss.dependency.plugins.AbstractControllerContextActions.install(AbstractControllerContextActions.java:51) [testng] at org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:226) [testng] at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:593) [testng] at org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:346) [testng] at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:438) [testng] at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:379) [testng] at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:225) [testng] at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:151) [testng] at org.jboss.kernel.plugins.dependency.AbstractKernelController.install(AbstractKernelController.java:79) [testng] at org.jboss.kernel.plugins.dependency.AbstractKernelController.install(AbstractKernelController.java:73) [testng] at org.jboss.ejb3.MCKernelAbstraction.install(MCKernelAbstraction.java:91) [testng] at org.jboss.ejb3.Ejb3Deployment.startPersistenceUnits(Ejb3Deployment.java:626) [testng] at org.jboss.ejb3.Ejb3Deployment.start(Ejb3Deployment.java:475) [testng] at org.jboss.ejb3.embedded.EJB3StandaloneDeployer.start(EJB3StandaloneDeployer.java:460) [testng] at org.jboss.seam.core.Ejb.startup(Ejb.java:50) [testng] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [testng] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) [testng] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) [testng] at java.lang.reflect.Method.invoke(Method.java:585) [testng] at org.jboss.seam.util.Reflections.invoke(Reflections.java:13) [testng] at org.jboss.seam.util.Reflections.invokeAndWrap(Reflections.java:32) [testng] at org.jboss.seam.Component.callComponentMethod(Component.java:1239) [testng] at org.jboss.seam.Component.callCreateMethod(Component.java:1227) [testng] at org.jboss.seam.Component.newInstance(Component.java:1216) [testng] at org.jboss.seam.Component.getInstance(Component.java:1168) [testng] at org.jboss.seam.Component.getInstance(Component.java:1158) [testng] at org.jboss.seam.contexts.Lifecycle.startup(Lifecycle.java:115) [testng] at org.jboss.seam.contexts.Lifecycle.endInitialization(Lifecycle.java:94) [testng] at org.jboss.seam.init.Initialization.init(Initialization.java:110) [testng] at org.jboss.seam.mock.SeamTest.init(SeamTest.java:321) [testng] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [testng] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) [testng] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) [testng] at java.lang.reflect.Method.invoke(Method.java:585) [testng] at org.testng.internal.MethodHelper.invokeMethod(MethodHelper.java:529) [testng] at org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:311) [testng] at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:149) [testng] at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:77) [testng] at org.testng.TestRunner.privateRun(TestRunner.java:614) [testng] at org.testng.TestRunner.run(TestRunner.java:505) [testng] at org.testng.SuiteRunner.privateRun(SuiteRunner.java:221) [testng] at org.testng.SuiteRunner.run(SuiteRunner.java:147) [testng] at org.testng.TestNG.createAndRunSuiteRunners(TestNG.java:576) [testng] at org.testng.TestNG.runSuitesLocally(TestNG.java:539) [testng] at org.testng.TestNG.run(TestNG.java:316) [testng] at org.testng.TestNG.privateMain(TestNG.java:666) [testng] at org.testng.TestNG.main(TestNG.java:608) [testng] Caused by: java.util.MissingResourceException: Can't find resource for bundle java.util.PropertyResourceBundle, key invalid.username [testng] at java.util.ResourceBundle.getObject(ResourceBundle.java:326) [testng] at java.util.ResourceBundle.getString(ResourceBundle.java:286) [testng] at org.hibernate.validator.ClassValidator.replace(ClassValidator.java:505) [testng] at org.hibernate.validator.ClassValidator.createValidator(ClassValidator.java:252) [testng] ... 71 more [testng] INFO 25-05 19:53:39,296 (MCKernelAbstraction.java:install:84) -installing bean: jboss.j2ee:jar=seam-shell,name=SimpleFlowAction,service=EJB3 with dependencies: [testng] INFO 25-05 19:53:39,500 (EJBContainer.java:start:553) -STARTED EJB: org.jboss.seam.example.pageflow.SimpleFlowAction ejbName: SimpleFlowAction [testng] INFO 25-05 19:53:39,500 (MCKernelAbstraction.java:install:84) -installing bean: jboss.j2ee:jar=seam-shell,name=RegisterAction,service=EJB3 with dependencies: [testng] INFO 25-05 19:53:39,500 (MCKernelAbstraction.java:install:87) - AbstractDependencyMetaData@345b43{dependency=persistence.units:jar=seam-shell.jar,unitName=userDatabase} [testng] INFO 25-05 19:53:39,515 (Initialization.java:init:111) -done initializing Seam [testng] INFO 25-05 19:53:39,562 (Pages.java:initialize:70) -no pages.xml file found [testng] INFO 25-05 19:53:39,562 (Ejb.java:shutdown:65) -stopping the embedded EJB container [testng] ERROR 25-05 19:53:39,562 (AbstractController.java:uninstallContext:501) -Internal error during uninstall current state not found: name=persistence.units:jar=seam-shell.jar,unitName=userDatabase state=**ERROR** error=java.lang.IllegalArgumentException: could not instantiate ClassValidator [testng] ERROR 25-05 19:53:39,562 (AbstractController.java:uninstallContext:505) -Internal error during uninstall: toState=ControllerState@1dfd90f{Not Installed} context=name=persistence.units:jar=seam-shell.jar,unitName=userDatabase state=**ERROR** error=java.lang.IllegalArgumentException: could not instantiate ClassValidator [testng] Creating C:\workspace-02142006\seam-shell\testng-report\Register.html [testng] PASSED: testResourceBundle [testng] FAILED: org.jboss.seam.example.test.RegisterTest.testLogin() [testng] org.jboss.seam.InstantiationException: Could not instantiate Seam component: register [testng] at org.jboss.seam.Component.newInstance(Component.java:678) [testng] at org.jboss.seam.Component.newInstance(Component.java:1213) [testng] at org.jboss.seam.Component.getInstance(Component.java:1168) [testng] at org.jboss.seam.Component.getInstance(Component.java:1151) [testng] at org.jboss.seam.example.test.RegisterTest$2.invokeApplication(RegisterTest.java:52) [testng] at org.jboss.seam.mock.SeamTest$Script.run(SeamTest.java:240) [testng] at org.jboss.seam.example.test.RegisterTest.testLogin(RegisterTest.java:37) [testng] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [testng] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) [testng] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) [testng] at java.lang.reflect.Method.invoke(Method.java:585) [testng] at org.testng.internal.MethodHelper.invokeMethod(MethodHelper.java:529) [testng] at org.testng.internal.Invoker.invokeMethod(Invoker.java:398) [testng] at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:625) [testng] at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:88) [testng] at org.testng.TestRunner.privateRun(TestRunner.java:614) [testng] at org.testng.TestRunner.run(TestRunner.java:505) [testng] at org.testng.SuiteRunner.privateRun(SuiteRunner.java:221) [testng] at org.testng.SuiteRunner.run(SuiteRunner.java:147) [testng] at org.testng.TestNG.createAndRunSuiteRunners(TestNG.java:576) [testng] at org.testng.TestNG.runSuitesLocally(TestNG.java:539) [testng] at org.testng.TestNG.run(TestNG.java:316) [testng] at org.testng.TestNG.privateMain(TestNG.java:666) [testng] at org.testng.TestNG.main(TestNG.java:608) [testng] Caused by: javax.naming.NameNotFoundException: RegisterAction not bound [testng] at org.jnp.server.NamingServer.getBinding(NamingServer.java:529) [testng] at org.jnp.server.NamingServer.getBinding(NamingServer.java:537) [testng] at org.jnp.server.NamingServer.getObject(NamingServer.java:543) [testng] at org.jnp.server.NamingServer.lookup(NamingServer.java:267) [testng] at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:626) [testng] at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:588) [testng] at javax.naming.InitialContext.lookup(InitialContext.java:351) [testng] at org.jboss.seam.Component.instantiate(Component.java:716) [testng] at org.jboss.seam.Component.newInstance(Component.java:674) [testng] ... 23 more
Here's what I did to get it to work in JBossAS 4.0.4GA:
Add the latest "hibernate-annotations.jar" version 3.2.0 CR1 to my classpath.
Question:
Anyone know of a way to get the test to pass in testng without removing the resource bundle reference? I have verified via a testng test case that testng can indeed retrieve resource bundle values, so I'm assuming this issue is due to some quirk with embedded-ejb or a configuration snafu on my part.
James