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 なのかということです...