前两节中简单的介绍了一下基本的JAX-WS API的使用,这一节更进一步的介绍一些其他的内容
一、wsimport工具的使用
在第二节中(http://liugang594.iteye.com/blog/1343608),可以看到要手动创建一个client端进行一次正确的调用,需要关注的东西还是挺多的,尤其是定义一个符合格式的方法定义在参数相当复杂的情况下是相当不容易的。
这里JDK中提供了一个 wsimport 的工具,路径为 “JDK_PATH/bin”,可以相当方便的用来创建相应wsdl的Service类文件和Port类文件。
要使用wsimport,命令行如下:
wsimport -keep http://localhost:9999/ws/hello?wsdl
然后就会根据这个wsdl生成几个相应的类文件,例如使用第一节的例子会生成8个类文件
其中主要的是一个Service类 CalculatorImplService.java 和 一个EndpointInterface类 Calculator。
有了这些类以后,就可以很简单的实现Client端了,例如:
CalculatorImplService service = new CalculatorImplService(); Calculator calculator = service.getPortName(); System.out.println(calculator.add(1, 2));
如此方便,不能自己。
二、查看来往的Soap消息
由于所有的消息都是通过类的方法被Java在后台封装了,所以一大不利处就是没法查看具体发送的Soap消息和返回的结果。
所以需要一个工具用来查看与特定的Server和Port上消息的交互。有一大堆工具可以做这个,这里我介绍一下Eclipse里的TCP/IP Monitor工具如何来做。
打开 "Window->Preferences->Run/Debug->TCP/IP Monitor"菜单就可以看到TCP/IP Monitor的配置页了,如下。(如果你的eclipse里没有这一项,那可能是你的版本比较低,建议更新一个版本试试,我的版本是3.6.2)
点击“add”按钮,就可以新建一个Monitor,配置说明如下:
定义完以后,选中这个配置,点击"start",监视器即起用。
然后通过"Window->Show View->Other->Debug->TCP/IP Monitor",打开监视视图:
即可。
例如我有一个wsdl的定义地址为:http://localhost:8086/calculator?wsdl
本来我的Client端的实现代码应该是:
URL url = new URL("http://localhost:8086/calculator?wsdl"); QName qName = new QName("http://www.liulutu.com/calculator/", "CalculatorImplService"); Service service = Service.create(url, qName); Calculator port = service.getPort(Calculator.class); System.out.println(port.add(1, 2));
一旦我使用了诸如上面的监视器,并且想监视这个WebService的请求成响应,那么这里url的端口就需要由8086改成8087:
URL url = new URL("http://localhost:8087/calculator?wsdl"); QName qName = new QName("http://www.liulutu.com/calculator/", "CalculatorImplService"); Service service = Service.create(url, qName); Calculator port = service.getPort(Calculator.class); System.out.println(port.add(1, 2));
通过监视器来进行中间的转发,即可观察到来往的消息交互: