示例:假设客户端发送姓名,服务器端返回姓名的问候语
一、 服务器端开发
1. 首先定义服务器端方法的接口
package com.lzj.webservice.ws;
import javax.jws.WebMethod;
import javax.jws.WebService;
@WebService
public interface Webservice {
@WebMethod
public String sayHello(String name);
}
其中@WebService和@WebMethod注解是SEI用来处理服务器端响应客户端请求的接口注解。
@WebService标注的类为响应客户端的类,@WebMethod标注的方法为响应客户端请求的方法。
2. 定义服务器端方法的接口实现类
package com.lzj.webservice.ws;
import javax.jws.WebService;
@WebService
public class WebserviceImpl implements Webservice {
/*实现类上还要标注@WebService注解;方法上可以省略@WebMethod 注解,因为接口中已经标注过了*/
@Override
public String sayHello(String name) {
System.out.println("hello:" + name);
return "hello " + name;
}
}
3、发布服务
目前服务端的服务已经写好,准备开始发布服务
package com.lzj.webservice.ws.test;
import javax.xml.ws.Endpoint;
import com.lzj.webservice.ws.WebserviceImpl;
public class WebservicePublish {
public static void main(String[] args) {
/*发布的address地址是随便定义的,但客户端要和此地址进行统一,否则获取不到服务 */
String address = "http://localhost:8989/Webservice-server/webservice";
Endpoint.publish(address, new WebserviceImpl());
System.out.println("发布webservice成功");
}
}
二、 客户端开发
1. 根据jdk的wsimort.exe工具生成客户端代码
在cmd中进入要生成代码的目录,即客户端工程下的目录,通过 wsimport -keep url 进行生成客户端代码。其中url为WSDL的路径,即服务器端发布服务的地址加上”?wsdl”。在本案例中为: wsimport –keep http://localhost:8989/Webservice-server/webservice?wsdl
运行命令后,生成的客户端代码如下:
2、请求服务
根据客户端生成的代码,编写请求服务的代码
package com.lzj.webservice.ws.test;
import com.lzj.webservice.ws.WebserviceImpl;
import com.lzj.webservice.ws.WebserviceImplService;
public class WsClient {
public static void main(String[] args) {
WebserviceImplService factory = new WebserviceImplService();
WebserviceImpl ws = factory.getWebserviceImplPort();
String result = ws.sayHello("lzj");
System.out.println(result);
}
}
最后启动服务器端的发布服务WebservicePublish类中的main方法,启动服务。然后启动客户端的请求服务WsClient类中的main方法。客户端发送的“lzj”字符串,得到服务端响应“hello lzj”