<xm:multiple> で XML 値の繰り返しを処理する

XML メッセージには、そのメッセージの構造の中に複数回現れる要素が含まれる場合があります。次の例では、<part> 要素とその子要素が 1 つの注文を構成するために 3 回繰り返されます。

<order>
    <part>
        <partID>19573</partID>
        <partQuantity>4</partQuantity>
    </part>
    <part>
        <partID>28912</partID>
        <partQuantity>1</partQuantity>
    </part>
    <part>
        <partID>39485</partID>
        <partQuantity>57</partQuantity>
    </part>
</order>

繰り返されるすべての要素を処理するには(反復的に選択するなど)、配列のような Java データ構造に繰り返し要素の値を取得します。<xm:multiple> 属性を使用すると、Java データ構造に繰り返し要素の値を取得し、コードでその構造を反復処理できます。

次の例は、前の例のような受信 XML メッセージで処理を行うように設計されています。この例では、<xm:multiple> 属性によって、<partID> 要素と <numberOfItems> 要素の内容が、serialNumber 配列および quantity 配列のメンバーとして追加されるように指定されます。

/**
 * @jws:operation
 * @jws:parameter-xml xml-map::
 * <placeOrder>
 * <order>
 *      <part xm:multiple="String serial in serialNumber, int quant in quantity">
 *         <partID>{serialNumber}</partID>
 *         <numberOfItems>{quantity}</numberOfItems>
 *      </part>
 * </order>
 * </placeOrder>
 * ::
 */
public void placeOrder(String[] serialNumber, int[] quantity)
{
      for (int i = 0; i < serialNumber.length; i++)
      {
        System.out.println("Ordered " + quantity[i] + " of part " + serialNumber[i]);
      }
}

これは逆方向でも機能します。たとえば、これがコールバックであり、パラメータが受信ではなく送信メッセージにマッピングされるとしたら、上のマップはその前の例のような XML を生じさせます。

繰り返しの XML 値を Java の戻り値にマッピングする

このテクニックは、繰り返しの値がパラメータではなく Java の戻り値に対応する場合にも便利です。次の例では、単語 return が、戻り値がマッピングされることを示すために使用されます。

/**
 * @jws:operation
 * @jws:return-xml xml-map::
 * <returnPartNames>
 *     <partName xm:multiple="String i in return">{i}</partName>
 * </returnPartNames>
 * ::
 */
public String[] getPartNames(String[] serialNumber)
{...}

<xm:multiple> 属性の使い方のリファレンス情報については、<xm:multiple> 属性を参照してください。

関連トピック

XML 形式のマッチング

<xm:multiple> 属性

<xm:bind> 属性