JAX—RPC服务客户端的一般模式
JAX—RPC的客户端编程模式有以下的三种
Ø Static stub(静态的客户端存根调用)
Ø Dynamic proxy (部分动态的代理调用)
Ø Dynamic invocation inte易做图ce (DII)(动态调用接口)
下面我们分别介绍这三种模式:
1. Static stub
首先通过映射转换将服务描述的WSDL文档生成客户端的Java存根
然后实例化服务的locator实例
通过loacator获得服务客户端的实例
用客户端实例去调用服务
下面是一个天气预报服务客户端调用的例子
package itso.test;
import java.io.*;
import java.util.*;
import itso.test.*;
public class WeatherForecastClient {
public static void main(String [] args) {
try{
WeatherForecastServiceLocator wsl = new WeatherForecastServiceLocator();
WeatherForecastService ws = (WeatherForecastService) wsl.getWeather();
String temperature = ws.getTemperature();
System.out.println(temperature);
System.out.println("WeatherForecastClient completed");
} catch (Exception e) {
e.printStackTrace();
}
}
}
2. Dynamic proxy
与Static stub 不同的是可以指定生成的客户端实例,如上面的天气预报客户端可改为:
import javax.xml.namespace.QName;
import java.io.*;
import java.util.*;
public class WeatherForecastDynamicProxyClient ...{
public static void main(String [] args)...{
try...{
WeatherForecastServiceLocator wsl = new WeatherForecastServiceLocator();
QName qn = new QName("http://www.somewhere.com", "WeatherForecast");
WeatherForecast ws = (WeatherForecast)
wsl.getPort(qn,WeatherForecast.class);
String temperature = ws.getTemperature();
System.out.println(temperature);
System.out.println("DynamicProxyJavaClient completed");
} catch (Exception e)...{
e.printStackTrace();
}
}
}
这样,当服务发生变化时,客户端也能跟着发生变化
3.
1. Dynamic invocation inte易做图ce
动态调用接口模式则可以根据服务的WSDL的变化而始客户端发生变化。
三者的比较可以总结成下面的表格:
补充:Jsp教程,Java基础