ヘッダーをスキップ
Oracle® Fusion Middleware Oracle SOAコア拡張機能開発者ガイド
12c (12.1.3)
E54313-02
  目次へ移動
目次

前
次
 

4 カスタムXPath関数の開発とデプロイ

この章では、JavaでJava XPathクラスとして関数を実装する方法、JDeveloperでXPath/XSL関数をデプロイする方法、およびアプリケーション・サーバーでXPath/XSL関数をデプロイする方法について説明します。

この章の内容は次のとおりです。

4.1 JavaでのJava XPathクラスとしての関数の実装

カスタム関数はXPathまたはXSL関数として呼び出すことができるため、実装クラスで両方を処理する必要があります。このため、ホスティング・クラスには少なくとも次が含まれている必要があります。

  • 関数名と同じ名前のpublic staticメソッド。

    このメソッドは、XSL関数の呼出しで使用されます。現在、カスタム関数のオプション・パラメータは、JDeveloperへの登録時にサポートされません。このため、オプション・パラメータがある関数は使用しないことをお薦めします。

  • oracle.fabric.common.xml.xpath.IXPathFunctionを実装するpublic static内部クラス

    このインタフェースには次のメソッドがあります。

    XPath関数の呼出し時にサービス・エンジンによってコールされるObject call (IXPathContext context, List args) throws XPathFunctionException。関数がコールされると、ランタイム・エンジンによって、XPathContextおよび関数に渡される引数のリストが渡されます。IXPathContextを使用すると、実行コンテキスト内のBPEL変数値にアクセスできます。このメソッドの実装は、関数を表すpublic staticメソッドに必然的に委任することになります。

    例4-1に、現在の日付を取得するカスタム関数の実装を示します。実装では、XSLとXPathの両方のサポートを処理する必要があります。関数には、オーバーロードされたメソッドの実装方法を示すオプションのパラメータもあります。

例4-1 現在の日付を取得するためのカスタム関数の実装

package oracle.apps.aia.core;•
import java.text.SimpleDateFormat; 
import java.util.Date; import 
java.util.List;
import oracle.fabric.common.xml.xpath.IXPathContext;
import oracle.fabric.common.xml.xpath.IXPathFunction;
import oracle.fabric.common.xml.xpath.XPathFunctionException;
public class DateUtils
{
public static class GetCurrentDateFunction implements IXPathFunction
{
public Object call(IXPathContext context, List args) 
throws XPathFunctionException
{
if (args.size() == 1)
{
String mask = (String) args.get(0); 
if(mask==null || mask.equals(""))
mask = "yyyy-MM-dd"; 
return getCurrentDate(mask);
}
throw new XPathFunctionException("must pass one argument.");
}
}
public static String getCurrentDate(String formatMask)
{
SimpleDateFormat df = new SimpleDateFormat(formatMask) 
String s = df. format (new Date()); 
return s;
}
. . .
}

4.1.1 カスタムXPath関数のネーミング標準

次のネーミング標準が適用されます。

  • 関数名

  • 関数実装クラス

  • 関数実装メソッド

  • 関数内部クラス

  • 関数ネームスペース

  • 関数ネームスペース接頭辞

4.1.1.1 ファンクション名

関数名は、名前がローワー・キャメルケースである標準のJavaメソッド・ネーミング標準に従う必要があります。

例: getCurrentDategetEBMHeaderValueなど。

4.1.1.2 関数実装クラス

同じクラスに1つ以上の関数を実装できます。クラス名は、名前がアッパー・キャメルケースであるJavaクラス・ネーミング標準に従い、実装される機能の機能性を伝える必要があります

例: EBMHeaderUtilsRoutingUtilsなど。

4.1.1.3 関数実装メソッド

実装クラスには、各XPath関数に対するメソッドが含まれます。メソッドには、関数名と同じ名前を付ける必要があります。パラメータのデータ型は、関数のパラメータのデータ型と一致する必要があります。関数にオプションのパラメータがある場合は、特別なオプションのパラメータを処理するために、別のオーバーロードされたメソッドを設定する必要があります。

例: getCurrentDategetEBMHeaderValueなど。

4.1.1.4 関数内部クラス

各XPath関数に対して、その関数のアッパー・キャメルケースにFunction接尾辞を付加したとおりの名前の内部クラスが必要です。内部クラスは、BPELからXPath関数にアクセスするためにのみ必要です。内部クラスでは、com.oracle.bpel.xml.XPath.IXPathFunctionインタフェースを実装する必要があります。

例: GetESBHeaderValueFunctionなど

4.1.1.5 関数ネームスペース

BPEL式ビルダー・ウィザードとXSLマッパーの両方に関数が表示されるようにするには、ネームスペースがhttp://www.oracle.com/XSL/Transform/java/で始まり、その後に、関数を実装するJavaクラスの完全修飾名が続く必要があります。

例:

http://www.oracle.com/XSL/Transform/java/oracle.apps.aia.core.ebmheader.EBMHeaderUtils

http://www.oracle.com/XSL/Transform/java/oracle.apps.aia.order.route.RoutingUtils

4.1.1.6 関数ネームスペース接頭辞

ネームスペース接頭辞は、機能に基づいた読取り可能な略称である必要があります。

例: GetEBMHeaderValueFunctionの場合はebh。

4.1.2 サポートされるデータ型

XPath 1.0とXSL 1.0のデータ型は、表4-1に示すように、関数への戻りパラメータまたは入力パラメータとしてサポートされます。


Table 4-1 XPath関数に対してサポートされているデータ型

XPath 1.0/XSL 1.0 Java

Node-set

XMLNodeList

Boolean

Boolean

String

String

Number

Int、float、doubleなど

Tree

XMLDocumentFragment


4.2 JDeveloperでのXPath/XSL関数のデプロイ

カスタム関数をBPEL式ビルダーおよびXSLマッパーで表示できるようにするには、JDeveloperで登録する必要があります。これを実行するには、例4-2に示すように、ユーザー定義拡張関数構成ファイル[ext-soa-xpath-functions-config.xml]を指定し、それをFilePreferencesXSLマップを介してJDeveloperに登録します。

実装クラスは、zip/jar形式で圧縮して、$SOA_HOME/soa/modules/oracle.soa.ext_11.x.x/classesフォルダに格納する必要があります。このように、これらのクラスは、WebLogicサーバーのクラスパスに配置されます。

例4-2 ユーザー定義拡張関数の構成ファイル

<?xml version="1.0" encoding="UTF-8"?>
<soa-xpath-functions xmlns=http://xmlns.oracle.com/soa/config/xpath xmlns:utl="http://www.oracle.com/XSL/Transform/java/oracle.apps.aia.core.DateUtils"
<function name="utl:getCurrentDate">
 <className>oracle.xpath.CustomFunction</className>
 <return type="string"/>
 <params>
  <param name="formatMask" type="string"/> 
 <params>
</function> 
<function ...>
 . . .
</function> 
</functions>

4.3 アプリケーション・サーバーでのXPath/XSL関数のデプロイ

Java XPath関数は、アプリケーション・サーバーに登録する必要があります。これを実行するには、$SOA_HOME/soa/modules/oracle.soa.ext_11.x.x/classes\META-INFにあるext-soa-xpath-functions-config.xmlファイルにエントリを追加します。このファイルには、システムに定義されているすべてのXPath関数のリストと説明が含まれています。

このファイルの各関数エントリの情報は、次のとおりです。

  • <function>: XPath関数名を定義する名前属性が含まれます。

  • <classname>: XPath実装クラス名を定義します。この場合は、内部クラス名です。

  • <return>: 戻りタイプの定義に使用します。

  • <params>:

    • 関数に必要なすべてのパラメータ。

    • <param name="formatMask" type="string"/>

    • 渡される各パラメータで、名前と入力のデータ型を指定します。

<function name="utl:getCurrentDate">
 <className>oracle.xpath.CustomFunction</className>
 <return type="string"/>
 <params>
  <param name="formatMask" type="string"/> 
 <params>
</function> 

実装クラスは、$SOA_HOME/soa/modules/oracle.soa.ext_11.x.x/classesフォルダに格納する必要があります。このように、これらのクラスは、SOAコンテナのクラスパスに配置され、クラスローダーで使用できます。