下面这一节讲述了这些步骤:
生成stub
可以使用wscompile工具为客户端生成stub。除了生成stub,wscompile工具还为服务器生成tie。为了生成stub,请设置PATH到install_dir/share/bin目录。使用下面的语法运行该工具:
wscompile -gen:client -d build/client -classpath build/shared config.xml
关于wscompile工具的更多信息,请参见"wscompile工具"。
有两种方法可以生成stub。可以从服务终端定义或是WSDL文件生成stub。上面的Wscompile命令采用了服务终端定义来生成stub。
编写客户端代码
确定在类路径中添加了必要的jar文件。想要了解更多,请参见"配置客户端环境 "。
客户端执行了以下步骤:
1.获得接口stub的一个实例
2.设定stub的终端属性,从而指定web服务的服务终端。
3.调用方法。
本例使用服务终端定义生成stub。你可以利用JAX-RPC实现的客户端API javax.xml.rpc.Stub来提供配置信息。
以下代码示范了上面提到的步骤:
package hello;
import javax.xml.rpc.Stub;
public class HelloClient {
public static void main(String[] args) {
try {
HelloIF_Stub stub = (HelloIF_Stub)(newHelloWorld_Impl().getHelloIFPort());
stub._setProperty( javax.xml.rpc.Stub.ENDPOINT_ADDRESS_PROPERTY, args[0]);
System.out.println(stub.sayHello("Duke!"));
command-line }
catch (Exception ex) {
ex.printStackTrace();
}
}
}
在上面的代码示例中,HelloClient是调用HelloWorld服务中的sayHello方法的一个独立程序。它通过stub,一个充当远程服务代理的本地对象,进行调用。请注意在代码清单中名为HelloIF_Stub和HelloWorldImpl的类,它们由wscompile工具生成。HelloIF前缀与服务定义接口相吻合,HelloWorld前缀对应配置文件中指定的服务名称。HelloWorldImpl类是JAX-RPC规范中描述的服务的实现。客户端通过调用HelloWorldImpl 类的getHelloIF方法获得对stub的引用,HelloWorldImpl类是在运行wscompile工具的时候创建的。
stub._setProperty方法的args[0]参数是一个表示目标服务端口的URI。
编译客户端代码
注意
确定在编译客户端代码之前运行了wscompile和wsdeploy工具。客户端代码引用了wscompile工具的产物。
wscompile -gen:client -d build/client -classpath build/shared
要编译客户端,请切换到保存客户端代码的目录并输入以下命令:
asant compile
该命令编译Java源代码。
组装客户端类生成JAR文件
你可以使用asant工具组装客户端类生成JAR文件。Asant是一个命令行接口工具。请输入以下命令:
asant jar
该命令创建客户端jar文件。
运行客户端
使用asant工具运行客户端。输入以下命令:
asant run
asant的运行目标会执行以下命令:
java -classpath cpath client endpoint
cpath – 包括已经创建的客户端jar文件的类路径,也包括作为JAX-RPC实现的一部分的几个其他JAR文件。
注意
为了远程运行客户端,所有的JAR文件必须存在于远程客户端系统中。
endpoint- http://localhost:8080/jaxrpc-hello/jaxrpc/HelloIF
这个URL的jaxrpc-hello部分是实现了HelloWorld服务的servlet的上下文,它对应jaxrpc-hello.war文件的前缀。字符串jaxrpc对应sun-web.xml配置描述文件中<url-pattern> 元素的值。最后,HelloIF是在服务中定义的接口名称。
可以通过build.xml文件完成编译、组装、和部署任务,并且可以通过它运行客户端。绑定在Sun ONE应用服务器中的本例的build.xml文件位于:
install_dir/samples/webservices/jaxrpc/simple/src
使用动态调用接口创建客户端
使用动态调用接口(DLL),客户端可以调用服务或是远程过程。利用可以动态查找服务及其远程过程的服务代理,客户端能够在运行时发现服务或是过程的名称。javax.xml.rpc.Service封装了两类不需要任何生成代码的动态调用。本节讲述创建动态客户端的过程。