Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SoapUI中,用类似java的代码执行结果替换字符串中的groovy代码片段_Java_Groovy - Fatal编程技术网

在SoapUI中,用类似java的代码执行结果替换字符串中的groovy代码片段

在SoapUI中,用类似java的代码执行结果替换字符串中的groovy代码片段,java,groovy,Java,Groovy,我想发布的配置文件中有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(

我想发布的配置文件中有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>
该日期的例外情况是:

org.codehaus.groovy.control.multipleCompationerErrorSexception: 启动失败:Script1.groovy:1:意外字符:'\'@第1行, 第55栏。ew java.text.SimpleDataFormat(\“yyyy-MM-

我知道这是因为我的
\“
使用SimpleDataFormat而不是
,但我必须转义
才能使用
println


我怎样才能让它工作呢?

Groovy有一个名为
TemplateEngine
的接口,它有不同的实现,比如
SimpleTemplateEngine

这个模板就是您所需要的:它们使用带有占位符(${..}或jsp语法)的文本。占位符可以包含任何groovy代码

从官方文件:

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()
def绑定=[
名字:“格雷斯”,
姓氏:“Hopper”,
接受:对,,
标题:“面向COBOL程序员的Groovy”
]
def engine=new groovy.text.SimpleTemplateEngine()
定义文本=“”\
亲爱的$lastname,
我们\
通知你,你的论文题为
“$title”是${已接受?'已接受':'已拒绝'}。
会议委员会。
'''
def template=engine.createTemplate(文本).make(绑定)
println template.toString()

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