Исключение RejectedAccessException: Такой конструктор не найден

#java #kotlin #groovy #jenkins-pipeline #jenkins-groovy

Вопрос:

У меня есть библиотека kotlin, где класс Environment определяется с помощью конструктора:

 data class Environment @JvmOverloads constructor(val name : String, val host: String, val port: Int, val secureConn: Boolean=false,
                                                 val user : String = "user", val password : String = "defaultPass", val loginPath : String = "/login",
                                                 val trustStorePath: String = "/trustStore.jks", val trustStorePassword: String = "defaultPass",
                                                 val disableHostnameVerification: Boolean = true) { ...
 

Я пытаюсь создать экземпляр этого класса в коде конвейера Дженкинса:

 def env = new Environment("name", "host", 7777, true, "username", "pass", "/login", "/cert.jks", "anotherPass", true)
 

Затем я получаю следующую ошибку:

 org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: No such constructor found: new package.Environment java.lang.String java.lang.String java.lang.Integer java.lang.Boolean java.lang.String java.lang.String java.lang.String java.lang.String java.lang.String java.lang.Boolean
 

Но есть именно такой конструктор! В чем может быть проблема?

Также существует декомпилированная версия исходных текстов kotlin. Кажется, это совпадает:

 public Environment(@NotNull String name, @NotNull String host, int port, boolean secureConn, @NotNull String user, @NotNull String password, @NotNull String loginPath, @NotNull String trustStorePath, @NotNull String trustStorePassword, boolean disableHostnameVerification)
 

Комментарии:

1. Я думаю, что это из-за значений по умолчанию в конструкторе

2. Я бы использовал отражение, чтобы проверить во время выполнения, какие классы загружаются и какие конструкторы предоставляются, но я мало что знаю о том, как Дженкинс справляется с этим и доступно ли это из его сценариев. Мне кажется, что он пытается загрузить класс с пакетом канонического имени. Окружающая среда. Это то, чего ты действительно хочешь?

3. @tim_yates Почему? Существует @jvmOverloads аннотация, поэтому генерируется множество конструкторов. Я вижу это в декомпилированном файле, и там есть необходимый конструктор. Может быть, проблема в приведении типа?

4. Вы пытались отключить этот плагин? issues.jenkins.io/browse/JENKINS-32681

5. Что, если проблема заключается в примитивных типах? Я бы попытался добавить знак вопроса рядом с типом Int и Boolean, чтобы принудительно перевести его в коробочные типы вместо примитивов.