NoSuchMethoException при вызове DefaultValidator.getValidFileName()

Я пытаюсь использовать метод getValidFileName (String, String, list, boolean) класса DefaultValidator из предоставленного ESAPI jar (esapi-2.0_rc11) для проверки имени файла. Но во время выполнения нет такого исключения метода.

Это мой код:

public static String getValidFileName(String input,String[] strFileExtns, Boolean isNullable) throws Exception
{   
    List <String> fileExtnsList = new ArrayList <String>();

if (strFileExtns != null && strFileExtns.length > 0)
    for(int i=0; i<strFileExtns.length; i++)
    fileExtnsList.add(strFileExtns[i]);

    return new DefaultValidator().getValidFileName("FileNameValidation", input, fileExtnsList, isNullable);
}

Я получаю java.lang.NoSuchMethodError:org/owasp/esapi/reference/DefaultValidator.getValidFileName(Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Z)Ljava/lang/String;

Код присутствует в банке:

public String getValidFileName(String context, String input, List<String> allowedExtensions, boolean allowNull)
    throws ValidationException, IntrusionException
  {
    if ((allowedExtensions == null) || (allowedExtensions.isEmpty())) {
      throw new ValidationException("Internal Error", "getValidFileName called with an empty or null list of allowed Extensions, therefore no files can be uploaded");
    }

    String canonical = "";
    try
    {
      if (isEmpty(input)) {
        if (allowNull) return null;
        throw new ValidationException(context + ": Input file name required", "Input required: context=" + context + ", input=" + input, context);
      }

      canonical = new File(input).getCanonicalFile().getName();
      getValidInput(context, input, "FileName", 255, true);

      File f = new File(canonical);
      String c = f.getCanonicalPath();
      String cpath = c.substring(c.lastIndexOf(File.separator) + 1);

      if (!(input.equals(cpath)))
        throw new ValidationException(context + ": Invalid file name", "Invalid directory name does not match the canonical path: context=" + context + ", input=" + input + ", canonical=" + canonical, context);
    }
    catch (IOException e)
    {
      throw new ValidationException(context + ": Invalid file name", "Invalid file name does not exist: context=" + context + ", canonical=" + canonical, e, context);
    }

    Iterator i = allowedExtensions.iterator();
    while (i.hasNext()) {
      String ext = (String)i.next();
      if (input.toLowerCase().endsWith(ext.toLowerCase()))
        return canonical;
    }

    throw new ValidationException(context + ": Invalid file name does not have valid extension ( " + allowedExtensions + ")", "Invalid file name does not have valid extension ( " + allowedExtensions + "): context=" + context + ", input=" + input, context);
  }

Кто-нибудь, пожалуйста, помогите мне в этом.


person user1782009    schedule 16.01.2013    source источник
comment
У тебя наконец это заработало? Если да, не могли бы вы рассказать нам решение в качестве ответа на свой вопрос?   -  person avgvstvs    schedule 17.10.2014


Ответы (1)


Ошибки java.lang.NoSuchMethodError часто возникают из-за проблем с зависимостями. Если вы используете maven (я предполагаю, что вы можете, так как эта ошибка часто возникает с ним), устраните ошибку следующим образом:

Попробуйте ввести «mvn dependency:tree -Dverbose» в командной строке и убедитесь, что библиотека, содержащая org/owasp/esapi/reference/DefaultValidator, соответствует той версии, которую вы хотели. Если нет, вы можете использовать тег исключения, чтобы исключить неправильную версию из зависимости, включающей неправильную версию.

Также убедитесь, что в полученном пути к классам перечислены зависимости в правильном порядке.

person Jaco Van Niekerk    schedule 16.01.2013
comment
Спасибо за ваш ответ. Я забыл нажать JAR в своем WEB-проекте. Но теперь я получаю следующее исключение: - person user1782009; 16.01.2013