24.11. 返されるデータの制御
リモートメソッドが実行されると、 その結果は XML レスポンスにシリアライズされ、クライアントに返されます。次にこの応答はクライアントにより JavaScript オブジェクトにアンマーシャルされます。 他のオブジェクトへの参照を含む複雑なタイプの場合 (JavaBeans など)、参照されるオブジェクトもすべて応答の一部としてシリアライズされます。 これらのオブジェクトは他のオブジェクトを参照することができ、それらはまた別のオブジェクトを参照できるといった具合になります。返されるデータを制御しないままにしておくと、このオブジェクト「グラフ」は非常に膨大になる可能性があります。
このため、クライアントに対して機密情報が公開されないようにするために、 Seam Remoting はリモートメソッドの
@WebRemote アノテーションの exclude フィールドを指定することでそのオブジェクトグラフを制約できます。このフィールドはドット (「.」) 表記を使って指定される 1 つ以上のパスを含む String 配列を受け取ります。 リモートメソッドを呼び出すと、 これらのパスと一致する結果のオブジェクトグラフにあるオブジェクトがシリアライズされる結果パケットから除外されます。
すべての例は次の
Widget クラスに基づいています。
24.11.1. 通常のフィールドの制約 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
リモートメソッドが
Widget のインスタンスを返すけれど secret フィールドには機密情報が含まれているため公開したくない場合は、次のように制約します。
@WebRemote(exclude = {"secret"})
public Widget getWidget();
@WebRemote(exclude = {"secret"})
public Widget getWidget();
値「secret」は返されるオブジェクトの
secret フィールドを参照します。
ここで、 返される
Widget 値には child フィールドがあり、 これも Widget になる点に注意してください。フィールドではなくこの child の secret 値を隠したい場合は、ドット表記を使用して結果となるオブジェクトグラフ内のこのフィールドのパスを指定することができます。
@WebRemote(exclude = {"child.secret"})
public Widget getWidget();
@WebRemote(exclude = {"child.secret"})
public Widget getWidget();