0

XMLを返すWebサービスへの読み取り専用アクセス権を持つGrailsアプリケーションを作成しています。ユーザー名/パスワードを除いて、このアプリケーションのデータはすべて、この外部Webサービスから取得されます。

ドメインクラスの変数をこのデータソースにマッピングする最良の方法は何ですか?データベースを使用したカスタムORMの例はたくさんありますが、XMLの例はありません。HTTP呼び出しを行い、フィールドを抽出するロジックをどこに記述しますか?

ありとあらゆる助けを大いに感謝します。

4

1 に答える 1

3

MarkupBuilder/XmlSlurper で Spring Web サービスをうまく使用しています。WebServiceTemplate を使用して、特定の Uri への Web サービス クライアントを作成し、MarkupBuilder で構築された XML 経由でリクエストを送信できます。

これには、WSDL をインターフェースの中心的な記述として保持し、ドキュメント アーティファクトとして保持し、維持するコード生成と生​​成されたコードがなく、jaxb バインディングに追加する注釈がなく、データ オブジェクトもないという大きな利点があります。

ドメイン クラスは使用せず、Web サービス呼び出しの XML 結果を直接丸呑みして取得した GPathResult を使用します。ただし、Web インターフェイスはありません。Web インターフェイスがある場合は、コマンド オブジェクトを作成します。

def toXml(MarkupBuilder b) {
}

メソッド、または多分

myCommandObject as XML 

wsdl の XSD スキーマに応じて動作します。このようにして、Grails のデータ バインディングと検証を利用できます。

ビューのデータ モデルの場合、コマンド オブジェクト (互換性のある XML オブジェクト) のダック型を渡すだけで十分なので、両方の方法でマーシャリングする必要はありません。

もう 1 つの警告は、grails spring-ws プラグインの現在のバージョンが古くなっていることです。そこに古い spring-security-core クラスがあるため、grails 2.0 でうまく動作するとは思いません。幸いなことに、クライアントを構築するだけであれば、プラグインはほとんど必要ありません。最新の Spring Web サービス jar を含めて、WebServiceTemplate.sendToEndpoint メソッドを使用するだけです。

于 2012-04-30T08:31:39.457 に答える