我有WebService。通过扩展SoapFaultMappingExceptionResolver,我编写了自己的异常解析器。
每当我尝试抛出异常时,我都会得到NPE:
java.lang.NullPointerException
at org.springframework.ws.server.endpoint.AbstractEndpointExceptionResolver.resolveException(AbstractEndpointExceptionResolver.java:104)这是在网上发生的:
if (logger.isDebugEnabled()) {
logger.debug("Resolving exception from endpoint [" + endpoint + "]: " + ex);
}因为记录器为空。据我在调试过程中所理解,这是因为我的扩展ExceptionResolver正在被CGLIB代理。CGLIB代理里面有我的解析器的副本,但是它也包含对我实际的(初始化的)解析器的引用,它看起来像这样:
CGLIB$CALLBACK_0 = {org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor@19853}
CGLIB$CALLBACK_1 = {org.springframework.aop.framework.CglibAopProxy$StaticUnadvisedInterceptor@19854} 如果我进入这些回调targetSource-target,我可以看到带有初始化属性的解析器。
那么我该如何解决这个问题呢?
发布于 2016-06-01 20:18:29
好吧,我找到了解决这个问题的小方法。我根本不想禁用代理,因为在某些情况下我需要它。所以,基本上,你可以在你的配置中:
<aop:aspectj-autoproxy proxy-target-class="true" />启用全局代理。为了修复我的异常解析器,我将其添加到异常列表中,如下所示:
<aop:aspectj-autoproxy proxy-target-class="false">
<aop:include name="myExceptionResolver" />
</aop:aspectj-autoproxy>https://stackoverflow.com/questions/37567214
复制相似问题