I had gotten a very simple Seam project created in Eclipse successfully cloned 
from seam-registration.  I started changing it a bit to be a bit more like the 
seam-booking example (just the registration page part), which included adding 
the @NotNull and @Length annotations that come from Hibernate.  I'm trying to 
build an application with Seam and Facelets and Hibernate, which seems to be 
the recommended approach from the documentation.

Since I am the unusual kind of American who expects that his software will need 
a non-English UI in order to sell it abroad :-), I had also followed the 
recommendation of putting a message.properties file in WEB-INF/classes, as 
suggested in section 5.2 (Internationalization.Labels) of the reference manual. 
 Well, it turns out that if you do that, then you override the Hibernate 
validator message properties from its DefaultValidatorMessages properties.  
This caused me to get:


anonymous wrote : 2006-07-04 15:16:30,921 ERROR 
[org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/seam-registration].[Faces
 Servlet]] Servlet.service() for servlet Faces Servlet threw exception
  | java.lang.IllegalArgumentException: could not instantiate ClassValidator
  |     at 
org.hibernate.validator.ClassValidator.createValidator(ClassValidator.java:265)
  |     at 
org.hibernate.validator.ClassValidator.createMemberValidator(ClassValidator.java:233)
  |     at 
org.hibernate.validator.ClassValidator.initValidator(ClassValidator.java:176)
  |     at org.hibernate.validator.ClassValidator.(ClassValidator.java:110)
  |     at org.hibernate.validator.ClassValidator.(ClassValidator.java:98)
  |     at org.hibernate.validator.ClassValidator.(ClassValidator.java:92)
  |     at org.jboss.seam.Component.getValidator(Component.java:652)
  |     at org.jboss.seam.util.Validation.getValidator(Validation.java:23)
  |     at org.jboss.seam.ui.ModelValidator.validate(ModelValidator.java:38)
  |     at 
javax.faces.component._ComponentUtils.callValidators(_ComponentUtils.java:133)
  |     at javax.faces.component.UIInput.validateValue(UIInput.java:254)
  |     at javax.faces.component.UIInput.validate(UIInput.java:269)
  |     at javax.faces.component.UIInput.processValidators(UIInput.java:144)
  |     at 
javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:417)
  |     at javax.faces.component.UIForm.processValidators(UIForm.java:68)
  |     at 
javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:417)
  |     at 
javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:142)
  |     at 
org.apache.myfaces.lifecycle.LifecycleImpl.processValidations(LifecycleImpl.java:240)
  |     at 
org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:76)
  |     at javax.faces.webapp.FacesServlet.service(FacesServlet.java:106)
  |     at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
  |     at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
  |     at 
org.jboss.seam.servlet.SeamRedirectFilter.doFilter(SeamRedirectFilter.java:30)
  |     at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
  |     at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
  |     at 
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
  |     at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
  |     at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
  |     at 
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
  |     at 
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
  |     at 
org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:175)
  |     at 
org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:74)
  |     at 
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
  |     at 
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
  |     at 
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
  |     at 
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
  |     at 
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
  |     at 
org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
  |     at 
org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
  |     at 
org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(MasterSlaveWorkerThread.java:112)
  |     at java.lang.Thread.run(Thread.java:595)
  | Caused by: java.util.MissingResourceException: Can't find resource for 
bundle java.util.PropertyResourceBundle, key validator.notNull
  |     at java.util.ResourceBundle.getObject(ResourceBundle.java:325)
  |     at java.util.ResourceBundle.getString(ResourceBundle.java:285)
  |     at 
org.hibernate.validator.ClassValidator.replace(ClassValidator.java:518)
  |     at 
org.hibernate.validator.ClassValidator.createValidator(ClassValidator.java:260)
  |     ... 40 more
  | 

I was quite perplexed for a few hours.  I'm sure that as I become more familiar 
with Seam this sort of time will shorten, but I do think that it's one of those 
issues that can discourage people from using Seam.  Having the source for Seam 
and Hibernate around certainly helped in figuring out a diagnosis.

Rooting around in the examples, I noticed that the messages.properties files 
for the dvdstore and issues examples define various "validator.*" properties:

validator.assertFalse=assertion failed
  | validator.assertTrue=assertion failed
  | validator.future=must be a future date
  | validator.length=length must be between {min} and {max}
  | validator.max=must be less than or equal to {value}
  | validator.min=must be greater than or equal to {value}
  | validator.notNull=may not be null
  | validator.past=must be a past date
  | validator.pattern=must match "{regex}"
  | validator.range=must be between {min} and {max}
  | validator.size=size must be between {min} and {max}
  | validator.email=not a well-formed email address

Removing or renaming my messages.properties file makes the problem go away.

So, first, a caveat emptor warning to others so that you can avoid my 
misfortune.

And, second, a couple of suggestions for Seam:

* at the least, I think there ought to be some warning about this in the 
reference manual (easy)

* I think that there ought to be a way to get the usefulness of a 
messages.properties file default (i.e. not having to put <f:loadBundle ... /> 
in every page) without incurring the burden of having to redefine the various 
Hibernate validator text properties: there's a maintenance and correctness 
burden (less easy)

Best regards,
Dave


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

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

Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
JBoss-user mailing list
JBoss-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jboss-user

Reply via email to