Вы можете использовать GroovyStrings вместо String.format или конкатенации строк; GroovyStrings позволяет вставлять переменные в тело строки, как описано в документации :
Любое выражение Groovy может быть интерполировано во все строковые литералы, кроме одинарных и тройных одинарных строк в кавычках. Интерполяция - это процесс замены заполнителя в строке его значением при вычислении строки. Выражения-заполнители окружены $ {} или префиксом $ для точечных выражений. Значение выражения внутри заполнителя оценивается в его строковое представление, когда GString передается методу, принимающему String в качестве аргумента, вызывая toString () для этого выражения.
Есть несколько способов разграничить строковые литералы, вы можете избежать необходимости избегать двойных кавычек, выбрав другой синтаксис разграничения, такой как dollar-slashy , slashy или тройной двойные кавычки .
Кстати, в Groovy вам не нужны точки с запятой, и вы должны использовать return явно, только если вы возвращаетесь рано из метода:
String getSignature() {
String timestamp = getUTCTimestamp()
String nonce = getNonce()
String digest = getPasswordDigest(nonce, timestamp)
$/UsernameToken Username="${apiUsername}", PasswordDigest="${digest}", Nonce="${nonce}", Created="${timestamp}"/$
}