- Oracle SOAスイートでのSOAアプリケーションの開発
- サービス・コンポーネント間の共有機能
- XSLTマップ・エディタを使用したトランスフォーメーションの作成
- XPath式の使用
- ユーザー定義関数のインポート方法
ユーザー定義関数のインポート方法
XSLTまたはXPath式で実行できない複雑な機能がある場合は、ユーザー定義のJava関数を作成し、インポートできます。
次のステップに従って、ユーザー独自の関数を作成して使用します。ロジックが複雑すぎるためにXSLマップ内で実行できない場合は、外部のユーザー定義関数が必要になる場合があります。
ユーザー定義関数をインポートするには:
- 関数をコーディングし、作成します。
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)); } }
-
- 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拡張関数の定義には、他にいくつかのルールが適用されます。
-
関数にはネームスペースの接頭辞とネームスペースが必要です。この例では、
sample
とhttp://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
int
、float
、double
node
-set
oracle.xml.parser.v2.XMLNodeList
tree
oracle.xml.parser.v2.XMLDocumentFragment
-
- XML構成ファイルとコンパイル済クラスの両方が含まれたJARファイルを作成します。構成ファイルは、JARファイル用の
META-INF
ディレクトリに格納される必要があります。この項の例の場合、ディレクトリ構造は、JARファイルにoracle
ディレクトリとMETA-INF
ディレクトリが追加され、次のようになります。-
oracle
-
sample
(クラス・ファイルが格納されます。)
-
-
META-INF
-
ext-mapper-xpath-functions-config.xml
-
次に、JARファイルをOracle JDeveloperに登録する必要があります。
-
- 「ツール」→「プリファレンス」→「SOA」の順に選択します。
- 「追加」ボタンをクリックし、JARファイルに移動して選択します。
- Oracle JDeveloperを再起動します。
新しい関数は、「コンポーネント」ウィンドウで、「ユーザー定義」ページの「ユーザー定義拡張関数」グループに表示されます。
- 関数をランタイム環境で使用できるようにする方法の詳細は、「ユーザー定義関数のランタイムへのデプロイ方法」を参照してください。