2016-06-01 36 views
0

我有WebService。 我已經編寫了自己的異常解析器,通過擴展SoapFaultMappingExceptionResolver。AbstractEndpointExceptionResolver,cglib代理,空字段

每當我試圖拋出異常,我得到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.spring[email protected]19853} 
CGLIB$CALLBACK_1 = {org.springf[email protected]19854} 

如果我的回調,targetSource-往裏走目標,我可以看到我的解析器與初始化屬性。

那麼我該如何解決這個問題?

回答

0

那麼,我已經找到了一個小的解決方法。我根本不想禁用代理,因爲在某些情況下我需要它。 所以,基本上,你可以在你的配置:

<aop:aspectj-autoproxy proxy-target-class="true" /> 

爲了使全球代理。 並修復我的異常解析器,我已經把它添加到例外列表如下:

<aop:aspectj-autoproxy proxy-target-class="false"> 
    <aop:include name="myExceptionResolver" /> 
</aop:aspectj-autoproxy> 
+0

事實上,這並沒有幫助我:(我認爲規則將只爲一個bean的應用我指定,當實際上,所有代理項目都被禁用,仍在尋找解決方案。 – Aleksei