• 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

    -- 整理于网络,加上自己的理解,大家一起学习,进步就好
  • 相关阅读:
    手下有个人总是用一些小的缺点来否认你的决定的优点,如何解决这个问题? (转载)
    初等代数
    全民上网到全民织网 Web 2.0掀起人民战争
    这个sql语句:列出各门课程成绩最好的两位学生?
    在XML中发送二进制数据
    .NetFramework 数据保存与传输之序列化对象
    Duwamish学习之构架篇错误捕获
    在.NET环境中使用单元测试工具NUnit
    [翻译]XNA外文博客文章精选之fourteen
    [翻译]XNA外文博客文章精选之nine
  • 原文地址:https://www.cnblogs.com/shulipeng/p/14663775.html
Copyright © 2020-2023  润新知