Great to hear!

+1 on the additional logging if bean validation is there but fails to
initialize!

Regards,
Jakob

2010/9/28 Jan-Kees van Andel <jankeesvanan...@gmail.com>:
> Great!
>
> I guess the logger version mismatch causes a noclassdeffounderror or
> something inside beanval. I guess we need to implement some additional
> logging inside myfaces to debug such issues...
>
> Regards,
> Jan-Kees
>
>
> 2010/9/28 Matthias Niehoff <niehoff.matth...@googlemail.com>
>
>> Thanks for your help. I solved the problem. After I fixed a version
>> mismatch
>> in SLF4J Bean Validation was enabled. Maybe the initialization checks the
>> logger?
>>
>> Regards
>>
>> -----Ursprüngliche Nachricht-----
>> Von: Jan-Kees van Andel [mailto:jankeesvanan...@gmail.com]
>> Gesendet: Montag, 27. September 2010 21:55
>> An: MyFaces Discussion
>> Betreff: Re: Bean Validation (JSR 303)
>>
>> Yeah, but there is more. First, did you package the myfaces jars in the
>> application or in a shared library or something? And the same question for
>> the validation api and impl jars
>>
>> And this Class.forName check is not the complete check. After
>> Class.forName,
>> we completely initialize the bean validation framework, using the default
>> factory. If this fails, I decided to disable bean validation. But in this
>> case, you should see more logging. For example the error message,
>> explaining
>> why the beanval initialization failed.
>>
>> You can set the logger for "javax.faces.validator" to "fine" to see the
>> error message, if any. Otherwise, putting a breakpoint in the
>> javax.faces.validator.BeanValidator.createValidatorFactory() method and
>> stepping into _ExternalSpecifications.isBeanValidationAvailable() would
>> also
>> be a very good first step.
>>
>> @Committers: I decided to log it as fine a year ago, because I can't decide
>> whether or not the exception is important. I didn't want to irritate and
>> scare developers when there is no issue. But we might be better off logging
>> it as info, for cases like this one. Or maybe a second catch clause for
>> specific bean validation exceptions that logs its messages as info. But
>> then
>> again, not every exception thrown by the buildDefaultValidatorFactory has
>> to
>> be that type. For example, NoClassDefFoundErrors could also occur. What do
>> you think?
>>
>> Regards,
>> Jan-Kees
>>
>> 2010/9/27 Jakob Korherr <jakob.korh...@gmail.com>
>>
>> > Hi,
>> >
>> > That's weird, because ExternalSpecifications does this:
>> >
>> > beanValidationAvailable =
>> > (Class.forName("javax.validation.Validation") != null);
>> >
>> > Thus it will be true if javax.validation.Validation is on the classpath!
>> >
>> > Regards,
>> > Jakob
>> >
>> > 2010/9/27 Matthias Niehoff <niehoff.matth...@googlemail.com>:
>> > > Hey,
>> > >
>> > > I get this message:
>> > > 27.09.2010 15:57:32 org.apache.myfaces.util.ExternalSpecifications
>> > > isBeanValidationAvailable
>> > > INFO: MyFaces Bean Validation support disabled I double checked the
>> > > classpath. javax.validation.Validation is on it.
>> > >
>> > > Regards
>> > >
>> > > Matthias
>> > >
>> > > -----Ursprüngliche Nachricht-----
>> > > Von: Jan-Kees van Andel [mailto:jankeesvanan...@gmail.com]
>> > > Gesendet: Montag, 27. September 2010 13:52
>> > > An: MyFaces Discussion
>> > > Betreff: Re: Bean Validation (JSR 303)
>> > >
>> > > Hey,
>> > >
>> > > If you specify javax.faces.VALIDATE_EMPTY_FIELDS=auto, MyFaces will
>> > > look
>> > for
>> > > a class named javax.validation.Validation on the classpath. If it is
>> > found,
>> > > it will try to initialize it, using:
>> > > Validation.buildDefaultValidatorFactory().getValidator();
>> > >
>> > > This call may fail, for instance, because of a configuration error
>> > > in
>> > your
>> > > bean validation code. And if it does, MyFaces will catch this error
>> > > and
>> > log
>> > > an error message: "Error initializing Bean Validation (could be
>> normal)"
>> > >
>> > > Afterwards, you should see a message in the log: "MyFaces Bean
>> > > Validation support enabled" or "MyFaces Bean Validation support
>> > > disabled", depending
>> > on
>> > > whether initalization succeeded or not.
>> > >
>> > > Do you see those log messages?
>> > >
>> > > Regards,
>> > > Jan-Kees
>> > >
>> > >
>> > > 2010/9/27 Matthias Niehoff <niehoff.matth...@googlemail.com>
>> > >
>> > >> Yes, using Hibernate Validator 4.1.0 Final and Validation API 1.0.0.
>> > >> Is there anything else to configure?
>> > >>
>> > >> Regards
>> > >> Matthias
>> > >>
>> > >> -----Ursprüngliche Nachricht-----
>> > >> Von: Michael Kurz [mailto:michi.k...@gmx.at]
>> > >> Gesendet: Montag, 27. September 2010 13:33
>> > >> An: users@myfaces.apache.org
>> > >> Betreff: Re: Bean Validation (JSR 303)
>> > >>
>> > >> Do you have a bean validation implementation like Hibernate
>> > >> Validator on your classpath?
>> > >>
>> > >> regards
>> > >> Michael
>> > >>
>> > >> Am 27.09.2010 13:21, schrieb Matthias Niehoff:
>> > >> > Hi,
>> > >> >
>> > >> > I'm trying to realize Bean Validation. I annotated my attributes
>> > >> > and set javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL
>> true.
>> > >> > Furthermore I added a h:message tag in my form. When I test the
>> > >> > validation nothing happens. The input is accepted (and in my case
>> > >> persisted).
>> > >> > Relevant parts of the Code:
>> > >> >
>> > >> > Web.xml
>> > >> >
>> > >> >      <context-param>
>> > >> >
>> > >> > <param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_A
>> > >> > S_N
>> > >> > UL
>> > >> > L</par
>> > >> > am-name>
>> > >> >          <param-value>true</param-value>
>> > >> >      </context-param>
>> > >> >
>> > >> >          <context-param>
>> > >> >          <param-name>javax.faces.VALIDATE_EMPTY_FIELDS</param-name>
>> > >> >          <param-value>auto</param-value>
>> > >> >      </context-param>
>> > >> >
>> > >> > User.java
>> > >> >
>> > >> > import javax.validation.constraints.NotNull;
>> > >> > import org.hibernate.validator.constraints.Email;
>> > >> >
>> > >> > public class User {
>> > >> >       @NotNull
>> > >> >       private String nachname;
>> > >> >       @NotNull
>> > >> >       private String vorname;
>> > >> >       @NotNull
>> > >> >       private String userID;
>> > >> >       @NotNull
>> > >> >       private String password;
>> > >> >       @NotNull
>> > >> >       @Email
>> > >> >       private String email;
>> > >> >       @NotNull
>> > >> >       private String role;
>> > >> > ...
>> > >> > }
>> > >> >
>> > >> > UserBean.java
>> > >> >
>> > >> > @ManagedBean
>> > >> > @SessionScoped
>> > >> > public class UserBean {
>> > >> >
>> > >> >       private User user = new User();
>> > >> >
>> > >> >       public void setUser(User user) {
>> > >> >               this.user = user;
>> > >> >       }
>> > >> >
>> > >> >       public User getUser() {
>> > >> >               return user;
>> > >> >       }
>> > >> >
>> > >> >       public String save() {
>> > >> >               [...]
>> > >> >               return "/admin/user/showUser.xhtml";
>> > >> >       }
>> > >> > [...]
>> > >> > }
>> > >> >
>> > >> > And last but not least:
>> > >> > editUser.xhtml
>> > >> >
>> > >> > <body>
>> > >> > <h:form id="form">
>> > >> >       <h:messages showDetail="true" showSummary="false" />
>> > >> >       <h:panelGrid columns="2" id="grid">
>> > >> >               <h:outputLabel value="Vorname:" for="firstName" />
>> > >> >               <h:inputText id="firstName"
>> > >> value="#{userBean.user.vorname}"
>> > >> > />
>> > >> >               <h:outputLabel value="Nachname:" for="lastName" />
>> > >> >               <h:inputText id="lastName"
>> > >> value="#{userBean.user.nachname}"
>> > >> > />
>> > >> >               <h:outputLabel value="Email:" for="email" />
>> > >> >               <h:inputText id="email" value="#{userBean.user.email}"
>> > />
>> > >> >               <h:outputLabel value="Rolle:" for="role" />
>> > >> >               <h:inputText id="role" value="#{userBean.user.role}"
>> />
>> > >> >               <h:outputLabel value="Passwort:" for="password" />
>> > >> >               <h:inputSecret id="password"
>> > >> > value="#{userBean.user.password}" />
>> > >> >               <h:commandButton id="save" action="#{userBean.save}"
>> > >> > value="Speichern" />
>> > >> >       </h:panelGrid>
>> > >> > </h:form>
>> > >> > </body>
>> > >> >
>> > >> > Did I miss a point?  I thougt it would only be annotating the Beans.
>> > >> >
>> > >> > Thanks for your help!
>> > >> >
>> > >> > Matthias Niehoff
>> > >> >
>> > >>
>> > >>
>> > >
>> > >
>> >
>> >
>> >
>> > --
>> > Jakob Korherr
>> >
>> > blog: http://www.jakobk.com
>> > twitter: http://twitter.com/jakobkorherr
>> > work: http://www.irian.at
>> >
>>
>>
>



-- 
Jakob Korherr

blog: http://www.jakobk.com
twitter: http://twitter.com/jakobkorherr
work: http://www.irian.at

Reply via email to