JELLY: An XML-Based Scripting Language

by Siegfried Goeschl



Listing One



<?xml version="1.0"?>

<j:jelly xmlns:j="jelly:core">

   Hello World!

</j:jelly>





Listing Two



public class JellySample1

{

   public static void main(String[] args)

   {

      try

      {

         Jelly jelly = new Jelly();

         jelly.setUrl( new File("scripts/hello_world.jelly").toURL() );

         Script script = jelly.compileScript();

         JellyContext context = new JellyContext();

         context.setVariable("name", "Dr. Dobb's Journal");

         script.run( context, xmlOutput );

         System.out.println(context.getVariable("result"));

     }

     catch (Exception e)

     {

        e.printStackTrace();

     }

   }

}





Listing Three



<?xml version="1.0"?>

<j:jelly xmlns:j="jelly:core">

   <j:set var="result" value="Hello ${name}!!"/>

</j:jelly>





Listing Four



public class Base64EncodeTag extends TagSupport

{

   private String var;

   private Expression value;

   public void doTag(XMLOutput output) throws Exception

   {

      String input = null;

      if ( value != null ) {

         input = value.evaluateAsString(context);

      } else {

         input = getBodyText(false);

      }

      String result = new String(

         Base64.encode(input.getBytes())

         );

      if ( var != null ) {

         context.setVariable( var, result);

      } else {

         output.write(result);

      }

   }

   public void setValue(Expression value) {

      this.value = value;

   }

   public void setVar(String var) {

      this.var = var;

   }

}





Listing Five



public class Base64TagLibrary extends TagLibrary

{

   public Base64TagLibrary()

   {

      this.registerTag( "encode", Base64EncodeTag.class );

      this.registerTag( "decode", Base64DecodeTag.class );

   }

}





Listing Six



<?xml version="1.0"?>

<j:jelly

   xmlns:j="jelly:core"

   xmlns:base64="jelly:Base64TagLibrary">

   <j:set var="plainString">Foo Is Not Bar</j:set>

   <base64:encode var="base64String" value="${plainString}"/>

   Plain string : ${plainString}

   Base64 encoded : ${base64String}

   Base64 decoded : <base64:decode>${base64String}</base64:decode>

</j:jelly>





Listing Seven



Plain string : Foo Is Not Bar

Base64 encoded : Rm9vIElzIE5vdCBCYXI=

Base64 decoded : Foo Is Not Bar





Listing Eight



1 <j:set var="currSourceDir" value="${maven.webtest.src}"/>

2

3 <fileScanner var="testScripts">

4    <fileset dir="${currSourceDir}">

5       <patternset>

6          <include name="${maven.webtest.file}"/>

7       </patternset>

8    </fileset>

9 </fileScanner>





Listing Nine



1 <j:forEach var="testScriptFile" items="${testScripts.iterator()}">

2    <java classname="org.apache.tools.ant.Main"

3          fork="yes"

4          dir="${basedir}"

5          failonerror="false">

6       <classpath>

7          <fileset dir="${plugin.dir}/jars">

8          <include name="*.jar"/>

9       </fileset>

10      <pathelement path="${plugin.getDependencyPath('ant')}"/>

11         <pathelement ... />

12         <pathelement path="${plugin.getDependencyPath('xercesImpl')}"/>

13      </classpath>

14      <sysproperty key="basepath" value="${maven.webtest.config.basepath}"/>

15      <sysproperty ... />

16      <sysproperty key="verbose" value="${maven.webtest.config.verbose}"/>

17      <arg value="-f"/>

18      <arg value="${testScriptFile}"/>

19   </java>

20 </j:forEach>





Listing Ten



1 <j:forEach var="testSummaryFile"

2    items="${testSummaries.iterator()}">

3    <echo>Transforming ${testSummaryFile.getName()} into HTML</echo>

4    <java classname="org.apache.xalan.xslt.Process" fork="yes">

5       <classpath>

6          <pathelement path="${plugin.getDependencyPath('xercesImpl')}"/>

7          <pathelement path="${plugin.getDependencyPath('xalan')}"/>

8          <pathelement path="${plugin.getDependencyPath('xml-apis')}"/>

9       </classpath>

10      <arg value="-in"/>

11      <arg value="${testSummaryFile.toString()}"/>

12      <arg value="-out"/>

13      <arg value="${maven.docs.dest}/webtest/${testSummaryFile.getName()}.html"/>

14      <arg value="-xsl"/>

15      <arg value="${plugin.dir}/xslt/reportFromSummary.xsl"/>

16    </java>

17 </j:forEach>







Listing Eleven



1 <j:file

2    name="${maven.build.dir}/webtest-raw-report.xml"

3    outputMode="XML"

4    encoding="ISO-8859-1"

5    prettyPrint="true">

6    <x:element name="summary">

7      <j:forEach var="testSummaryFile" items="${testSummaries.iterator()}">

8      <x:parse var="xmlTestReport" xml="${testSummaryFile.toString()}"/>

9      <x:set var="success" select="string($xmlTestReport/summary/testresult/@successful"/>

10     <x:set var="starttime" select="string($xmlTestReport/summary/testresult/@starttime"/>

11     <x:set var="endtime" select="string($xmlTestReport/summary/testresult/@endtime"/>

12     <x:element name="test">

13            <x:element name="file">${testSummaryFile.getName()}</x:element>

14            <x:element name="success">${success}</x:element>

15            <x:element name="starttime">${starttime}</x:element>

16            <x:element name="endtime">${endtime}</x:element>

17    </x:element>

18    </j:forEach>

19    </x:element>

20 </j:file>









3



