3

一般的なSOAPリクエストからデータを取得するJavaResultSetインターフェイスを実装するオブジェクトを使用して作成する必要があります(これらのSOAP結果セットとJDBC結果セットの両方でより高いレベルで作業する必要があります)。

タイトルに書いたように、SOAPリクエストはジェネリックである可能性があります。渡されたパラメーターに依存し、さまざまなWebサービスを消費する可能性があるため、実行時にwsdlとSOAPサービスが提供する構造のみを知っています。

私はここ数日、これを行う方法を理解しようとしてきましたが、いくつかのアイデアが出てきました。

1-SOAP本体をxmlWebRowSetドキュメントに変換します。このドキュメントは、WebRowSetインターフェイス(ResultSetを拡張するインターフェイス)を実装するWebRowSetImplクラスにアンマーシャリングできます。この場合、WSDLおよびSOAP応答ドキュメントから始めて、その場でカスタムXSLTを作成する必要があります。

2- SOAP応答からJavaオブジェクトを作成し、汎用スタブJDBC結果セットをマップしてJavaオブジェクト内のデータで埋めようとします

3-SOAP応答からのすべてのデータを(正規化または非正規化)データベースに格納してから、任意のJDBCドライバーを使用してデータベースから読み取ります。

全体的にどの道が最善だと思いますか?そして、最も簡単な方法はどれですか?

4

2 に答える 2

1

私はそれができる、あるいはできるべきではないと思います。

ResultSet永続層からの脱出を実装するものを見たくありません。それをコレクションまたはオブジェクトにマップし、メソッドスコープで閉じる必要があります。

あなたが本当に求めているのは、マップするためのジェネリックコレクションResultSetです。できる最善の方法はMapListsキーが列名で値が列ごとであるof Lists、または、各マップが1行分の列名/値のペアを表すofです。ListMaps

どちらも絶対に一般的ですが、契約もありません。

これはWebサービスについて考えるのに悪い方法だと思います。良いものは通常、契約の概念を念頭に置いています。それらの機能は狭く、明確に定義されています。それらの入力と出力も同様です。

ユーザーが望む任意のSQLクエリを送信し、結果が何であれ返送できるようにしたいようです。それは私の好みにはあまりにも緩いサービスです。

実際のサービスはそのデータを所有し、それを独自の狭い目的に使用します。クライアントは、たくさんのものを抽出し、何かをして、それを元に戻す必要はありません。そのすべてをサービス内に隠します。それらのクライアントがデータに対して行っていることをAPIに追加し、抽象化が漏れないようにします。

サービス指向アーキテクチャーを実装する方法についてより良いアイデアを得たい場合は、WernerVogelをお読みください。

于 2012-06-22T09:30:00.333 に答える
0

私が理解したことから、データを取得する必要があります。

.1。リレーショナルデータベースからJDBC

また

.2。リクエストを介したWebサービスからSOAP

ResultSetインターフェイスはその一部でJDBCあり、リレーショナルデータベースのみ機能し、Webサービスでは機能しないようになっています。そのため、タスクに間違ったツールを使用したいようです。

正しい方法は次のいずれかです。

.1。リレーショナルデータベースWebサービスの両方からデータソースとして抽象化する独自の高レベルの抽象化を記述し(javax.sql.DataSourceクラスと混同しないでください)、2つの実装を提供します。1つはを使用してリレーショナルデータベースJDBCで動作し、もう1つはWebサービス処理SOAP要求で動作します。

.2。存在する場合は、これを行うためにいくつかの既存のフレームワークを使用します。よくわかりませんが、http: //www.smooks.org/を確認してください。何か関連があるかもしれません。

本当に選択の余地がなく、インターフェイスのみを使用してデータソースを操作する必要がある場合-多くの欠点(パフォーマンスの低下など)JDBCがありますが、最も簡単な方法は3番目の提案だと思います

お役に立てれば

于 2012-06-22T10:25:06.760 に答える