Создавая приложение с помощью Dropbox и Google Drive в Groovy, тесты проходят нормально.
Код:
def "It instantiates and configures the googleAuthorizationCodeFlowBuilder component"() {
given:
def ctx = grailsApplication.mainContext
GoogleAuthorizationCodeFlow.Builder builder = ctx.googleAuthorizationCodeFlowBuilder
expect:
}
Однако при работе на Codeship и Amazon тест не проходит:
Сообщение: Ошибка при создании bean-компонента с именем 'googleAuthorizationCodeFlowBuilder': создание экземпляра bean-компонента не удалось; вложенным исключением является org.springframework.beans.BeanInstantiationException: не удалось создать экземпляр класса компонента [com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow$Builder]: конструктор выдал исключение; вложенным исключением является java.lang.NullPointerException
Линия | Метод ->> 285 | autowireConstructor в org.springframework.beans.factory.support.ConstructorResolver
| 1075 | autowireConstructor в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory
/* вещи */
org.apache.catalina.core.ContainerBase$StartChild | 1549 | позвонить в '' | 262 | бегать . . . . . . . . . . . . . . в java.util.concurrent.FutureTask | 1145 | runWorker в java.util.concurrent.ThreadPoolExecutor | 615 | бегать . . . . . . . . . . . . . . в java.util.concurrent.ThreadPoolExecutor$Worker ^ 745 | запустить в java.lang.Thread
Вызвано BeanInstantiationException: не удалось создать экземпляр класса компонента [com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow$Builder]: конструктор выдал исключение; вложенным исключением является java.lang.NullPointerException -> 163 | экземпляр класса в org.springframework.beans.BeanUtils
| 121 | создать экземпляр в org.springframework.beans.factory.support.SimpleInstantiationStrategy | 277 | autowireConstructor . . . . . . в org.springframework.beans.factory.support.ConstructorResolver | 1075 | autowireConstructor в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory | 979 | создатьBeanInstance . . . . . . в '' | 487 | doCreateBean в '' | 123 | сделатьCreateBean . . . . . . . . . в java.util.concurrent.ThreadPoolExecutor
/* больше трассировки стека */
| 615 | бегать . . . . . . . . . . . . . . в java.util.concurrent.ThreadPoolExecutor$Worker ^ 745 | запустить в java.lang.Thread
Компонент googleAuthorizationflowBuilder создает только GoogleAuthorizationCodeFlow.Builder (я использую Google java API).
РЕДАКТИРОВАТЬ 1: я воспроизвел ошибку на своем компьютере, изменив doWithSpring:
def doWithSpring = {
def config = application.config
String googleSecret = getConfigValue(config, 'storage.google.secret')
String googleAppId = null//getConfigValue(config, 'storage.google.appId')
String appName = getConfigValue(config, 'storage.appName')
if (!ConfigUtils.optional(config,'storage.google.disabled')) {
googleNetHttpTransport(NetHttpTransport)
googleJsonFactory(JacksonFactory)
googleCredentialsBuilder(GoogleCredential.Builder) {
transport = googleNetHttpTransport
jsonFactory = googleJsonFactory
}
googleAuthorizationCodeFlowBuilder(GoogleAuthorizationCodeFlow.Builder, ref('googleNetHttpTransport'), ref('googleJsonFactory'),
googleAppId, googleSecret, [DRIVE])
}
}
РЕДАКТИРОВАТЬ 2: кажется, что ошибка возникает именно тогда, когда AppId имеет значение null... Вопрос в том, почему он равен нулю в облаке, а не на моей машине...