scala playframework playframework-2.1

¿Qué es un error en caja en Scala?



playframework playframework-2.1 (2)

No sé si es un Boxed Error , pero de acuerdo con su stacktrace, el problema de raíz proviene de la factorie lib, del método max2Double en la línea 95 .

Extracto del código fuente:

/**Returns both the maximum element and the second-to-max element */ def max2ByDouble(extractor: A => Double): (A, A) = { val s1 = t.toSeq assert(s1.length > 1) // <<<== HERE var best1 = Double.NegativeInfinity ...

Parece que tu Traversable está vacío.

Cuando ejecuto mi aplicación, el navegador muestra

[ExecutionException: Boxed Error]

No dice nada sobre el número de línea, etc.

En la consola, tengo lo siguiente

! @6elaah0c8 - Internal server error, for (GET) [/testlearn] -> play.api.Application$$anon$1: Execution exception[[ExecutionException: Boxed Error]] at play.api.Application$class.handleError(Application.scala:289) ~[play_2.10.jar:2.1.1] at play.api.DefaultApplication.handleError(Application.scala:383) [play_2.10.jar:2.1.1] at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$17$$anonfun$apply$24.apply(PlayDefaultUpstreamHandler.scala:326) [play_2.10.jar:2.1.1] at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$17$$anonfun$apply$24.apply(PlayDefaultUpstreamHandler.scala:324) [play_2.10.jar:2.1.1] at play.api.libs.concurrent.PlayPromise$$anonfun$extend1$1.apply(Promise.scala:113) [play_2.10.jar:2.1.1] at play.api.libs.concurrent.PlayPromise$$anonfun$extend1$1.apply(Promise.scala:113) [play_2.10.jar:2.1.1] java.util.concurrent.ExecutionException: Boxed Error at scala.concurrent.impl.Promise$.resolver(Promise.scala:52) ~[factorie-1.0.0-M4-jar-with-dependencies.jar:na] at scala.concurrent.impl.Promise$.scala$concurrent$impl$Promise$$resolveTry(Promise.scala:44) ~[factorie-1.0.0-M4-jar-with-dependencies.jar:na] at scala.concurrent.impl.Promise$DefaultPromise.tryComplete(Promise.scala:116) ~[factorie-1.0.0-M4-jar-with-dependencies.jar:na] at scala.concurrent.Promise$class.complete(Promise.scala:55) ~[factorie-1.0.0-M4-jar-with-dependencies.jar:na] at scala.concurrent.impl.Promise$DefaultPromise.complete(Promise.scala:58) ~[factorie-1.0.0-M4-jar-with-dependencies.jar:na] at scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:23) [factorie-1.0.0-M4-jar-with-dependencies.jar:na] Caused by: java.lang.AssertionError: assertion failed at scala.Predef$.assert(Predef.scala:165) ~[factorie-1.0.0-M4-jar-with-dependencies.jar:na] at cc.factorie.util.TraversableExtras$class.max2ByDouble(TraversableExtras.scala:95) ~[factorie-1.0.0-M4-jar-with-dependencies.jar:na] at cc.factorie.package$$anon$2.max2ByDouble(package.scala:148) ~[factorie-1.0.0-M4-jar-with-dependencies.jar:na] at cc.factorie.optimize.SampleRankExample.accumulateExampleInto(SampleRank.scala:31) ~[factorie-1.0.0-M4-jar-with-dependencies.jar:na] at cc.factorie.optimize.OnlineTrainer$$anonfun$processExamples$3.apply(Trainer.scala:72) ~[factorie-1.0.0-M4-jar-with-dependencies.jar:na] at cc.factorie.optimize.OnlineTrainer$$anonfun$processExamples$3.apply(Trainer.scala:63) ~[factorie-1.0.0-M4-jar-with-dependencies.jar:na]


"Error en caja" es la respuesta de Scala a un Error se lanza dentro de un Future . En Java, y por lo tanto en Scala, las subclases de tipo Error tienen un significado especial como errores fatales . Vea las diferencias entre excepción y error . En resumen, el javadoc dice:

Un error es una subclase de Throwable que indica problemas graves que una aplicación razonable no debería intentar atrapar. La mayoría de esos errores son condiciones anormales.

A diferencia de tirar otros Throwable s en un futuro, cuando se lanza una subclase de Error , la resolución predeterminada de Scala terminará el Error en una java.util.concurrent.ExecutionException , con la cadena de mensaje "Boxed Error", y completará su promesa con un fracaso.

Para citar la documentación de futuros http://docs.scala-lang.org/overviews/core/futures.html wrt Error está produciendo un Error :

Las excepciones de [Error] vuelven a surgir en el hilo que ejecuta el cálculo asincrónico fallido. El motivo detrás de esto es evitar la propagación de excepciones relacionadas con flujos críticos y de control normalmente no manejadas por el código del cliente y, al mismo tiempo, informar al cliente en qué futuro falló el cálculo.

Si desea hacer algo especial con la falla, se puede extraer el Error original que se produjo (pero no de una forma especialmente adecuada para la coincidencia de patrones), mediante ExecutionException#getCause()