WebService作为一种跨平台的技术,应用相当广泛,具体介绍请参照百度百科,这里不做详细介绍
java版的实现
服务端:
定义接口,提供给远程调用者,接口上添加@WebService(),若对所有方法均对外可访问,则不需要添加@WebMethod,如果仅仅一部分方法客户端可调用,则在对应的方法上添加@WebMethod注解即可
import javax.jws.WebParam; import javax.jws.WebResult; import javax.jws.WebService; @WebService() public interface MyService { /** * WebResult通过webservice浏览器访问时结果输出控制,name为结果显示名称 * WebParam对于参数输入时的显示名称 */ @WebResult(name="addResult") public int add(@WebParam(name="a")int a,@WebParam(name="b")int b); @WebResult(name="minusResult") public int minus(@WebParam(name="aa")int a,@WebParam(name="ab")int b); @WebResult(name="checkUser") public User login(@WebParam(name="username")String username,@WebParam(name="password")String password); }
服务端接口实现类
import javax.jws.WebService; @WebService(endpointInterface="对应MyService全类名") public class MyServiceImpl implements MyService { @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; } @Override public User login(String username, String password) { System.out.println(username + " " + password); User user = new User(); user.setId(123); user.setUsername(username); user.setPassword(password); return user; } }
User.java
public class User { private int id; private String username; private String password; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
发布自己的webservice
import javax.xml.ws.Endpoint; public class MyServer { public static void main(String[] args) { String address = "http://localhost:9999/ms"; Endpoint.publish(address, new MyServiceImpl()); } }
此时运行后在浏览器输入http://localhost:9999/ms?wsdl就可看到对应的wsdl文档
在eclipse的webservice 浏览窗口便可访问,注意,是wsdl模式
客户端:
import java.net.URL; import javax.xml.namespace.QName; import javax.xml.ws.Service; public class Test { public static void main(String[] args) { try { //创建访问wsdl服务地址的url URL url = new URL("http://localhost:9999/ms?wsdl"); //通过Qname指明服务的具体信息 QName sname = new QName("http://对应的服务端的包名,倒着写/", "MyServiceImplService"); //创建服务 Service service = Service.create(url,sname); //实现接口 IMyService ms = service.getPort(IMyService.class); System.out.println(ms.add(12,33)); //以上服务有问题,依然依赖于IMyServie接口 } catch (Exception e) { e.printStackTrace(); } } }
客户端也可利用jdk的工具生成,在资源管理器中src目录下输入wsimport -keep http://localhost:9999/ms?wsdl
public class Client { public static void main(String[] args) { MyServiceImplService factory = new MyServiceImplService(); IMyService service = factory.getMyServiceImplPort(); System.out.println(service.add(123, 123)); } }