第9章 Groovy スクリプト


9.1. Groovy

Groovy は、Java 仮想マシン用のアジャイルで動的な言語であり、Java の長所に基づいて、構築されていますが、Python、Ruby、Smalltalk などの言語に触発された追加の強力な機能を備えています。
詳細については、http://groovy.codehaus.org/ を参照してください。

9.2. Groovy の例

Groovy スクリプトのサポートは、設定 namespace (http://www.milyn.org/xsd/smooks/groovy-1.1.xsd) で提供されます。 この namespace は、DOM および SAX ベースのスクリプトをサポートします。以下の例を参照してください。
<?xml version="1.0"?>
<smooks-resource-list xmlns="http://www.milyn.org/xsd/smooks-1.1.xsd" xmlns:g="http://www.milyn.org/xsd/smooks/groovy-1.1.xsd">

    <g:groovy executeOnElement="xxx">
        <g:script>
        <!--
        //Rename the target fragment element from "xxx" to "yyy"...
        DomUtils.renameElement(element, "yyy", true, true);
        -->
        </g:script>
    </g:groovy>

</smooks-resource-list>
Copy to Clipboard Toggle word wrap

9.3. Groovy のヒント

  • ビジットされた要素 は、適切な名前の変数によってスクリプトで使用できます。element(要素名と同じ変数名でも使用できますが、後者の名前が英数字に制限されている場合に限ります。)
  • 前に実行/後に実行: デフォルトでは、visitAfter イベントの発生時、スクリプトが実行されます。executeBefore 属性を true に設定して、visitBefore で実行するように、指示します。
  • コメント/CDATA スクリプトラップ: スクリプトに特殊な XML 文字が含まれている場合は、スクリプトを XML Comment または CDATA セクションでラップできます。

9.4. Imports

imports 要素を使用して、インポート を追加します。多くのクラスが自動的にインポートされます。
  • org.milyn.xml.DomUtils
  • org.milyn.javabean.context.BeanContext.Smooks 1.3 以降のみ。
  • org.milyn.javabean.repository.BeanRepository
  • org.w3c.dom.*
  • groovy.xml.dom.DOMCategory
  • groovy.xml.dom.DOMUtil
  • groovy.xml.DOMBuilder

9.5. Groovy で DOM と SAX の混合を使用する

Groovy は、DOM と SAX の混合モデルをサポートしています。Groovy の DOM ユーティリティーを使用して、対象のメッセージフラグメントを処理できます。SAX フィルターが使用されている場合も、Groovy スクリプトは、DOM の要素を受け取ります。これにより、SAX フィルターを使用する Groovy スクリプトがはるかに簡単になり、ストリーミング方式で巨大なメッセージを処理する機能が維持されます。

9.6. DOM と SAX の混合のヒント

注意事項:
  • デフォルトモードのみで使用できます (つまり、executeBeforefalse に等しい場合)。executeBeforetrue であるように設定されている場合、この機能は、利用できません。つまり、Groovy スクリプトは、SAXElement のみにアクセスできます。
  • writeFragment は、DOM フラグメントを Smooks.filterSource StreamResult に書き込むために、呼び出す必要があります。
  • この DOM 構成機能を使用すると、パフォーマンスのオーバーヘッドが発生します。(巨大なメッセージを処理することはできますが、少し時間がかかる場合があります。妥協点は使いやすさとパフォーマンスの間です。)

9.7. DOM と SAX の混合の例

手順9.1 タスク

  1. 次のサンプルのような XML メッセージを考えてみましょう。
    <shopping>
        <category type="groceries">
            <item>Chocolate</item>
            <item>Coffee</item>
        </category>
        <category type="supplies">
            <item>Paper</item>
            <item quantity="4">Pens</item>
        </category>
            <category type="present">
            <item when="Aug 10">Kathryn's Birthday</item>
        </category>
    </shopping>
    
    Copy to Clipboard Toggle word wrap
  2. 上記の買い物リストの消耗品カテゴリーを変更するには、さらに 2 つのペンを追加します。これを行うには、単純な Groovy スクリプトを記述し、メッセージの <category> 要素を対象とします。
  3. その結果、スクリプトは単純にカテゴリー内の <item> 要素を反復し、カテゴリータイプが「消耗品」で品目が「ペン」の場合、数量は 2 つ増加します。
    <?xml version="1.0"?>
    <smooks-resource-list xmlns="http://www.milyn.org/xsd/smooks-1.1.xsd" 
       xmlns:core="http://www.milyn.org/xsd/smooks/smooks-core-1.3.xsd"
       xmlns:g="http://www.milyn.org/xsd/smooks/groovy-1.1.xsd">
    
       <core:filterSettings type="SAX" />
        
       <g:groovy executeOnElement="category">
          <g:script>
          <!--
             use(DOMCategory) {
              // Modify "supplies": we need an extra 2 pens...
              if (category.'@type' == 'supplies') {
                  category.item.each { item ->
                      if (item.text() == 'Pens') {
                          item['@quantity'] = item.'@quantity'.toInteger() + 2;
                      }
                  }
              }
          }
            
          // When using the SAX filter, we need to explicitly write the fragment
          // to the result stream...
          writeFragment(category);
          -->
          </g:script>
       </g:groovy>
    
    </smooks-resource-list>
    
    Copy to Clipboard Toggle word wrap

トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat