ユーザー定義関数のインポート方法

XSLTまたはXPath式で実行できない複雑な機能がある場合は、ユーザー定義のJava関数を作成し、インポートできます。

次のステップに従って、ユーザー独自の関数を作成して使用します。ロジックが複雑すぎるためにXSLマップ内で実行できない場合は、外部のユーザー定義関数が必要になる場合があります。

ユーザー定義関数をインポートするには:

  1. 関数をコーディングし、作成します。

    XSLTマップ・エディタの拡張関数のコード方法は、Oracle BPELプロセス・マネージャの拡張関数とは異なります。mapper-107-extension-functionsサンプル・シナリオのSampleExtensionFunctions.javaファイルには、2つの例があります。このサンプルおよびその他のサンプルは、サンプル・コード・サイトからダウンロードできます。

    各関数は、静的関数として宣言する必要があります。入力パラメータと戻り値は、次のいずれかのタイプで宣言する必要があります。

    • java.lang.String

    • int

    • float

    • double

    • boolean

    • oracle.xml.parser.v2.XMLNodeList

    • oracle.xml.parser.v2.XMLDocumentFragment

    これらの関数のテキストは、次のとおりです。

    // SampleExtensionFunctions.java
    package oracle.sample;
    /*
    This is a sample XSLT Map Editor User Defined Extension Functions implementation
    class.
    */
    public class SampleExtensionFunctions
    {
       public static Double toKilograms(Double lb)
       {
          return new Double(lb.doubleValue()*0.45359237);
       }
       public static String replaceChar(String inputString, String oldChar, String
          newChar )
       {
          return inputString.replace(oldChar.charAt(0), newChar.charAt(0));
       }
    }
    
  2. XML拡張関数構成ファイルを作成します。このファイルは関数とそのパラメータを定義します。

    このファイルの名前は、ext-mapper-xpath-functions-config.xmlに設定する必要があります。このファイルのフォーマットの詳細は、「ユーザー定義XPath拡張関数の作成」を参照してください。次の構文は、ステップ1でコードされている関数toKilogramsおよびreplaceCharを表します。

    <?xml version="1.0" encoding="UTF-8"?>
    <soa-xpath-functions version="11.1.1"
     xmlns="http://xmlns.oracle.com/soa/config/xpath" xmlns:sample=
    "http://www.oracle.com/XSL/Transform/java/oracle.sample.SampleExtensionFunctions"
     >
          <function name="sample:toKilograms">
                 <className>oracle.sample.SampleExtensionFunctions</className>
                 <return type="number"/>
                 <params>
                        <param name="pounds" type="number"/>
                 </params>
                 <desc>Converts a value in pounds to kilograms</desc>
          </function>
          <function name="sample:replaceChar">
                 <className>oracle.sample.SampleExtensionFunctions</className>
                 <return type="string"/>
                 <params>
                        <param name="inputString" type="string"/>
                        <param name="oldChar" type="string"/>
                        <param name="newChar" type="string"/>
                 </params>
                 <desc>Returns a new string resulting from replacing all occurrences
                       of oldChar in this string with newChar</desc>
          </function>
    </soa-xpath-functions>
    

    XSLT拡張関数の定義には、他にいくつかのルールが適用されます。

    • 関数にはネームスペースの接頭辞とネームスペースが必要です。この例では、samplehttp://www.oracle.com/XSL/Transform/java/oracle.sample.SampleExtensionFunctionsとなります。

    • Oracle XSLTプロセッサと連携する拡張関数の場合、関数ネームスペースはhttp://www.oracle.com/XSL/Transform/java/で始まる必要があります。

    • ネームスペースの後半部は、この例ではoracle.sample.SampleExtensionFunctionsですが、拡張関数を実装したJavaクラスの完全な修飾名である必要があります。

    • タイプおよび等価のJavaタイプは、パラメータと戻り値に対して使用できます:

      XML構成ファイルのタイプ名 Javaタイプ

      string

      java.lang.String

      boolean

      boolean

      number

      intfloatdouble

      node-set

      oracle.xml.parser.v2.XMLNodeList

      tree

      oracle.xml.parser.v2.XMLDocumentFragment

  3. XML構成ファイルとコンパイル済クラスの両方が含まれたJARファイルを作成します。構成ファイルは、JARファイル用のMETA-INFディレクトリに格納される必要があります。この項の例の場合、ディレクトリ構造は、JARファイルにoracleディレクトリとMETA-INFディレクトリが追加され、次のようになります。
    • oracle

      • sample(クラス・ファイルが格納されます。)

    • META-INF

      • ext-mapper-xpath-functions-config.xml

    次に、JARファイルをOracle JDeveloperに登録する必要があります。

  4. 「ツール」「プリファレンス」「SOA」の順に選択します。
  5. 「追加」ボタンをクリックし、JARファイルに移動して選択します。
  6. Oracle JDeveloperを再起動します。

    新しい関数は、「コンポーネント」ウィンドウで、「ユーザー定義」ページの「ユーザー定義拡張関数」グループに表示されます。

  7. 関数をランタイム環境で使用できるようにする方法の詳細は、「ユーザー定義関数のランタイムへのデプロイ方法」を参照してください。