用程序的服务器只能与也支持 它们的客户机交互,所以这是一个关键步骤。
可以引用 servlet 引擎中的 JAR(如果在同一台机器上运行客户机代码和 servlet 引擎),也可以 把这两个 JAR 重新下载或复制到客户机机器中,并把它们添加到类路径中。清单 20 给出所需的代码:
清单 20. 在类路径中添加邮件和激活 JAR
export JAVA_BASE=/usr/local/java
export JAVA_HOME=/Library/Java/Home
export XALAN_HOME=$JAVA_BASE/xalan-j_2_7_1
export AXIS_HOME=$JAVA_BASE/axis-1_4
export TOMCAT_HOME=$JAVA_BASE/apache-tomcat-6.0.16
export EDITOR=vi
export CVS_RSH=ssh
export PS1="[''whoami'':\w] "
export CLASSPATH=$XALAN_HOME/xalan.jar:
$XALAN_HOME/xml-apis.jar:
$XALAN_HOME/xercesImpl.jar:
$XALAN_HOME/xalan.jar:
$XALAN_HOME/xsltc.jar:
$XALAN_HOME/serializer.jar:
$AXIS_HOME/lib/axis.jar:
$AXIS_HOME/lib/jaxrpc.jar:
$AXIS_HOME/lib/commons-logging-1.0.4.jar:
$AXIS_HOME/lib/commons-discovery-0.2.jar:
$AXIS_HOME/lib/saaj.jar:
$AXIS_HOME/lib/wsdl4j-1.5.1.jar:
$TOMCAT_HOME/lib/activation.jar:
$TOMCAT_HOME/lib/mail.jar:
.
一定要确保应用修改,或对 .profile 执行 source,或重新启动终端应用程序。可以用 echo $CLASSPATH 命令检查类路径变量。应该会看到刚才添加的所有 JAR。
构建客户机类
现在可以开始构建连接 Web 服务的类。首先编写一个简单的骨架;它应该是一个 Java 类,它不需要 实现特定的接口或扩展另一个类。实际上,客户机类中没有与 RPC 相关的内容。
清单 21 给出一个简单的 BookSearcherClient 骨架。这个类通过命令行获取一个关键字,然后调用 Web 服务中的方法。当然,这些方法目前仅仅是占位方法,稍后会编写它们的逻辑。
清单 21. Web 服务客户机类骨架
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import javax.xml.namespace.QName;
import javax.xml.rpc.ServiceException;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
public class BookSearcherClient {
public static final String SERVICE_URL =
"http://localhost:8080/axis/BookSearcher.jws";
public BookSearcherClient() { }
public Object[] search(String keyword) throws IOException {
// placeholder
return new Object[];
}
public static void main(String[] args) throws IOException {
if (args.length != 1) {
System.err.println("Usage: java BookSearcherClient [search keyword]");
return;
}
String keyword = args[0];
BookSearcherClient client = new BookSearcherClient();
Object[] results = client.search(keyword);
System.out.println("Returned books for keyword ''" + keyword + "'':");
for (int i = 0; i<results.length; i++) {
System.out.println(" " + results[i]);
}
}
}
用JAX-RPC构建RPC服务和客户机:使用Java API构建基于RPC的Web服务(二)( |