最近关注 WebService,尝试CXF的一个 Client 样例 时,修改一下,运行,总是报这个错:
Caused by: java.net.MalformedURLException: Invalid address. Endpoint address cannot be null.
……
本来想跳过它了,但是很简单的修改,如下
public static final QName SERVIVE_NAME = new QName( "http://ws.leegorous.net", "Hello"); public static final QName PORT_NAME = new QName( "http://ws.leegorous.net", "HelloPort"); public static void main(String[] args) { Service service = Service.create(SERVIVE_NAME); String endpointAddress = "http://localhost:9000/hello"; service.addPort(PORT_NAME, SOAPBinding.SOAP11HTTP_BINDING, endpointAddress); Hello srv = service.getPort(Hello.class); System.out.println(srv.sayHi("Leegorous")); }
感觉离真相很近,但怎么都搞不着的感觉真是糟糕~
于是开始调试,调试一下也不错,可以顺便大概了解下过程,但是越挖掘,越觉得奇怪。小说电视里,经常吹嘘当找不到方向时不妨回到原点,这个的原点就是我修改的部分。
很奇怪的发现样例里初始化QName的第一个参数是以”/”结尾的,我想不会吧。
一边质疑着自己,一边加上斜杠,运行测试,居然成功了!
public static final QName SERVIVE_NAME = new QName( "http://ws.leegorous.net/", "Hello"); public static final QName PORT_NAME = new QName( "http://ws.leegorous.net/", "HelloPort");
已经找到步向真相的入口了。或许是QName的问题,也可能是后面使用它的程序有问题,具体还有待解剖报告。
这个问题貌似不太值得一写。不过它使我想起昨晚发现的一起事件,某报文系统已经运行了数年,但居然还有比较低级的解析失败,而且最糟糕就是搜索过分依赖于那个出错的属性。而据我观察,好些系统问题都是有各种各样的“小”而且不太可能发生的失误而造成的,也正是大家都不是仔细收集和分析证据,而是先入为主的否决了其些可能性转而去思考所谓的更大可能性,而浪费了大量的时间。
不过有些先入为主的印象作用是我们不能左右的,就如现在人们在介绍我时依然是用类似于“一个Web界面高手”,甚至是“美工”,除了无奈,还能做什么呢?
难道跳出来大叫
“That’s so 2007”
!##$%^&*()~~