Ошибка java.lang. NoClassDefFoundError на org.springframework.webflow.util. RandomGuid

Комментарий от Imantas указал мне на использование [FromQuery] для модели представления, которая теперь выглядит следующим образом:

public class DetailsQuery
{
  [Required]
  public int? ClockNumber { get; set; }
  [Required]
  public int? YearFrom { get; set; }
  [Required]
  public int? YearTo { get; set; }
  [FromQuery]
  public bool CheckHistoricalFlag { get; set; } = false;
}

Метод контроллера теперь:

[AllowAnonymous]
[HttpGet("/api/employees/{clockNumber:int}/calendar/{yearFrom:int}/{yearTo:int}")]
public ActionResult Get([FromRoute]DetailsQuery query)
{
  return Ok();
}

, который работает как ожидалось.

Спасибо за указатель Imantas.

7
задан Mosty Mostacho 24 March 2012 в 21:39
поделиться

4 ответа

Важно сохранить два или три других пролива исключений в нашей голове в этом случае:

  1. java.lang.ClassNotFoundException Это исключение указывает, что класс не был найден на пути к классу. Это указывает, что мы пытались загрузить определение класса, и класс не существовал на пути к классу.

  2. java.lang.NoClassDefFoundError Это исключение указывает, что JVM смотрела в своей внутренней структуре данных определения класса для определения класса и не нашла его. Это отличается, чем высказывание, что это не могло быть загружено из пути к классу. Обычно это указывает, что мы ранее попытались загрузить класс из пути к классу, но он перестал работать по некоторым причинам - теперь мы попробовали еще раз, но мы даже не собираемся пытаться загрузить его, потому что мы привели загрузку к сбою его ранее. Более ранним отказом мог быть ClassNotFoundException или ExceptionInInitializerError (указание на отказ в статическом блоке инициализации) или любое количество других проблем. Точка, NoClassDefFoundError является не обязательно проблемой пути к классу.

Однако другой плакат ответа указывает, что RandomGUID требует вызова к InetAddress.getLocalHost (). Во многих операционных системах это инициировало бы поиск хоста, который будет использовать файл hosts (/etc/hosts на *ОТКЛОНЯЮТ системы, %WINDOWS%/system32/drivers/etc/HOSTS в системе Windows.)

Я видел подобные ошибки вполне часто, когда тот файл неправильно определяет адрес localhost. 127.0.0.1 должен указать на 'localhost' (и вероятно также localhost.localdomain.) Это не должно указывать на фактическое имя хоста машины (хотя по некоторым причинам, многие более старый Redhat установщикам Linux понравилось устанавливать его неправильно.)

25
ответ дан 6 December 2019 в 06:26
поделиться

В наше время $CLASSPATH переменной среды не должен использоваться; вместо этого, JAVA-приложению нужно установить путь к классу на командной строке.

Однако в случае кота и библиотек, пользовавшихся в веб-приложениях, Вы просто помещаете БАНКИ (для Spring) в shared/lib/папку установки кота.

1
ответ дан 6 December 2019 в 06:26
поделиться

NoClassDef: разыскиваемое определение класса существовало, когда в настоящее время выполняющийся класс был скомпилирован, но определение больше не может находиться. Поскольку Вы пропускаете пружинный класс, я предположил бы, что Вы пропускаете один из пружинных файлов банки.

Существует 2 места для помещения банок в кота, существует глобальная область (который в 5 что-то как общий / lib и несколько отличается в tomcat6), и область только для веб-приложения, которое является webapps/mywebapp/WEB-INF/lib. Банки для Вашего приложения должны действительно пойти сюда, но если Вы будете действительно озадачены и не сможете выяснить никакой другой способ заставить его работать, то они будут работать в глобальном (если у Вас будут только некоторые из них в глобальном, оно могло бы также повредиться, поскольку им, возможно, понадобился бы класс в другой банке и если одна часть будет в локальном, то оно не будет работать. Это особенно верно для пружинных библиотек, потому что существует много отдельных банок, не всего одна).

Ваш ПУТЬ К КЛАССУ является списком везде jvm, ищет классы. Это могло включать каталоги файлов класса, или банку или zip-файлы классов, которые перечислены как каталоги. Tomcat должен загрузить это для Вас при помощи вышеупомянутых каталогов правильно.

1
ответ дан 6 December 2019 в 06:26
поделиться

Причиной является отказ загрузить класс RandomGUID.

От рассмотрения источника RandomGUID, большинство возможностей, что его статический инициализатор перестал работать в InetAddress.getLocalHost ().

У Вас есть некоторая странная сетевая конфигурация на хосте? Например, никакое или странное localhost определение в/etc/hosts?

1
ответ дан 6 December 2019 в 06:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: