Re: How can I handle validation exception?

From: Νίκος Παράσχου (niparas..mail.com)
Date: Wed Mar 11 2009 - 05:01:52 EDT

  • Next message: Andrus Adamchik: "Re: How can I handle validation exception?"

    The following code works fine:

            context.setValidatingObjectsOnCommit(false);

            ValidationResult validationResult = new ValidationResult();
            company.validateForInsert(validationResult);

            if(validationResult.hasFailures()) {
                List failures = validationResult.getFailures();

                for(int i = 0; i < failures.size(); i++) {
                    ValidationFailure tmp = (ValidationFailure)
    failures.get(i);
                    System.out.println("\n" + tmp.getDescription());
                }
            }
            else {
                context.commitChanges();
            }

    If I don't lower the flag ValidatingObjectsOnCommit (which means "dirty"
    objects will be validated automatically), how can I handle the
    validation failures?

    Is there any way to do something like the following:

    try {
            context.commitChanges();
    }
    catch(Some ValidationException thrown earlier) {
            // Get failures list and print error messages.
    }

    Nikos

    Στις 11-03-2009, ημέρα Τετ, και ώρα 10:30 +0200, ο/η Andrus Adamchik
    έγραψε:
    > > Is the following correct?
    >
    >
    > Looks about right. Also there's a few pre-canned classes implementing
    > ValidationFailure in the org.apache.cayenne.validation package that
    > can be used to build failures.
    >
    > > Or how can I retrieve the error message
    > > from the validationResult when a ValidationException is thrown
    >
    > http://cayenne.apache.org/doc/api/org/apache/cayenne/validation/ValidationResult.html
    >
    > Use 'getFailures()' to get a list of failures, and analyze them one by
    > one using ValidationFailure methods.
    >
    > Andrus
    >
    > On Mar 11, 2009, at 9:36 AM, Νίκος Παράσχου wrote:
    >
    > > Thank you Andrus,
    > >
    > > Yes, I do not throw the exception myself. But, how am I going to
    > > handle
    > > the exception thrown by Cayenne? Or how can I retrieve the error
    > > message
    > > from the validationResult when a ValidationException is thrown, so
    > > that
    > > I can print it in the GUI?
    > >
    > > Is the following correct?
    > >
    > > ..verride
    > > protected void validateForSave(ValidationResult validationResult) {
    > > super.validateForSave(validationResult);
    > >
    > > if(getCompanyName().equalsIgnoreCase("")) {
    > >
    > > validationResult.addFailure(new ValidationFailure() {
    > >
    > > ..verride
    > > public Object getSource() {
    > > return this;
    > > }
    > >
    > > ..verride
    > > public Object getError() {
    > > return Company.CNAME_PROPERTY;
    > > }
    > >
    > > ..verride
    > > public String getDescription() {
    > > return "My error message";
    > > }
    > > });
    > > }
    > > }
    > >
    > > Nikos
    > >
    > > Στις 10-03-2009, ημέρα Τρι, και ώρα 18:16 +0200, ο/
    > > η Andrus Adamchik
    > > έγραψε:
    > >> The code example looks about right. However this is probably what's
    > >> wrong: "When a specific condition is not met, a ValidationException
    > >> is
    > >> thrown.". You should not throw the exception yourself. Just add an
    > >> error to the validationResult, and let Cayenne throw it later.
    > >>
    > >> Andrus
    > >>
    > >>
    > >> On Mar 10, 2009, at 5:03 PM, Νίκος Παράσχου wrote:
    > >>
    > >>> Hello,
    > >>>
    > >>> I implemented validateForSave(ValidationResult validationResult) in
    > >>> one
    > >>> of my ObjEntities. When a specific condition is not met, a
    > >>> ValidationException is thrown.
    > >>>
    > >>> How can I handle this ValidationException?
    > >>>
    > >>> The following doesn't work (I get: ValidationException is not thrown
    > >>> anywhere inside block try{}):
    > >>>
    > >>> try {
    > >>> mycontext.commit();
    > >>> }
    > >>> catch(ValidationException vex) {
    > >>> ...
    > >>> }
    > >>>
    > >>> Thank you,
    > >>> Nikos
    > >>>
    > >>>
    > >>>
    > >>
    > >
    > >
    >



    This archive was generated by hypermail 2.0.0 : Wed Mar 11 2009 - 05:02:39 EDT