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 moreHere'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