大規模ペイロード(Oracle BPEL Process Manager)でのXSLTトランスフォーメーションの使用

11gリリース1 11.1.1.3までは、Oracle BPEL Process ManagerでのXSLT操作は、結果のドキュメント全体がバイナリXML形式でメモリーにキャッシュされていました。これは、大規模ドキュメント処理の場合、メモリー不足エラーの原因となりました。11g リリース1 11.1.1.4からは、streamResultToTempFileプロパティが追加されました。このプロパティでは、XSLTの結果が一時ファイルにストリーミングされ、一時ファイルからロードされます。大規模ペイロードをXSLTを使用して処理する場合は、streamResultToTempFileyesに設定します。デフォルト値はnoです。

このプロパティは、次のBPEL XPath関数を使用する場合に適用可能です。

  • ora:processXSLT('template','input','properties'?)

  • ora:doXSLTransformForDoc('template','input','name', 'value')

大きなXML文書をXSLTを使用して処理するよう構成するには:

  1. BPEL共通プロパティ・スキーマを作成します。例:
    <?xml version="1.0" encoding="UTF-8"?>
    <xs:schema targetNamespace ="http://schemas.oracle.com/service/bpel/common" 
              xmlns:common = "http://schemas.oracle.com/service/bpel/common"
              xmlns:xs = "http://www.w3.org/2001/XMLSchema"
              elementFormDefault="qualified" blockDefault="#all">
       
      <xs:element name="serviceProperties"  type="common:PropertiesType"/> 
      <xs:element name="anyProperties"  type="common:ArrayOfNameAnyTypePairType"/> 
         <xs:complexType name="NameValuePairType">
        <xs:sequence>
          <xs:element name="name" type="xs:string"/>
          <xs:element name="value" type="xs:string"/>
        </xs:sequence>
       </xs:complexType>
       <xs:complexType name="ArrayOfNameValuePairType">
        <xs:sequence>
          <xs:element name="item" type="common:NameValuePairType"
     maxOccurs="unbounded"/>
        </xs:sequence>
       </xs:complexType>
       <xs:complexType name="NameAnyTypePairType">
        <xs:sequence>
          <xs:element name="name" type="xs:string"/>
          <xs:element name="value" type="xs:anyType"/>
        </xs:sequence>
       </xs:complexType>
       <xs:complexType name="ArrayOfNameAnyTypePairType">
        <xs:sequence>
          <xs:element name="item" type="common:NameAnyTypePairType"
     maxOccurs="unbounded"/>
        </xs:sequence>
       </xs:complexType>  
       <xs:complexType name="PropertiesType">
        <xs:sequence>
          <xs:element name="property" type="common:NameValuePairType"
     maxOccurs="unbounded"/>
        </xs:sequence>
       </xs:complexType>
       <xs:complexType name="ArrayOfAnyTypeType">
        <xs:sequence>
          <xs:element name="item" type="xs:anyType" maxOccurs="unbounded"/>
        </xs:sequence>
       </xs:complexType>   
    </xs:schema>
    
  2. BPELプロセス内で、importセクションにネームスペースを追加します。
    xmlns:common = "http://schemas.oracle.com/service/bpel/common"
    
  3. グローバル変数を作成します(この例では、propertiesXMLVarという名前で作成):
    <variable name="propertiesXMLVar" element="common:anyProperties"/>
    
  4. streamResultToTempFileプロパティをyesに設定します。このassignアクティビティはXSLTトランスフォーメーションの実行前に存在している必要があります。
    <assign name="Assign_xsltprop">
          <copy>
            <from>
               <common:anyProperties>
                 <common:item>
                       <common:name>streamResultToTempFile</common:name>
                       <common:value>yes</common:value>
                 </common:item>
               </common:anyProperties>
            </from>
            <to variable="propertiesXMLVar"/>
          </copy>
    </assign>