此博文对应的WebService服务端为使用JDK发布一个简单WebService 。现在我们就要使用这个WebService。
首先要使用JDK自带的命令wsimport,它可以根据wsdl文档生成客户端调用代码的工具.无论服务器端的WebService是用什么语言写的,都将在客户端生成Java代码.服务器端用什么写的并不重要.wsimport.exe位于JAVA_HOME\bin目录下.
常用参数为:
-d<目录> - 将生成.class文件。默认参数。
-s<目录> - 将生成.java文件。
-p<生成的新包名> -将生成的类,放于指定的包下。
(wsdlurl) - http://server:port/service?wsdl,必须的参数。
示例:控制台中C:\Documents and Settings\Administrator>wsimport -s F:\ -p com.client.jdk.wsimporthttp://localhost:1111/hello?wsdl生成的文件如下:
注意:-s不能分开,-s后面是要存储的位置,用于指定源代码生成的目录 。你可以将生成的客户端调用代码工具打包成jar,也可以不打包直接使用,将它复制到你客户端程序中使用即可。
创建一个WSClient的工程,将刚刚生成的客户端调用代码的工具复制到工程里,如图:
编写客户端调用自己写的服务类 Client.java
package com.client.jdk;
import com.client.jdk.wsimport.MyHelloService;
import com.client.jdk.wsimport.MyHelloServiceService;
/**
* @author jackphang
* @date 2013-4-11
* @description 根据wsimport命令生成客户端代码来调用WebService服务 F:\>wsimport -s . -p
* com.client.jdk.wsimport
* http://localhost:1111/hello?wsdl会生成两种文件.class和.java 。
* 而在C:\Documents and Settings\Administrator>wsimport -s F:\ -p
* com.client.jdk.wsimpo rt
* http://localhost:1111/hello?wsdl,只会生成.java的文件
*/
public class Client {
/**
* @param args
*/
public static void main(String[] args) {
// 获取WebService提供的服务
MyHelloServiceService service = new MyHelloServiceService();
// 获得自己提供的服务
MyHelloService helloService = service.getMyHelloService();
// 调用服务中的方法
String str = helloService.mySayHello("你大爷的", 1);
System.out.println("服务器返回:" + str);
}
}
前提是你的服务端必须启动才能调用成功,或者会抛出如下异常
Exception in thread "main" javax.xml.ws.WebServiceException: Failed to access the WSDL at:http://localhost:1111/hello?wsdl. It failed with:
Connection refused: connect.
我们生成的客户端代码工具已经封装好了对服务器端服务的访问,底层是通过Socket访问的,所以我们编写很小的代码就能访问网络中的服务。