2016-04-07 47 views
0

我有配置文件中的xml數據我想發佈,我需要一些動態部分在這個XML,如UUID,當前日期...用java中的代碼執行結果替換字符串中的代碼執行結果像在SoapUI

在了SoapUI我可以使用Groovy腳本直接在這樣的XML裏面:

<?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> 

我tryed與此代碼,並將其用於UUID的SimpleDa工作得很好,但不teFormat。

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:意外的字符: '\' @ 1號線, 列55. EW java.text.SimpleDateFormat中(\「YYYY-MM-

我知道這是因爲我在SimpleDateFormat的,而不是"\"但我必須逃離"使用println

我該如何讓這個工作?

回答

1

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() 

看到SimpleTemplateEngine

+0

謝謝熱雷米,它的偉大工程! – Alex