I hope this shows. Pasted from a Java app:
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running net.csbe.live.orders.TestGstrings
Class of books: class java.lang.String
result:
Class of books: class java.util.ArrayList
@Test
public void testGStringTemplate() throws Exception {
String text = "<%"
+ " println(\"Class of books:
${books.getClass()}\") \n"
+ "
\n"
+ " def slurper = JsonSlurper.newInstance()
\n"
+ " books = slurper.parseText(books)
\n"
+ "
\n"
+ "
\n"
+ " def passed = [\"creditCard\":true,
\n"
+ " \"paid\":false,
\n"
+ " \"earlyPaymentCredit\":false,
\n"
+ " \"books\":books
\n"
+ " ]
\n"
+ "%>";
GStringTemplateEngine engine = new GStringTemplateEngine();
Template template = engine.createTemplate(text);
String bookjson = "[{\"info\":{\"csbeid\":\"B24470\",\"title\":\"1.
CUE FOR
TREASON\",\"isbn\":\"0-7730-3014-X\",\"year\":\"1997\"},\"GOOD\":{\"qty\":\"1\",\"quality\":\"GOOD\",\"unitPrice\":\"13.27\",\"total\":\"13.27\"},\"USABLE\":{\"qty\":\"1\",\"quality\":\"USABLE\",\"unitPrice\":\"6.06\",\"total\":\"6.06\"},\"gross\":{\"qty\":\"2.00\",\"total\":\"19.33\"}}]";
Map data = ImmutableMap.of("books", bookjson, "JsonSlurper",
JsonSlurper.class);
StringWriter sw = new StringWriter();
// round one
template.make(data).writeTo(sw);
System.out.println("result: " + sw.toString());
// round two
template.make(data).writeTo(sw);
System.out.println("result: " + sw.toString());
}
StackTrace:
groovy.lang.MissingMethodException: No signature of method:
groovy.json.JsonSlurper.parseText() is applicable for argument types:
(java.util.ArrayList) values: [[[USABLE:[unitPrice:6.06, total:6.06, qty:1,
quality:USABLE], ...]]]
Possible solutions: parseText(java.lang.String), parse(java.io.File),
parse(java.io.Reader), parse(java.net.URL)
at
org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:55)
at
org.codehaus.groovy.runtime.callsite.PojoMetaClassSite.call(PojoMetaClassSite.java:46)
at
org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)
at groovy.json.JsonSlurper$parseText.call(Unknown Source)
at
groovy.tmp.templates.GStringTemplateScript1$_getTemplate_closure1.doCall(GStringTemplateScript1.groovy:5)
... [more]
--
View this message in context:
http://groovy.329449.n5.nabble.com/Binding-preserved-between-successive-calls-to-Template-make-map-with-GStringTemplateEngine-tp5717807p5717811.html