发布一个'a+b'与'a-b'的服务。
服务部分:
package com.ljfbest.service; import javax.jws.WebService; @WebService public interface IMyService { public int add(int a,int b); public int minus(int a,int b); } package com.ljfbest.service; /* 服务接口的实现 */ import javax.jws.WebService; @WebService(endpointInterface="com.ljfbest.service.IMyService") public class MyServiceImpl implements IMyService { @Override public int add(int a, int b) { System.out.println(a+"+"+b+"="+(a+b)); return a+b; } @Override public int minus(int a, int b) { System.out.println(a+"-"+b+"="+(a-b)); return a-b; } }
发布服务:
import javax.xml.ws.Endpoint; public class MyServer { public static void main(String[] args) { String address="http://localhost:8089/na"; Endpoint.publish(address, new MyServiceImpl());//这样就可以发布了,很简单吧 } }
简单的测试一下该服务:
URL url=new URL("http://localhost:8089/na?wsdl");
QName sname=new QName("http://service.ljfbest.com/", "MyServiceImplService");
Service service=Service.create( url, sname);
IMyService ms=service.getPort(IMyService.class);
System.out.println(ms.add(2, 3));
服务发布后,在地址栏输入http://localhost:8089/na?wsdl,就可以查看此服务的详细信息,不要忘了在address后还有“?wsdl”,而有了此wsdl客户端就可以调用此服务了。
以上是服务端的项目,接下来客户端的项目,注意下面是另起一个项目。需要用到wsimport
wsimport也是在JDK的bin目录下的一个exe文件(Windows版),主要功能是根据服务端发布的wsdl文件生成客户端存根及框架,负责 与Web Service 服务器通信,并再将其封装成实例,客户端可以直接使用就像使用本地实例一样。对Java而言,wsimport帮助程序员生成调用web service所需要的客户端类文件.java和.class。要提醒指出的是,wsimport可以用于非Java的服务器端,如:服务器端也许是C# 编写的web service,通过wsimport则生成Java的客户端实现。
在写客户端时,需要用到wsimport,在JDK的bin目录下的一个exe文件(Windows版),主要功能是根据服务端发布的wsdl文件生成客户端存根及框架,负责Web Service 服务器通信,并在将其封装成实例,客户端可以直接使用,就像使用本地实例一样。对Java而言,wsimport帮助程序员生存调用Web Service所需要的客户端类文件.java和.class。要提醒指出的是,wsimport可以用于非Java的服务器端。执行下面命令:
wsimport -d e:/ws -keep -verbose http://localhost:8089/na?wsdl
-d: 生成客户端执行类的文件的存放目录
-verbose: 查看生成的详细信息
-keep:生成源代码
把e:/ws下的com文件夹拷到项目中就可以使用服务了,就可直接调用服务的方法了,下图是在客户端生成的代码结构图:
MyServiceImplService msis=new MyServiceImplService();
IMyService service=msis.getMyServiceImplPort();
service.add(4, 1);