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 | 走る 。. . . . . . . . . . . . . in 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 の instantiateClass

| | 121 | org.springframework.beans.factory.support.SimpleInstantiationStrategy でインスタンス化 | 277 | autowireConstructor 。. . . . . org.springframework.beans.factory.support.ConstructorResolver で | 1075 | org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory の autowireConstructor | 979 | createBeanInstance 。. . . . . で | 487 | '' で doCreateBean | 123 | doCreateBean . . . . . . . . . java.util.concurrent.ThreadPoolExecutor で

/* より多くのスタックトレース */

| | 615 | 走る 。. . . . . . . . . . . . . in 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

さて、Config.groovy の値を初期化するために使用される環境変数が Codebase プロジェクトで設定されていなかったため、前述のエラーが発生したようです。

欠落している環境変数が Codeship で初期化され、すべてが正常に機能するようになりました。

于 2015-03-19T15:45:21.637 に答える