2016-04-07 10 views
0

gibi java ile kod yürütme sonucu tarafından dize içinde harika kod parçalarını değiştirin UUID, geçerli tarih ...ben göndermek istiyorum ve bu xml bazı dinamik kısmını ihtiyaç yapılandırma dosyasında xml veri var SoapUI

gibi SoapUI yılında

doğrudan böyle xml içindeki Groovy komut dosyasını kullanabilirsiniz:

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

ve bu

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

Bu kod ile uğraş olsun ve SimpleDa için UUID için iyi çalışabilir ancak teFormat. tarih için

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

istisnadır:

org.codehaus.groovy.control.MultipleCompilationErrorsException: başlangıç ​​başarısız oldu: Script1.groovy: 1: Beklenmeyen kömürü: '\' @ hattını 1, kolon 55. ew java.text.SimpleDateFormat (\ "yyyy-MM-

ben yerine " arasında SimpleDateFormat benim \" nedeniyle olduğunu biliyorum amakaçmak zorunda println kullanmak için.

Bunu nasıl çalıştırabilirim?

cevap

1

Groovy, SimpleTemplateEngine gibi farklı uygulamalarla TemplateEngine adlı bir arabirime sahiptir.

İhtiyacınız olan şey bu şablondur: yer tutucuları olan bir metin kullanırlar ($ {..} veya jsp sözdizimi <% ...%>). Yer tutucu herhangi bir groovy kodu içerebilir.

resmi belgelerine

:

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

+0

SimpleTemplateEngine bkz çalıştığını, size Jeremie ederiz! – Alex