37.3.3. placeWidgetOrder 操作
概要 リンクのコピーリンクがクリップボードにコピーされました!
placeWidgetOrder
は、置換グループが含まれる 2 つの複合型を使用します。この操作は、Java 実装でそのような構造を使用することを示しています。コンシューマーとサービスの両方が、置換グループのメンバーを取得および設定する必要があります。
コンシューマーの実装 リンクのコピーリンクがクリップボードにコピーされました!
placeWidgetOrder()
を呼び出すには、コンシューマーはウィジェットの置換グループの要素が 1 つ含まれるウィジェットの注文を構築する必要があります。ウィジェットをオーダーに追加する場合、コンシューマーは、置換グループの各要素に対して生成されたオブジェクトファクトリーメソッドを使用する必要があります。これにより、ランタイムとサービスが注文を正しく処理できるようになります。たとえば、プラスチックウィジェットに注文が置かれている場合、要素を注文に追加する前に ObjectFactory.createPlasticWidget()
メソッドを使用して要素を作成します。
例37.16「代替グループメンバーの設定」に、WidgetOrderInfo
オブジェクトの widget
プロパティーを設定するためのコンシューマーコードを示します。
例37.16 代替グループメンバーの設定
サービス実装 リンクのコピーリンクがクリップボードにコピーされました!
placeWidgetOrder()
メソッドは、WidgetOrderInfo
オブジェクトの形式で注文を受け取り、順番を処理し、WidgetOrderBillInfo
オブジェクトの形式でコンシューマーに請求書を返します。注文は、プレーンウィジェット、プラスチックウィジェット、または木製ウィジェットの場合があります。注文されたウィジェットの種類は、どの型のオブジェクトが widgetOrderForm
オブジェクトの widget
プロパティーに保存されているかによって決まります。widget
プロパティーは 置換グループで、widget
要素、woodWidget
要素、または plasticWidge
t 要素を含めることができます。
実装は、可能な要素のどれが順序で格納されるかを決定する必要があります。要素の QName を決定する JAXBElement<? extends T>
オブジェクトの getName()
メソッドを使用して、これを実現できます。次に、QName を使用して、置換グループ内のどの要素が順序になっているのかを判別できます。請求書に含まれる要素がわかれば、その値を適切なタイプのオブジェクトに抽出できます。
例37.17「placeWidgetOrder()
の実装」 は、可能な実装を示しています。
例37.17 placeWidgetOrder()
の実装
例37.17「placeWidgetOrder()
の実装」 のコードは、以下を行います。
オブジェクトファクトリーをインスタンス化して要素を作成します。
WidgetOrderBillInfo
オブジェクトをインスタンス化して、請求を保持します。
注文されたウィジェットの数を取得します。
注文に保存されている要素のローカル名を取得します。
要素が woodWidget
要素かどうかを確認します。
注文から適切なタイプのオブジェクトに要素の値を抽出します。
JAXBElement<T>
オブジェクトを作成します。
bill オブジェクトの widget
プロパティーを設定します。
bill オブジェクトの amountDue
プロパティーを設定します。