[英]NPE in ResourceProcessorHandlerMethodReturnValueHandler when registering Resource Processor
我创建了一个自定义存储库,并希望它按照Spring-restbucks示例在Spring Data Rest存储库中注册。
@RestController
public class BuildingController implements ResourceProcessor<RepositoryLinksResource> {
public static final String PAGES_REL = "pages";
@Autowired(required=true)
public BuildingController(BuildingRepository repository) {
Assert.notNull(repository);
this.repository = repository;
}
private final BuildingRepository repository;
当我将其与应用程序的其余部分一起部署时,我在ResourceProcessorHandlerMethodReturnValueHandler ctor中获得NPE。 在调试过程中,我注意到我拥有的所有其他处理器均为regualr Java对象,而只有BuildingController的一个为com.sun.proxy。$ Proxy ...因此,在JDK Proxy对象上强制转换为Class时存在问题。
这是发生NPE的代码的ResourceProcessorHandlerMethodReturnValueHandler中的行:
TypeInformation<?> componentType = from(processor.getClass()).getSuperTypeInformation(ResourceProcessor.class)
.getComponentType();
Class<?> rawType = componentType.getType();
我的问题是如何避免NPE?
需要注意的另一件事是,由于我在仅支持Servlet 2.5的WebLogic服务器上运行Application,因此我尝试使用xml和Java配置Spring。 这是我的配置摘录。 我想我在这里做错了什么:
我的web.xml
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/spring/root-context.xml
/WEB-INF/spring/spring-security.xml
/WEB-INF/spring/appServlet/servlet-context.xml
</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
servlet-context.xml
<context:component-scan base-package="com.my.app, org.springframework.security"/>
然后我创建了Java配置
@Configuration
@ComponentScan( "com.my.app.platform" )
@EnableWebMvc
@EnableHypermediaSupport( type = EnableHypermediaSupport.HypermediaType.HAL )
public class WebMvcConfiguration extends RepositoryRestMvcConfiguration
{
我找到了根本原因。
在servlet-contect.xml中,我也配置了aop
<aop:aspectj-autoproxy >
<aop:include name="loggingAspect"/>
</aop:aspectj-autoproxy>
因此,当我删除它时,一切都很好。 我还尝试添加proxy-target-class =“ true”强制CGLIB,但是然后我在同一位置出现了堆栈溢出异常???
不确定如何将AOP与SDR处理器结合起来吗? 有任何想法吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.