WEB开发网
开发学院软件开发Java 用 JAX-RPC 构建 RPC 服务和客户机(下) 阅读

用 JAX-RPC 构建 RPC 服务和客户机(下)

 2010-04-06 00:00:00 来源:WEB开发网   
核心提示: Object[]params=newObject[]{bookTitle,keywordList};然后,把这些参数传递给 invoke() 方法,用 JAX-RPC 构建 RPC 服务和客户机(下)(9),请记住,不需要 指定要调用的服务的操作名(方法名);这已经通过 setOperation

Object[] params = new Object[] { bookTitle, keywordList };

然后,把这些参数传递给 invoke() 方法。请记住,不需要 指定要调用的服务的操作名(方法名);这已经通过 setOperationName() 方法完成了。下面需要获得结果并处理结果。

invoke() 方法返回一个 Object,但是这仅仅是实际返回类型的包装器。对于返回字符串的方法,这个对象包装一个 String;只需把返回的对象转换为正确的类型:

Object[] results = (Object[])call.invoke(new Object[] { keyword });

在这个示例中,服务上的方法返回一个 List。但是,SOAP 并不理解列表,所以它默认使用一种更泛化的类型:对象数组。这增加了程序员的负担,因为程序员必须亲自处理这些泛型对象并确保类型安全。这也是泛型和参数化目前在 Web 服务中用处不大的原因之一;在把信息从客户机传递给服务器的过程中,会丧失类型安全性。

把这行代码放到 search() 方法中,见清单 24:

清单 24. 执行调用并返回结果

public Object[] search(String keyword) throws IOException { 
 try { 
  if (service == null) { 
   service = new Service(); 
  } 
  if (call == null) { 
   call = (Call)service.createCall(); 
  } 
  if (serviceUrl == null) { 
   serviceUrl = new URL(SERVICE_URL); 
  } 
  call.setTargetEndpointAddress(serviceUrl); 
 
  // Select operation to call 
  call.setOperationName(new QName("http://soapinterop.org/", 
             "search")); 
 
  // Make call and get result 
  Object[] results = (Object[])call.invoke(new Object[] { keyword }); 
 
  return results; 
 } catch (MalformedURLException e) { 
  throw new IOException("Error creating service URL at " + SERVICE_URL); 
 } catch (ServiceException e) { 
  throw new IOException("Error creating service call: " + e.getMessage()); 
 } 
}

上一页  4 5 6 7 8 9 10  下一页

Tags:JAX RPC 构建

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接