0

在 Groovy 中使用 Dropbox 和 Google Drive 构建应用程序,测试运行良好。

代码:

 def "It instantiates and configures the googleAuthorizationCodeFlowBuilder component"() {
         given:
         def ctx = grailsApplication.mainContext
         GoogleAuthorizationCodeFlow.Builder builder = ctx.googleAuthorizationCodeFlowBuilder

         expect:
 }

然而,在 Codeship 和 Amazon 上运行时,测试失败:

消息:创建名为“googleAuthorizationCodeFlowBuilder”的 bean 时出错:bean 实例化失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:无法实例化 bean 类 [com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow$Builder]:构造函数抛出异常;嵌套异常是 java.lang.NullPointerException

线 | 方法->> 285 | org.springframework.beans.factory.support.ConstructorResolver 中的 autowireConstructor

| 1075 | org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory 中的 autowireConstructor

/* 东西 */

org.apache.catalina.core.ContainerBase$StartChild | 第1549章 来电'' | 262 | 跑 。. . . . . . . . . . . . . 在 java.util.concurrent.FutureTask | 第1145章 java.util.concurrent.ThreadPoolExecutor 中的runWorker | 615 | 跑 。. . . . . . . . . . . . . 在 java.util.concurrent.ThreadPoolExecutor$Worker ^ 745 | 在 java.lang.Thread 中运行

由 BeanInstantiationException 引起:无法实例化 bean 类 [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 | 自动接线构造器。. . . . . 在 org.springframework.beans.factory.support.ConstructorResolver | 1075 | org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory 中的 autowireConstructor | 第979章 创建BeanInstance 。. . . . . 在''| 第487章 doCreateBean in '' | 123 | 做创建豆。. . . . . . . . 在 java.util.concurrent.ThreadPoolExecutor

/* 更多堆栈跟踪 */

| 615 | 跑 。. . . . . . . . . . . . . 在 java.util.concurrent.ThreadPoolExecutor$Worker ^ 745 | 在 java.lang.Thread 中运行

googleAuthorizationflowBuilder bean 只创建一个 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 时,该错误特别发生......问题是为什么它在云上是 null 而不是在我的机器上......

4

1 回答 1

0

好吧,看来是Codebase项目上没有设置用于初始化Config.groovy值的环境变量,导致出现上述错误。

缺少的环境变量已在 Codeship 上初始化,现在一切正常。

于 2015-03-19T15:45:21.637 回答