JAX-WS 学习三:进阶一(wsimport和TCP/IP monitor)

前两节中简单的介绍了一下基本的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个类文件

JAX-WS 学习三:进阶一(wsimport和TCP/IP monitor)_第1张图片

 

其中主要的是一个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)

JAX-WS 学习三:进阶一(wsimport和TCP/IP monitor)_第2张图片

 

点击“add”按钮,就可以新建一个Monitor,配置说明如下:

  1. Local monitoring port:定义用来中转的本地端口。例如你本来想访问的时候本地的8000端口,你在此处定义的是8001端口,那你的访问端口也需要改成8001,然后由monitor把你的请求进行转发。
  2. Host name:你要监视的与本地通信的主机地址
  3. Port:你要监视的与本地通信的主机端口
  4. Type:通信方式,有HTTP和TCP/IP两个选项
  5. Timeout:超时设置

定义完以后,选中这个配置,点击"start",监视器即起用。

 

然后通过"Window->Show View->Other->Debug->TCP/IP Monitor",打开监视视图:

JAX-WS 学习三:进阶一(wsimport和TCP/IP monitor)_第3张图片

 

即可。

 

例如我有一个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));

 通过监视器来进行中间的转发,即可观察到来往的消息交互:

JAX-WS 学习三:进阶一(wsimport和TCP/IP monitor)_第4张图片

你可能感兴趣的:(Monitor)