[英]Replace pieces of groovy code inside string by code execution result with java like in SoapUI
我要發布的配置文件中有xml數據,並且此xml中需要一些動態部分,例如UUID,當前日期...
在SoapUI中,我可以像這樣直接在xml內部使用Groovy腳本:
<?xml version='1.0' encoding='utf-8'?>
<Envelope>
<Body>
<date>${=new java.text.SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX\).format(new Date())}</date>
<uddi>${=java.util.UUID.randomUUID()}</uddi>
<Body>
<Envelope>
我明白了
<?xml version='1.0' encoding='utf-8'?>
<Envelope>
<Body>
<date>2016-04-07T15:29:43.729+02:00</date>
<uddi>5f8020d3-1fe0-4755-8056-cdef536c98b9</uddi>
<Body>
<Envelope>
我嘗試使用此代碼,它適用於UUID,但不適用於SimpleDateFormat。
String sExecUUID = "\"UUID\" -> ${java.util.UUID.randomUUID()} !!!"; // OK : "UUID" -> 5f8020d3-1fe0-4755-8056-cdef536c98b9 !!!
String sExecDate = "\"Date\" -> ${new java.text.SimpleDateFormat(\"yyyy-MM-dd'T'HH:mm:ssXXX\").format(new Date())} !!!"; // KO
//String sExec = sExecUUID;
String sExec = sExecDate;
sExec = sExec.replace("\\","\\\\"); // Replace \ --> \\
sExec = sExec.replace("\n","\\n"); // Replace \n --> \\n
sExec = sExec.replace("\r","\\r"); // Replace \n --> \\n
sExec = sExec.replace("\"","\\\""); // Replace " --> \"
sExec = "println \""+sExec+"\"";
// call groovy expressions from Java code
GroovyShell shell = new GroovyShell();
Object value = shell.evaluate(sExec);
System.out.println(value);
日期的例外是:
org.codehaus.groovy.control.MultipleCompilationErrorsException:啟動失敗:Script1.groovy:1:意外的char:'\\'@第1行,第55列。ew java.text.SimpleDateFormat(\\“ yyyy-MM-
我知道這是由於我的\\"
是SimpleDateFormat而不是"
但是我必須轉義"
才能使用println
。
我該如何工作?
Groovy有一個名為TemplateEngine
的接口,具有諸如SimpleTemplateEngine
類的不同實現。
您需要此模板:他們使用帶占位符的文本($ {..}或jsp語法<%..%>)。 占位符可以包含任何常規代碼。
從官方文檔中:
def binding = [
firstname : "Grace",
lastname : "Hopper",
accepted : true,
title : 'Groovy for COBOL programmers'
]
def engine = new groovy.text.SimpleTemplateEngine()
def text = '''\
Dear <%= firstname %> $lastname,
We <% if (accepted) print 'are pleased' else print 'regret' %> \
to inform you that your paper entitled
'$title' was ${ accepted ? 'accepted' : 'rejected' }.
The conference committee.
'''
def template = engine.createTemplate(text).make(binding)
println template.toString()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.