I am trying to generate some shell scripts with a parameter expansion
of the the form ${parameter:?word}.
For a test case, I tried to get Velocity to generate a String with the content:
${FOO:?Foo is not set}
I tried the following templates:
${FOO:?Foo is not set} -> Produces an exception.
\${FOO:?Foo is not set} -> Also produces an exception.
$\{FOO:?Foo is not set} -> Produces: $\{FOO:?Foo is not
set} (Why is the backslash still there?)
When I run the template \$FOO I still get the output \$FOO. I
thought that I would get $FOO.
If anyone could help me out with this, I would appreciate it.
Thanks.
Test Code:
package com.amazonaws.mturk.build;
import java.io.StringWriter;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.VelocityEngine;
public class TestVelocityShellConstruct {
public static void main(String[] args) {
String[] templates = new String[] {
"${FOO:?Foo is not set}",
"\\${FOO:?Foo is not set}",
"$\\{FOO:?Foo is not set}"
};
String expected = "${FOO:?Foo is not set}";
VelocityEngine engine = new VelocityEngine();
for (String template : templates) {
System.out.println("-----------------------------------------------");
System.out.println("Executing template:");
System.out.println("-------------------");
System.out.println(template);
System.out.println();
System.out.println("Output:");
System.out.println("-------");
try {
StringWriter out = new StringWriter();
engine.evaluate(new VelocityContext(), out,
"velocity", template);
System.out.println(out);
if (!expected.equals(out.toString())) {
System.out.println("DOES NOT MATCH EXPECTED OUTPUT.");
}
}
catch (Exception e) {
e.printStackTrace(System.out);
}
}
}
}
Output:
-----------------------------------------------
Executing template:
-------------------
${FOO:?Foo is not set}
Output:
-------
org.apache.velocity.exception.ParseErrorException: Encountered ":?Foo
is not set}" at line 1, column 6 of velocity
Was expecting one of:
"}" ...
<DOT> ...
at
org.apache.velocity.app.VelocityEngine.evaluate(VelocityEngine.java:311)
at
org.apache.velocity.app.VelocityEngine.evaluate(VelocityEngine.java:228)
at
com.amazonaws.mturk.build.TestVelocityShellConstruct.main(TestVelocityShellConstruct.java:30)
-----------------------------------------------
Executing template:
-------------------
\${FOO:?Foo is not set}
Output:
-------
org.apache.velocity.exception.ParseErrorException: Encountered ":?Foo
is not set}" at line 1, column 7 of velocity
Was expecting one of:
"}" ...
<DOT> ...
at
org.apache.velocity.app.VelocityEngine.evaluate(VelocityEngine.java:311)
at
org.apache.velocity.app.VelocityEngine.evaluate(VelocityEngine.java:228)
at
com.amazonaws.mturk.build.TestVelocityShellConstruct.main(TestVelocityShellConstruct.java:30)
-----------------------------------------------
Executing template:
-------------------
$\{FOO:?Foo is not set}
Output:
-------
$\{FOO:?Foo is not set}
DOES NOT MATCH EXPECTED OUTPUT.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]