服务端接口开发
- 创建maven的JavaSE项目:ws-server
- 项目JDK需要是1.7以上版本,因为从1.7开始,JDK有WebService的默认实现。
- 创建服务接口:ServiceDemo
@WebServicepublic interface ServiceDemo{ public String say(String str);}
- 创建服务接口实现类:ServiceDemoImpl
@WebServicepublic class ServiceDemoImpl implements ServiceDemo{ public String say(String str) { return "Hello "+str; } }
- 创建发布服务的主类:Server,可以使用JDK默认实现的EndPoint实现,也可以使用CXF提供的WebService实现。
JDK实现:
public class Server { public static void main(String[] args) { System.out.println("web service start"); HelloWorld implementor = new ServiceDemoImpl (); String address = "http://192.168.1.103/serviceDemo"; Endpoint.publish(address, implementor); // JDK实现 System.out.println("web service started"); }}
- 使用CXF需要添加的jar:
org.apache.cxf cxf-core 3.1.5 org.apache.cxf cxf-rt-frontend-jaxws 3.1.5 org.apache.cxf cxf-rt-transports-http-jetty 3.1.5
CXF实现:
public class Server { public static void main(String[] args) { System.out.println("web service start"); HelloWorld implementor = new ServiceDemoImpl (); String address = "http://192.168.1.103/serviceDemo"; JaxWsServerFactoryBean factoryBean = new JaxWsServerFactoryBean(); factoryBean.setAddress(address); // 设置暴露地址 factoryBean.setServiceClass(HelloWorld.class); // 接口类 factoryBean.setServiceBean(implementor); // 设置实现类 factoryBean.create(); System.out.println("web service started"); 1}}
- 运行主类,发布服务:运行S1erver类
- 在浏览器中访问服务:在浏览器中输入: address?wsdl
客户端实现
配置CXF
- 解压到 D:\apache-cxf-3.1.5
- 在
bin
目录下有wsdl2java,wsdl2java.bat,要使用wsdl2java命令,需要配置path。打开环境变量配置,将路径:D:\apache-cxf-3.1.5\bin 加入。
开发webservice客户端
-
创建一个maven的JavaSE项目:ws-client
-
找到ws-client项目的本地路径:
-
在本地路径下按shift加鼠标右键,打开命令窗口,输入:wsdl2java address?wsdl。其中address是指服务端发布的webservice接口
-
上一步中需要注意的是:不能把服务器端关闭。
-
执行完之后,刷新ws-client,客户端的代码就生成了。
-
关键代码是ServiceDemoService.java
-
编写客户端主类:Client
public class Client { public static void main(String[] args) { ServiceDemoService service=new ServiceDemoService(); ServiceDemo serviceDemo=service.getServiceDemoPort(); System.out.println(serviceDemo.say("penelope")); }}
- 运行Client,打印出:hello penelope,说明成功调用了webservice服务器端的接口。