Подтвердить что ты не робот

Что такое ошибка в коробке в Scala?

Когда я запускаю свое приложение, браузер показывает

[ExecutionException: Boxed Error]

Он ничего не говорит о номере строки и т.д.

В консоли у меня есть следующие

! @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]
4b9b3361

Ответ 1

"Ошибка в ящике" - это Scala ответ на Error, который вызывается внутри Future. В Java и, следовательно, Scala подклассы типа Error имеют особое значение как фатальные ошибки. См. Различия между Исключением и Ошибка. Короче говоря, javadoc говорит:

Ошибка - это подкласс Throwable, который указывает на серьезные проблемы что разумное приложение не должно пытаться поймать. Большинство таких ошибки являются ненормальными условиями.

В отличие от бросания другого Throwable в будущем, когда подкласс Error вызывается, по умолчанию Scala resolver завершает Error в java.util.concurrent.ExecutionException, со строкой сообщения "Boxed Error", и завершите свое обещание неудачей.

Процитировать фьючерсную документацию http://docs.scala-lang.org/overviews/core/futures.html w.r.t. Error:

Исправлены ошибки [Error] в потоке, выполняющем неудачные асинхронное вычисление. Обоснованием этого является предотвращение распространение критических и связанных с контролем потоков исключений обычно не обрабатывается клиентским кодом и в то же время информирует клиента в котором будущее вычисление не удавалось.

Если вы хотите сделать что-то особенное с ошибкой, исходный Error, который был выброшен, может быть извлечен (но не таким образом, в частности, поддается сопоставлению с образцом), ExecutionException#getCause()

Ответ 2

Я не знаю, что a Boxed Error, но, согласно вашей stacktrace, корневая проблема возникает из factorie lib, из max2Double в строке 95.

Извлечение из исходного кода:

/**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
    ...

Кажется, что ваш Traversable пуст.