再利用可能な XML マップを作成する
XML マップは、拡張子が .xmlmap のマップ ファイルに配置すれば再利用することができます。マップ ファイルのマップはソース コードに配置されたマップと同じように機能しますが、マップ ファイルには複数のメソッド、コールバック、およびコールバック ハンドラから利用できるというメリットがあります。つまり、マップ ファイルのマップはプロジェクトの任意の位置または別のプロジェクトから再利用することができます。また、複数のマップをマップ ファイルに追加すると、独立したマップ ファイルで関連する複数のマップをグループ化できます。
注意: このトピックでは、XML マップ ファイルの具体的な特性について説明します。(インライン マップとマップ ファイルの両方で実行できる)一般的なマッピング タスクの詳細については、XML マップのしくみを参照してください。
マップ ファイルを使用するのは、2 段階のプロセスです。マップ ファイルを作成し、それをソース コードから呼び出します。
再利用可能な XML マップを開始するにはで説明されているように、マップ ファイルは、プロジェクトにテキスト ファイルを追加し、そのファイルの拡張子を .xmlmap にして作成します。次の例は、そのファイルの内容を説明しています。
XML マップ ファイルの先頭は、次の <xm:map-file> タグでなければなりません。このタグは、ファイルにマップが含まれていることを WebLogic Workshop に示します。また、<xm:value> などのマップ タグのネームスペースを区切る「xm」プレフィックスも宣言します。<xm:map-file xmlns:xm="http://www.bea.com/2002/04/xmlmap/">
必要に応じて、<xm:map-file> タグの後に <xm:java-import> タグを続けることができます。<xm:java-import> タグは、マップの置換ディレクティブが、マップを呼び出すメソッドまたはコールバックのスコープにない Java クラスを必要とする場合に使用します。次の例では、Date クラスとユーザ定義クラスがインポートされます。
<xm:java-import class="java.util.Date"/> <xm:java-import class="com.MyCompany.MyType"/>
<xm:java-import> は、Java の import ディレクティブに似ています。ただし、class 属性では完全修飾クラス名のみ使用できます。
マップ ファイルの各 XML マップは、<xm:xml-map> タグの内側に挿入されます。それらのタグの signature 属性はマップのシグネチャを定義します。これは、メソッドまたはコールバックのシグネチャと似ていますが混同しないようにしてください。XML マップのシグネチャは、マップの名前を指定します。マップのシグネチャは、マップおよびそのマップによって使用されるパラメータを参照する際に使用します。パラメータは、マップそれ自体の中の置換ディレクティブに対応します。たとえば次のマップを使用するには、呼び出し元のメソッドまたはコールバックのパラメータ値をデータとして渡して placeOrder として呼び出します。マップ ファイルのマップの呼び出しに関する詳細は、次の節を参照してください。
<xm:xml-map signature="placeOrder(String serialNumber, int quantity)"> <serialNumber>{serialNumber}</serialNumber>XML マップの多くは 1 つのマップ ファイルに配置できます。XML マップ ファイルは、次の </xm:map-file> タグで終了します。
<quantity>{quantity}</quantity> </xm:xml-map>
</xm:map-file>
マップ ファイル中のマップは、<xm:use> タグまたはその代替構文(このトピックの最後に説明)を使用します。<xm:use> タグには、1 つの属性 call があります。この属性は、パラメータとして渡す値だけでなく、呼び出すマップの位置を示すために使用します。
次の例では、requestParts メソッドの partID パラメータと partQuantity パラメータが、「CustomerRequests」というマップ ファイルにある(前の例のマップのような)「placeOrder」というマップに渡されます。
/*
* @jws:operation
* @jws:parameter-xml xml-map:: * <requestParts> * {CustomerRequests.placeOrder(String partID, int partQuantity)} * </requestParts> * ::
public void requestParts(String partID, int partQuantity) {...}
マップのパスは、そのマップを見つけられるだけの完全なものでなければなりません。たとえば、マップ ファイルが「CustomerMaps」というプロジェクトのパラレル フォルダに格納されており、そのプロジェクト自体の名前が「OrderServices」である場合、上の例のパスは次のように指定できます。
OrderServices.CustomerMaps.CustomerRequests.placeOrder(String partID, int partQuantity)