zoukankan      html  css  js  c++  java
  • IDEA 中调试 dubbo 出现 <dubbo:reference interface="" /> 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

    -- 整理于网络,加上自己的理解,大家一起学习,进步就好
  • 相关阅读:
    VMware虚拟机下网络配置模式
    2021考研规划(持续更新)
    20210326 名词解释及常用下载地址(持续更新)
    20210326学习笔记1---java及hadoop组件最新版本汇总
    20210326日记
    20210325一天总结--进步最大的一天
    20210325学习感悟--学习是开始几小时烦躁,越学习越上瘾;暴食看剧打游戏打飞机,最开始爽,时间越长越厌倦甚至感觉痛苦。
    20210326继续解决----20210325学习笔记2--运行MapReduce Jar(我为什么这样起标题,因为结构化数据才好搜索)
    20210325学习笔记1--解决了打包不生成jar文件的问题
    20210325日记--加油,相信只要基础够扎实熟练,就能找到转职成功。
  • 原文地址:https://www.cnblogs.com/shulipeng/p/14663775.html
Copyright © 2011-2022 走看看