Hprose for Java客户端(一)
同步调用
Hprose客户端在与服务器通讯时,分同步调用和异步调用两种方式。同步调用的概念和用法相对简单一些,所有我们先来介绍同步调用方式。
在同步调用方式下,如果服务器执行出错,或者通讯过程中出现问题(例如连接中断,或者调用的服务器不存在等),则客户端会抛出异常。
直接使用HproseHttpClient上的invoke方法或者采用代理接口方式都可以进行同步调用,但是只有通过invoke方法才能进行引用参数传递。
在下面的例子中,我们以调用前一章中第一节第一小节最后发布的服务为例来进行说明讲解。
通过invoke方法进行同步调用
通过invoke方法调用是最直接、最基本的方式,所以我们先来介绍它。
带名称空间(别名前缀)方法
先来看调用最简单的例子:
package hprose.exam;import hprose.client.HproseHttpClient;import java.io.IOException;import java.util.List;public class ClientExam4 { public static void main(String[] args) throws IOException { HproseHttpClient client = new HproseHttpClient(); client.useService("http://localhost:8084/HproseExamServer/Methods"); List<User> userList = (List<User>)client.invoke("ex2_getUserList"); for (User user : userList) { System.out.printf("name: %s, ", user.getName()); System.out.printf("age: %d, ", user.getAge()); System.out.printf("sex: %s, ", user.getSex()); System.out.printf("birthday: %s, ", user.getBirthday()); System.out.printf("married: %s.", user.isMarried()); System.out.println(); } System.out.println(); User[] users = (User[])client.invoke("ex2_getUserList", User[].class); for (User user : users) { System.out.printf("name: %s, ", user.getName()); System.out.printf("age: %d, ", user.getAge()); System.out.printf("sex: %s, ", user.getSex()); System.out.printf("birthday: %s, ", user.getBirthday()); System.out.printf("married: %s.", user.isMarried()); System.out.println(); } }}