<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>
繰り返されるすべての要素を処理するには(反復的に選択するなど)、
次の例は、前の例のような受信 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 を生じさせます。
このテクニックは、繰り返しの値がパラメータではなく 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> 属性を参照してください。