周末闲来无事,在家中复习了一下JDK6下开发WebService的知识,为了加强印象,特此记录。
一、
样例
开发环境
从
Java6
开始,
JDK
中已经支持用
Java
开发
WebService
应用了,不必选用第三方包。
软件及其版本
|
JDK1.6.0_25
|
Eclipse3.4.2 JavaEE
版
|
二、
样例工程结构
(1)服务端com.ws.server
(手工编写)
(2)
客户端
com.ws.client
(自动生成)
(3)
客户端调用
com.ws.client.test
(手工编写)。
三
、
样例开发过程
1、新建Dynamic Web Project
2、编写服务代码
package com.ws.server; import javax.jws.WebService; @WebService public class HelloService { public String sayHello(String username) { return "hello," + username + "! This is HelloService!"; } }
3、发布服务,在本例中使用Servlet发布服务
package com.ws.server; import java.io.IOException; import java.io.Writer; import javax.servlet.GenericServlet; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.xml.ws.Endpoint; public class HelloServicePublisher extends GenericServlet { @Override public void init(ServletConfig config) throws ServletException { super.init(config); System.out .println("准备启动WebService-->http://192.168.1.103:8088/WS_Java6/HelloService"); // 发布一个WebService Endpoint.publish("http://192.168.1.103:8088/WS_Java6/HelloService", new HelloService()); System.out .println("成功启动WebService-->http://192.168.1.103:8088/WS_Java6/HelloService"); } public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException { response.setCharacterEncoding("GBK"); Writer wr = response.getWriter(); wr .write("<a href='http://192.168.1.103:8088/WS_Java6/HelloService?WSDL'>点击访问WSDL</a>"); wr.close(); } }
4、生成客户端
Java6
提供了生成
WebService
客户端代码的工具wsimport.exe,只需在命令行输入一句简单的命令就可以生成客户端代码。需要
注意的是,在生成客户端前前需要先启动服务端。如果已经在启动,就不需要重新启动。
-p参数指定生成的代码所要放置的包
在生成的客户端中有一个java文件的名字是由服务端的类名加上一个Service组成的,这个xxxService我们可以把它看做是
WebService
的一个代理类,在客户端我们通过这个代理类来调用服务。
5、编写客户端调用服务的代码
package com.ws.client.test; import com.ws.client.HelloService; import com.ws.client.HelloServiceService; public class ClientTest { public static void main(String[] args) { // 创建一个客户端服务对象 HelloService helloService = new HelloServiceService() .getHelloServicePort(); // 调用服务方法,并得到方法返回值 String returnContent = helloService.sayHello("张三"); // 打印服务的返回值 System.out.println(returnContent); } }
6、运行测试代码