3

我需要创建一个实现 Java ResultSet 接口的对象,从通用 SOAP 请求中获取数据(我需要在更高级别上使用这些 SOAP 结果集和 JDBC 结果集)。

正如我在标题中所写,SOAP 请求可以是通用的:它取决于传递的参数并且可以使用不同的 Web 服务,所以我只知道运行时的 wsdl 和 SOAP 服务将提供给我的结构。

在过去的几天里,我一直在试图弄清楚如何做到这一点,我提出了一些想法:

1- 将 SOAP 主体转换为 xml WebRowSet 文档,该文档可以解组为 WebRowSetImpl 类,该类实现 WebRowSet 接口(接口扩展 ResultSet)。在这种情况下,我必须从 WSDL 和 SOAP 响应文档开始即时制作自定义 XSLT。

2- 从 SOAP 响应创建 Java 对象,然后尝试使用 Java 对象中的数据映射和填充通用存根 JDBC 结果集

3- 将来自 SOAP 响应的所有数据存储到(规范化或非规范化)数据库中,然后使用任何 JDBC 驱动程序从数据库中读取。

您认为哪种方式总体上是最好的?最简单的方法是什么?

4

2 回答 2

1

我不认为可以也不应该这样做。

我永远不想看到任何实现ResultSet逃离持久层的东西。您需要将其映射到集合或对象中并在方法范围内关闭它。

您真正需要的是映射ResultSet到的通用集合。最好的方法是 a Mapof Lists,其中键是列名,值是Lists列,或者 a Listof Maps,其中每个 Map 代表一行的列名/值对。

任何一个都是绝对通用的,但也没有合同。

我认为这是考虑 Web 服务的糟糕方式。好的人通常会牢记合同的概念。它们的功能狭窄且定义明确;他们的输入和输出也是如此。

您听起来像是希望能够发送用户希望的任何 SQL 查询,并发送回任何结果。这对我的口味来说太松散了。

真正的服务拥有自己的数据并将其用于自己的狭隘目的。任何客户都不应该提取一堆东西,做一些事情,然后把它放回去。将所有这些隐藏在服务中。将这些客户端正在对数据执行的操作添加到其 API 中,并且不要让抽象泄漏。

如果您想更好地了解如何实现面向服务的架构,请阅读 Werner Vogel。

于 2012-06-22T09:30:00.333 回答
0

据我了解,您需要获取数据:

.1。从关系数据库通过JDBC

或者

.2. 通过请求从Web 服务SOAP

ResultSet接口是其中的一部分,JDBC适用于关系数据库绝对不适用于Web 服务。这就是为什么看起来你想为你的任务使用错误的工具。

正确的方法是:

.1。编写您自己的高级抽象,从关系数据库Web 服务作为数据源进行抽象(不要与javax.sql.DataSource类混淆),然后提供两种实现:一种与关系数据库一起使用JDBC,另一种与Web 服务处理SOAP请求一起使用。

.2. 如果存在,请使用一些现有的框架来执行此操作。虽然我不确定,但你可以查看http://www.smooks.org/ - 也许它有一些相关的东西。

如果您真的没有任何选择,并且必须仅使用接口来处理数据源JDBC-我认为最简单的方法是您的第三个建议,尽管它会有很多缺点(例如性能不佳

希望这可以帮助

于 2012-06-22T10:25:06.760 回答