开发服务器端
编码开发:
在开发过程中需要用到以下几个注解:
@WebService(用来定义SEI和SEI实现类)
@WebMethod(用来定义SEI中的所有方法)
(1)定义SEI (即定义接口)
@WebService
public interface IHelloWs {
@WebMethod
public String sayHello(String name);
}
(2)定义SEI实现类
@WebService
public class HelloWsImpl implements IHelloWs {
@Override
public String sayHello(String name) {
System.out.println("服务器端 --- sayHello()");
return "webservice server : "+name;
}
}
发布webservice
使用Endpoint(终端,发布webservice)
/**
*
* @ClassName: ServerTest
* @Description: 发布webservice
*/
public class ServerTest {
public static void main(String[] args) {
//定义发布地址(供客户端访问使用)
String address = "http://localhost:8899/JDKWebService_server/helloWs";
Endpoint.publish(address, new HelloWsImpl());
System.out.println("发布成功");
}
}
服务器端的项目架构:
开发客户端
上面的步骤是发布了一个webservice,现在我们来访问一下该webservice对应的wsdl文档,在浏览器上输入刚才在服务器端设定的address地址:
接下来,客户端如何来访问服务器上定义的SEI进行通信交互呢?
借助JDK的 wsimport 工具生成客户端代码,命令如下:
wsimport -keep url(wsdl的文件路径)
操作步骤:
(0)创建一个客户端项目:JDKWebService_client
(1)cmd去到项目的src目录:
(2)使用
wsimport -keep url(wsdl的文件路径) 来生成客户端代码
刷新客户端项目,生成的代码结构如下:
生成代码后如何使用?
在wsdl文档里有个
<
service
name>标签,该标签指定的值即为工厂类;它下面有子标签<port >,其中name值对应的就是生产具体类的方法,binding对应的是生产哪种类型
上图截取本次测试的wsdl文档service标签片段,通过该标签我们知道,客户端生成代码后,会有一个名为HelloWsImplService的工厂类,该类有一个HelloWsImplPort方法,该方法返回的是HelloWsImpl类型的对象(该对象就是我们在服务器端定义的SEI接口实现类)。客户端测试代码如下: