WEB开发网
开发学院软件开发Java Web 服务编程技巧与窍门: 协同使用集合与 SOAP 和... 阅读

Web 服务编程技巧与窍门: 协同使用集合与 SOAP 和 JAX-RPC

 2010-03-23 00:00:00 来源:WEB开发网   
核心提示: 创建包装类接口到目前为止,一切都很好,Web 服务编程技巧与窍门: 协同使用集合与 SOAP 和 JAX-RPC(5),但是如果您有一个现有的类,它使用方法签名来公开特定于语言的 Java 集合类,将业务逻辑编码在 Java 类中,并用会话 EJB 对其进行打包,那么您还想通过 Web 服务公开

创建包装类接口

到目前为止,一切都很好。但是如果您有一个现有的类,它使用方法签名来公开特定于语言的 Java 集合类,那么您还想通过 Web 服务公开这个类吗?

处理这种情况的一个相对简单的方法是以您的服务实现为基础创建包装器类,将该集合接口转换成一个数组接口。例如,让我们考虑上面列出的基于原始 LinkedList 的 CustomerService 实现。我们创建一个类来调用基于原始集合的实现,但是它返回 Java 数组而不是返回集合。该包装器来可能看起来像 清单 5中的某一个:

清单 5. 包装器类

public class TheCustomerServiceWrapper { 
 protected TheCustomerServiceLinkedList innerService = 
 new TheCustomerServiceLinkedList(); 
 public Customer[] getCustomers(String queryString) { 
 return (Customer[]) innerService.getCustomers(queryString 
 ).toArray(new Customer[0]); 
 } 
} 

现在,我们可以基于这个包装器类来创建适当的 Web 服务构件了,它在内部使用现有的基于集合的实现。

总结

Java 编程语言为不同类型的集合对象提供了各种集合类。然而,这些类中没有一个是语言中立的,并且将它们的实例序列化到 XML 中非常困难,有时甚至是不可能的。我们推荐的用于公开对象集合的唯一方法就是使用数组。WS-I 基本概要(WS-I Basic Profile)也描述和推荐了这种方法。

不管实现是否与 Web 服务相关,在您的类的公共方法的签名中使用 Java 的集合类通常不是一个好的选择,因为这样做削弱了调用者和提供者之间的联系。这些类总是将它们收集的对象作为一般引用存储到 java.lang.Object 中。这避免了由编译器进行静态的检查,并且引入了新的运行时错误类。在实现已经存在的情况下,您还可以通过包装器类使用数组来将其作为可互操作的 Web 服务公开。

请注意,这种实践与我们推荐的良好实践很好地保持了一致,将业务逻辑编码在 Java 类中,并用会话 EJB 对其进行打包,以便作为 Web 服务公开。

本文示例源代码或素材下载

上一页  1 2 3 4 5 

Tags:Web 服务 编程技巧

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