Всем привет! Для контекста я работаю над простым проектом Spring в IntelliJ, чтобы настроить его с помощью HotswapAgent, используя DCEVM [8u181 build 2] вместе с совместимым JDK [ 8u181 ] на сервере приложений Payara 5.0.
Пожалуйста, поддержите меня в следующих нескольких фрагментах кода и моем правдоподобном объяснении того, что происходит, и это не вопрос о синтаксисе Spring MVC или его работе.
Это пример кода, который я тестирую на горячей замене [не встроенной в JVM, но с использованием DCEVM] и HotswapAgent[1.3.0].
HelloWorldController.java
@Controller
public class HelloWorldController {
@Autowired HelloService helloService;
@RequestMapping("/hello")
public String hello(
@RequestParam(value = "name", required = false, defaultValue = "World") String name,
Model model) {
model.addAttribute("name", name);
System.out.println( helloService.sayHello() );
return "helloworld";
}
Я не хочу включать код для helloService, так как это может раздуть этот пост.
HelloService.sayHello() просто выдает типичный Hello World в консоли
Как вы можете видеть выше, автоматическое подключение было включено и выполняет правильную функцию (упомянутую выше).
После этого я комментирую аннотацию Autowired и вызов функции, и это дает мне ошибку:
org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.annotation.AnnotationFormatError: java.lang.IllegalArgumentException: Wrong type at constant pool index
Сосредоточьтесь на:
java.lang.IllegalArgumentException: Wrong type at constant pool index
Я отладил приложение и обнаружил, что исключение IllegalArgumentException возникло, когда AnnotationParser анализировал аннотации класса контроллера Spring из пула констант, а члены (одной из аннотаций, которые являются «типом» аннотации) были неправильно, когда он был взят из пула констант класса.
Итак, насколько мне известно, горячее развертывание выполняется неправильно (даже несмотря на то, что HotswapAgent говорит, что он перезагрузил класс на сервере Payara), или что-то не так с коммуникацией JVM или JDK, и я говорю это, потому что, когда я делаю противоположное это закомментировать автопроводку, затем горячее развертывание, а затем запустить, поэтому я получаю исключение нулевого указателя.
Примечание: просто для дополнительной информации
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.NullPointerException
Если кому-то нужна дополнительная информация, код или журналы по этому поводу, я был бы более чем рад уточнить. Спасибо за ваше время всем.