gpt4 book ai didi

java - 从通用 SOAP 请求实现 ResultSet 接口(interface)

转载 作者:数据小太阳 更新时间:2023-10-29 02:41:53 25 4
gpt4 key购买 nike

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

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

最近几天我一直在努力弄清楚如何做到这一点,我想出了几个主意:

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

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

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

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

最佳答案

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

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

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

两者都是绝对通用的,但也没有任何约定。

我认为这是一种糟糕的网络服务思考方式。好的人通常会牢记契约(Contract)的概念。它们的功能范围狭窄且定义明确;他们的输入和输出也是如此。

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

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

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

关于java - 从通用 SOAP 请求实现 ResultSet 接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11153482/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com