2012-04-28 1 views
0

XMLを返すWebサービスへの読み取り専用アクセス権を持つGrailsアプリケーションを作成しています。ユーザー名/パスワード以外に、このアプリケーションのデータ全体がこの外部Webサービスから取得されます。Grails:Web API XMLデータソースへのドメインクラス変数のマッピング

私のドメインクラスの変数をこのデータソースにマップする最良の方法は何ですか?データベースのカスタムORMの例はたくさんありますが、XMLの例はありません。 HTTPコールを作成してフィールドを抽出するロジックはどこに書くのですか?

何かすべてのヘルプは大歓迎です。

答えて

3

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

これは、ドキュメンテーションの成果物、コードの生成および生成コードの生成、jaxbバインディングに追加する注釈なし、データオブジェクトなしなど、WSDLをインターフェイスの中心的な記述として保持することに大きな利点があります。

私たちはドメインクラスを使用していません.Duck型の方法では、クライアントからJavaオブジェクトに相当するため、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メソッドを使用してください。

+0

ありがとうございます。私はXMLを酷使していましたが、コマンドオブジェクトの使用については調べていませんでした。私はそれを行ってあげるよ。 – BadgerBadgerBadger

+0

だから私はそれがうまくいったと思いますか?答えを受け入れてくれてありがとう! – loteq

+0

すごく時間がかかってしまいました。 SOのエチケットをまだ学んでいる。 – BadgerBadgerBadger

関連する問題