Wicket
  1. Wicket
  2. WICKET-4379

org.apache.wicket.validation.ValidatorAdapter class causes problem with validator properties to be loaded

    Details

    • Type: Bug Bug
    • Status: Resolved
    • Priority: Minor Minor
    • Resolution: Fixed
    • Affects Version/s: 1.5.4
    • Fix Version/s: 1.5.5, 6.0.0-beta1
    • Component/s: wicket
    • Labels:
      None
    • Environment:
      Windows 7, Netbeans 7.0.1, Java 6 SE (HotSpot)

      Description

      PROBLEM:
      <e1nPL> hi I am having such problem:
      <e1nPL> I have implemented validator by implementing IValidator<T> interface
      <e1nPL> and I have impelemnted the same validator by extending AbstractValidator<T> class

      CODE:
      ===================== VALIDATOR EXTENDED FROM AbstractValidator =====================
      package com.mycompany;

      import java.util.regex.Pattern;
      import org.apache.wicket.IClusterable;
      import org.apache.wicket.util.lang.Classes;
      import org.apache.wicket.validation.IValidatable;
      import org.apache.wicket.validation.IValidator;
      import org.apache.wicket.validation.ValidationError;
      import org.apache.wicket.validation.validator.AbstractValidator;

      /**
      *

      • @author e1n
        */
        public class PasswordPolicyValidator<T> extends AbstractValidator<T> {

      private static final Pattern UPPER = Pattern.compile("[A-Z]");
      private static final Pattern LOWER = Pattern.compile("[a-z]");
      private static final Pattern NUMBER = Pattern.compile("[0-9]");

      @Override
      public void onValidate(IValidatable<T> validatable) {
      final String password = (String)validatable.getValue();

      if (!NUMBER.matcher(password).find())

      { error(validatable, "no-digit"); }
      if (!LOWER.matcher(password).find()) { error(validatable, "no-lower"); }
      if (!UPPER.matcher(password).find()) { error(validatable, "no-upper"); }

      }

      @Override
      public void error(IValidatable<T> validatable, String errorKey) { ValidationError err = new ValidationError(); err.addMessageKey(Classes.simpleName(getClass()) + "." + errorKey); validatable.error(err); }

      }


      =============== VALIDATOR directly implementing IValidator interfce ====================
      package com.mycompany;

      import java.util.regex.Pattern;
      import org.apache.wicket.IClusterable;
      import org.apache.wicket.util.lang.Classes;
      import org.apache.wicket.validation.IValidatable;
      import org.apache.wicket.validation.IValidator;
      import org.apache.wicket.validation.ValidationError;
      import org.apache.wicket.validation.validator.AbstractValidator;

      /**
      *
      * @author e1n
      */
      public class PasswordPolicyValidator<T> implements IValidator<T> {

      private static final Pattern UPPER = Pattern.compile("[A-Z]");
      private static final Pattern LOWER = Pattern.compile("[a-z]");
      private static final Pattern NUMBER = Pattern.compile("[0-9]");

      public void validate(IValidatable<T> validatable) {
      final String password = (String)validatable.getValue();

      if (!NUMBER.matcher(password).find()) { error(validatable, "no-digit"); }

      if (!LOWER.matcher(password).find())

      { error(validatable, "no-lower"); }

      if (!UPPER.matcher(password).find())

      { error(validatable, "no-upper"); }

      }

      public void error(IValidatable<T> validatable, String errorKey)

      { ValidationError err = new ValidationError(); err.addMessageKey(Classes.simpleName(getClass()) + "." + errorKey); validatable.error(err); }

      }

      <e1nPL> I also have properties file which is named after validator class
      <e1nPL> and placed in the same package
      <e1nPL> my problem is that when i use to validate my form field validator which implements IValidator interface it is not capable of loading error messages from properties file
      <e1nPL> but when i am using validator which is extending AbstractValidator class
      <e1nPL> properties file with error msgs gets loaded
      POSSIBLE FIX:
      <e1nPL> ok i have found class which is responsible for my problem and it is probably a bug
      <e1nPL> org.apache.wicket.validation.ValidatorAdapter
      <e1nPL> which wraps classes that directly implements IValidator interface
      <e1nPL> then when resources are loaded, and properties file are searched in class path etc., loaders search in wrong path that is build against org.apache.wicket.validation.ValidatorAdapter
      PLACE WHER FIX SHOULD OCCOUR
      org.apache.wicket.resource.loader.ValidatorStringResourceLoader::loadStringResource(java.lang.Class,java.lang.String,java.util.Locale,java.lang.String,java.lang.String)

        Issue Links

          Activity

          Hide
          Martin Grigorov added a comment -

          Fixed in 1.5.x.
          Needs to be ported to 6.x

          Show
          Martin Grigorov added a comment - Fixed in 1.5.x. Needs to be ported to 6.x

            People

            • Assignee:
              Martin Grigorov
              Reporter:
              Michał Bartoszewski
            • Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved:

                Development