Webservice客户端动态调用服务端功能方法

一、发布WebService服务
方式一:在服务端生成wsdl文件,下方客户端直接引用即可
 
  优点:针对要发布的方法生成一个wsdl文件即可,无需多余配置。
  缺点:每次服务端方法发生改变都需要重新生成相应的wsdl文件,不适合于功能需要经常变动的方法。
 
方式二:在服务端生成WebService的服务端代码,如需变动方法或功能直接进行相关的更改即可。
  
  优点:变更功能、方法等客户端可以动态的调用,服务端一旦变更客户端即可通过动态进行变更引用。
 
 
二、Client调用服务端接口 
 
1、 项目架构如下:
 
2、调用过程:
1)右键点击项目名称——>“NEW”——>“Other”——>输入WEB service client 如下
 
 
2)完成出现客户端配置窗口,如下
 
 
3)在“service definition”中输入webservice开放的服务地址, 注意地址末尾必须加上“?WSDL”
 
还需注意的是,创建的web service client 必须是3.0以下版本。
 
4)这个项目中除了 TestClient.java类是自己创建的,其他都是自动生成的。
 
5)TestClient.java类

public static void main(String[] args) {
try {
CalculateServiceServiceLocator service = new CalculateServiceServiceLocator();
java.net.URL url = new java.net.URL("http://localhost:8080/WebServiceTest/services/CalculateService?wsdl");
/* java.net.URL url = new java.net.URL("http://localhost:8080/WebServiceTest/services/CalculateService");*/
CalculateServiceSoapBindingStub cssbs = new CalculateServiceSoapBindingStub(url, service);
float f =cssbs.divide(5, 3);
System.out.println("相除:"+f);

f =cssbs.plus(3, 6);
System.out.println("相加:"+f);
} catch (RemoteException e) {
// TODO Auto-generated catch block20
e.printStackTrace();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}




/* 静态引用Webservice
* CalculateServiceProxy csp = new CalculateServiceProxy();
CalculateService cs = csp.getCalculateService();
try {
float f=csp.multiply(3, 3);
System.out.println("乘积:"+f);
f=cs.divide(5, 2);
System.out.println("相除:"+f);
} catch (RemoteException e) {
e.printStackTrace();
}*/
}
}

这里主要用到的是***Locator 和***Stub这两个类。

 

原文地址:https://www.cnblogs.com/cnblog-long/p/7151418.html