java,某行代码不执行,也不报错。JaxWsDynamicClientFactory.newInstance();

写cxf接口的客户端调用的时候,:

java,某行代码不执行,也不报错。JaxWsDynamicClientFactory.newInstance();_第1张图片

clientFactory = JaxWsDynamicClientFactory.newInstance();这一句,不执行。

即不输出,System.out.println("##################clientFactory");也不报错。

很奇怪,不知道什么原因。

把JaxWsDynamicClientFactory的源码放入工程中,发现根本不执行newInstance()方法。

去网上找,还真找到有人有相同的问题:

http://pangsir.iteye.com/blog/1492515

java,某行代码不执行,也不报错。JaxWsDynamicClientFactory.newInstance();_第2张图片

最后,找大牛,想办法捕获到了异常。

捕获异常方式:

在debug模式下,设置断点,在某段代码上执行 execute(注意:①一定要在这一行代码上设置断点 ②并执行到这一行的时候,满足这两个条件时,再右击execute才行,才能正常的抛出异常,不然可能也不抛出异常):


java,某行代码不执行,也不报错。JaxWsDynamicClientFactory.newInstance();_第3张图片

就会报错:

java,某行代码不执行,也不报错。JaxWsDynamicClientFactory.newInstance();_第4张图片

然后通过提示的错误,去找解决问题就行了。

缺少包,找不到XmlSchemaSerializer$XmlSchemaSerializerException.class,引入所在包:

java,某行代码不执行,也不报错。JaxWsDynamicClientFactory.newInstance();_第5张图片

引入了这个包之后,


=====总结:

JaxWsDynamicClientFactory.newInstance();这个即不执行,也不报错,是什么原因?

原因是,其实JaxWsDynamicClientFactory.newInstance();这句话执行了,但是报异常了,只是系统没有捕获到而已,因为缺少捕获异常的包。

这里就不得不说一下(或者说吐槽一下)java的报错机制,即在运行的时候(即编译的时候没问题,运行的时候有问题):

String a=null;

a.toString();

如会报null pointer等,这就是java的报错机制。

java,某行代码不执行,也不报错。JaxWsDynamicClientFactory.newInstance();_第6张图片

这里之所以会抛出异常是因为,String这个封装类的toString()函数里写了异常捕获的代码(即try catch)

可能的实现方式如下

class String{

public String toString(Object ob){

try {
String result=ob.zhuanhuanchengString();//将object转换成String
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}

    return result;

}

这样如果ob是null就会报空指针异常了。

所以这里是我理解错了,该吐槽的不是java的报错机制,机制没有问题,异常的捕获都是程序员自己写的,所以归根究底,是程序员自身的异常捕获机制。



=====总结,在某行代码不执行,也不报错的时候,怎么调试?

在某行代码不执行,也不报错的时候,怎么调试?

1给他加上异常,即try catch,异常类型要用Exception,因为你不清楚是什么异常(RuntimeException、RemoteException等)。

try {
clientFactory = JaxWsDynamicClientFactory.newInstance();
} catch (Exception e1) {
System.out.println(e1.toString());
// TODO Auto-generated catch block
e1.printStackTrace();
}

如果还是不报异常。请看步骤2

2在debug模式下,右击“execute”这行代码,看报什么错。


----------总结:

有这种疑惑,不知所措的原因是,class被封装在jar中,即class中,没办法去逐步去看源代码。

封装,即将class文件放入jar,供java文件调用,是java的特点,是java的优势。

同时,却也是java的劣势,封装不利于深入调试、debug,即没办法深入读每一个源码。





你可能感兴趣的:(java,某行代码不执行,也不报错。JaxWsDynamicClientFactory.newInstance();)