2015-04-26 2 views
0

Я использую play-framework 2.3.x с reactivemongo-extension JSON type. Ниже мой код для извлечения данных из БД, как показано ниже:Play-Framework: 2.3.x: play - Невозможно вызвать действие, в итоге получилась ошибка: java.lang.IllegalArgumentException:

def getStoredAccessToken(authInfo: AuthInfo[User]) = { 
println(">>>>>>>>>>>>>>>>>>>>>>: BEFORE"); //$doc("clientId" $eq authInfo.user.email, "userId" $eq authInfo.user._id.get) 
var future = accessTokenService.findRandom(Json.obj("clientId" -> authInfo.user.email, "userId" -> authInfo.user._id.get)); 
println(">>>>>>>>>>>>>>>>>>>>>>: AFTER: "+future); 
future.map { option => { 
    println("*************************** ") 
    println("***************************: "+option.isEmpty) 
    if (!option.isEmpty){ 
    var accessToken = option.get;println(">>>>>>>>>>>>>>>>>>>>>>: BEFORE VALUE"); 
    var value = Crypto.validateToken(accessToken.createdAt.value) 
    println(">>>>>>>>>>>>>>>>>>>>>>: "+value); 
    Some(scalaoauth2.provider.AccessToken(accessToken.accessToken, accessToken.refreshToken, authInfo.scope, 
     Some(value), new Date(accessToken.createdAt.value))) 
    }else{ 
    Option.empty 
    } 
}} 

}

Когда я с помощью BSONDao и BsonDocument для извлечения данных, этот код успешно, но после преобразования JSONDao я получаю следующее ошибка:

Примечание: некоторое время этот код будет работать, но некоторые его брошено исключение после преобразования в формат JSON

play - Cannot invoke the action, eventually got an error: java.lang.IllegalArgumentException: bound must be positive 
application - 

Ниже приведены журналы приложений полное исключение STRACK следа, как показано ниже:

>>>>>>>>>>>>>>>>>>>>>>: BEFORE 
>>>>>>>>>>>>>>>>>>>>>>: AFTER: [email protected] 
play - Cannot invoke the action, eventually got an error: java.lang.IllegalArgumentException: bound must be positive 
application - 
! @6m1520jff - Internal server error, for (POST) [/oauth2/token] -> 
play.api.Application$$anon$1: Execution exception[[IllegalArgumentException: bound must be positive]] 
at play.api.Application$class.handleError(Application.scala:296) ~[play_2.11-2.3.8.jar:2.3.8] 
at play.api.DefaultApplication.handleError(Application.scala:402) [play_2.11-2.3.8.jar:2.3.8] 
at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$3$$anonfun$applyOrElse$4.apply(PlayDefaultUpstreamHandler.scala:320) [play_2.11-2.3.8.jar:2.3.8] 
at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$3$$anonfun$applyOrElse$4.apply(PlayDefaultUpstreamHandler.scala:320) [play_2.11-2.3.8.jar:2.3.8] 
at scala.Option.map(Option.scala:146) [scala-library-2.11.6.jar:na] 
Caused by: java.lang.IllegalArgumentException: bound must be positive 
at java.util.Random.nextInt(Random.java:388) ~[na:1.8.0_40] 
at scala.util.Random.nextInt(Random.scala:66) ~[scala-library-2.11.6.jar:na] 

ответ

0

Проблема заключается в решении, но я не уверен, почему это продукты, я думаю, что есть проблема с reactivemongo-extension JSONDao библиотеки. потому что когда я использую findOne вместо findRandom, код запускается успешно, но findRandom работает на BSON dao. Все еще не найдено то, что является точной проблемой, но следующим является разрешенный код.

def getStoredAccessToken(authInfo: AuthInfo[User]) = { 
println(authInfo.user.email+" ---- "+authInfo.user._id.get) 
var future = accessTokenService.findOne($doc("clientId" $eq authInfo.user.email, "userId" $eq authInfo.user._id.get)); //user findOne instead of findRandom in JsonDao 
future.map { option => { 
    if (!option.isEmpty){ 
    var accessToken = option.get; 
    var value = Crypto.validateToken(accessToken.createdAt.value) 
    Some(scalaoauth2.provider.AccessToken(accessToken.accessToken, accessToken.refreshToken, authInfo.scope, 
     Some(value), new Date(accessToken.createdAt.value))) 
    }else{ 
    Option.empty 
    } 
}} 

}