2014-01-27 4 views
0

Я работаю над этим плагином grails-aws и получаю странную ошибку, пытающуюся запустить под Grails 2.3.4 и 2.3.5.ConversionNotSupportedException: Не удалось преобразовать значение свойства типа «grails.spring.BeanBuilder» в требуемый тип «java.lang.String»

См travis build output где тесты проходят для Grails 2.0.4/2.2.4, но не для 2.3.4/2.3.5

Что-то изменилось с Grails 2.3.x в области значений чтения из конфигурации файлы?

Ошибка при создании bean-компонента с именем 'credentialsHolder': инициализация компонента не выполнена; Вложенное исключение - org.springframework.beans.ConversionNotSupportedException: Не удалось преобразовать значение свойства типа «grails.spring.BeanBuilder» в требуемый тип «java.lang.String» для свойства «accessKey»; nested exception is java.lang.IllegalStateException: Невозможно преобразовать значение типа [grails.spring.BeanBuilder] в требуемый тип [java.lang.String] для свойства «accessKey»: не найдено подходящих редакторов или стратегии конверсии (ПРИМЕЧАНИЕ. Трассировка стека фильтруется Используйте --verbose, чтобы увидеть весь след)

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'credentialsHolder': Initialization of bean failed; nested exception is org.springframework.beans.ConversionNotSupportedException: Failed to convert property value of type 'grails.spring.BeanBuilder' to required type 'java.lang.String' for property 'accessKey'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [grails.spring.BeanBuilder] to required type [java.lang.String] for property 'accessKey': no matching editors or conversion strategy found 

ответ

1

Это объясняется в this Grails JIRA -.. по-видимому, BeanBuilder вызывает его закрытие с «делегатом первого» поведения, но была ранее ошибка в Groovy, что означало звонки который соответствует методу static сдерживающей области, игнорирует параметр стратегии разрешения и в любом случае называется статическим методом. Другими словами, код, который вы ранее использовали, когда-либо срабатывал случайно. Вы все равно можете вызвать статический метод, если вы его квалифицируете с помощью имени класса AwsPluginSupport.read(...).

В качестве альтернативы вы можете полностью пропустить гимнастику - используйте литералы '${....}' выражения для свойств компонента и позвольте property placeholder mechanism вытащить значения из конфигурации для вас. То есть вместо

credentialsHolder(AWSCredentialsHolder) { 
     accessKey = readString("credentials.accessKey") 
     secretKey = readString("credentials.secretKey") 
     properties = readString("credentials.properties") 
} 

использования

credentialsHolder(AWSCredentialsHolder) { 
     accessKey = '${grails.plugin.aws.credentials.accessKey}' 
     secretKey = '${grails.plugin.aws.credentials.secretKey}' 
     properties = '${grails.plugin.aws.credentials.properties}' 
} 

Обратите внимание, что это важно, чтобы эти одинарные кавычки строки (так что значение является выражением, включая ${}, что весна может решить), а не в двойных кавычках GStrings (который [не будет] разрешен Groovy во время разбора).

Смежные вопросы

 Смежные вопросы