gpt4 book ai didi

java - 像 SoapUI 中那样用 Java 代码执行结果替换字符串中的 Groovy 代码片段

转载 作者:行者123 更新时间:2023-12-01 10:05:54 25 4
gpt4 key购买 nike

我想发布的配置文件中有 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);

日期的异常(exception)情况是:

org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed: Script1.groovy: 1: unexpected char: '\' @ line 1, column 55. ew java.text.SimpleDateFormat(\"yyyy-MM-

我知道这是由于 SimpleDateFormat 中的 \" 而不是 " 但我必须转义 " 才能使用 println.

我怎样才能让它发挥作用?

最佳答案

Groovy 有一个名为 TemplateEngine 的接口(interface),具有不同的实现,例如 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

关于java - 像 SoapUI 中那样用 Java 代码执行结果替换字符串中的 Groovy 代码片段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36483083/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com