XMLを返すWebサービスへの読み取り専用アクセス権を持つGrailsアプリケーションを作成しています。ユーザー名/パスワードを除いて、このアプリケーションのデータはすべて、この外部Webサービスから取得されます。
ドメインクラスの変数をこのデータソースにマッピングする最良の方法は何ですか?データベースを使用したカスタムORMの例はたくさんありますが、XMLの例はありません。HTTP呼び出しを行い、フィールドを抽出するロジックをどこに記述しますか?
ありとあらゆる助けを大いに感謝します。
XMLを返すWebサービスへの読み取り専用アクセス権を持つGrailsアプリケーションを作成しています。ユーザー名/パスワードを除いて、このアプリケーションのデータはすべて、この外部Webサービスから取得されます。
ドメインクラスの変数をこのデータソースにマッピングする最良の方法は何ですか?データベースを使用したカスタムORMの例はたくさんありますが、XMLの例はありません。HTTP呼び出しを行い、フィールドを抽出するロジックをどこに記述しますか?
ありとあらゆる助けを大いに感謝します。
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 メソッドを使用するだけです。