嘿大家!对于上下文,我正在 intelliJ 中开发一个简单的 spring 项目,以在 Payara 5.0 应用程序服务器上使用DCEVM [ 8u181 build 2 ] 以及兼容的 JDK [ 8u181 ] 使用HotswapAgent对其进行配置。
请在接下来的几段代码和我对正在发生的事情的合理解释中容忍我,这不是关于 Spring MVC 语法或它正在工作的问题。
这是我在 Hotswapping [不是内置在 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 Annotation 和函数调用,这给了我一个错误:
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
我调试了应用程序,发现当AnnotationParser从常量池解析 Spring Controller 类的注释时引发了 IllegalArgumentException,并且成员(其中一个注释是注释的“类型”)不正确取自类的常量池。
因此,据我所知,热部署没有正确完成(即使 HotswapAgent 说它已经在 Payara 服务器上重新加载了类)或者 JVM 通信或 JDK 有问题,我这样说是因为当我做相反的事情时是注释掉自动装配然后热部署然后运行,所以我得到一个空指针异常。
注意:仅用于补充信息
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.NullPointerException
如果有人需要更多信息或代码或登录,那么我很乐意澄清。谢谢大家的时间。