interface not allow null! 異常" type="hidden"/>

IDEA 中調試 dubbo 出現 interface not allow null! 異常


背景 

使用 idea 對 dubbo 消費者源碼進行 debug 時,出現了 <dubbo:reference interface="" /> interface not allow null! 異常,而如果不 debug 運行,就不會出現異常,具體如下:

[15/04/21 05:19:22:022 GMT+08:00] main  WARN config.AbstractConfig:  [DUBBO] null, dubbo version: 2.6.3, current host: 169.254.11.29
java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.alibaba.dubbo.config.AbstractConfig.toString(AbstractConfig.java:466)
    at com.intellij.rt.debugger.BatchEvaluatorServer.evaluate(BatchEvaluatorServer.java:23)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1153)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1103)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:312)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:308)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:742)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:867)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:543)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:93)
    at com.shulipeng.dubbo.samples.echo.EchoConsumer.main(EchoConsumer.java:16)
Caused by: java.lang.IllegalStateException: <dubbo:reference interface="" /> interface not allow null!
    at com.alibaba.dubbo.config.ReferenceConfig.init(ReferenceConfig.java:191)
    at com.alibaba.dubbo.config.ReferenceConfig.get(ReferenceConfig.java:163)
    at com.alibaba.dubbo.config.spring.ReferenceBean.getObject(ReferenceBean.java:66)

 

原因

從上面的異常信息可以發現異常棧中有一個這個類 at com.intellij.rt.debugger.BatchEvaluatorServer.evaluate(BatchEvaluatorServer.java:23),很明顯可以看出來這是 idea 的jar包的方法。

原因就是 idea 在 debug 的時候,當 debug 到某一個對象時,會調用對象的 toString() 方法,用來在debug界面顯示對象信息。

大多數情況下是沒有任何問題的,但是對於重寫了 toString() 方法的類,隨意的調用 toString 方法就可能導致異常。

我這里就是因為 dubbo 的AbstractConfig類,它重寫了 toString() 方法,進而會導致其子類 ReferenceConfig 的 initialized 屬性錯誤的被修改為true,然后就會出現這種異常。

因為 AbstractConfig 的 toString() 方法中如果類中方法名前綴是 get 時,會調用此方法來獲取對應的參數值,而正好 ReferenceConfig 的初始化對象的方法就是在 get() 方法中的,進而會將 initialized 設置為 true,此時 ReferenceConfig  interfaceName 等參數還沒有被設置,所以就會拋出異常。

 

解決方法

在配置中關閉 idea 在 debug 的時候調用 toString() 方法:

 

 

 

參考於: https://blog.csdn.net/lkforce/article/details/90479650

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM