Платформа воспроизведения скрывает первоначальное исключение

#scala #exception #playframework #sbt #playback

#scala #исключение #playframework #sbt #воспроизведение

Вопрос:

Я получаю эту ошибку из Play после внедрения контроллера. Если я добавлю try перехват и println ошибку, я смогу увидеть, какое исключение было вызвано моим кодом, но в противном случае эта информация отсутствует, и вместо этого я получаю ошибку, связанную с файлами в SBT.

Что происходит во время обработки моего исключения, которое вызывает это другое исключение?

Я запускаю свое приложение с sbt api/run помощью .

 [info] p.c.s.AkkaHttpServer - Listening for HTTP on /[0:0:0:0:0:0:0:0]:9000

(Server started, use Enter to stop and go back to the console...)

WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.google.inject.internal.cglib.core.$ReflectUtils$1 (file:/Users/dan/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/google/inject/guice/4.2.3/guice-4.2.3.jar) to method java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain)
WARNING: Please consider reporting this to the maintainers of com.google.inject.internal.cglib.core.$ReflectUtils$1
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
2020-10-15 00:55:32 INFO  play.api.http.EnabledFilters  Enabled Filters (see <https://www.playframework.com/documentation/latest/Filters>):

    play.filters.csrf.CSRFFilter
    play.filters.headers.SecurityHeadersFilter
    play.filters.hosts.AllowedHostsFilter
    play.filters.cors.CORSFilter

2020-10-15 00:55:32 INFO  play.api.Play  Application started (Dev) (no global state)
2020-10-15 00:55:32 ERROR p.api.http.DefaultHttpErrorHandler  Error while handling error
java.lang.ClassCastException: class xsbti.BasicVirtualFileRef cannot be cast to class java.io.File (xsbti.BasicVirtualFileRef is in unnamed module of loader sbt.internal.MetaBuildLoader @6e75aa0d; java.io.File is in module java.base of loader 'bootstrap')
    at play.sbt.run.PlayReload$.$anonfun$sourceMap$1(PlayReload.scala:69)
    at scala.collection.MapLike$MappedValues.get(MapLike.scala:260)
    at play.runsupport.Reloader.$anonfun$findSource$1(Reloader.scala:547)
    at scala.Option.flatMap(Option.scala:271)
    at play.runsupport.Reloader.findSource(Reloader.scala:546)
    at play.core.server.DevServerStart$$anon$1$$anon$2.sourceOf(DevServerStart.scala:171)
    at play.core.SourceMapper.$anonfun$sourceFor$1(ApplicationProvider.scala:21)
    at play.core.SourceMapper.$anonfun$sourceFor$1$adapted(ApplicationProvider.scala:21)
    at scala.collection.ArrayOps$.find$extension(ArrayOps.scala:684)
    at play.core.SourceMapper.sourceFor(ApplicationProvider.scala:21)
    at play.core.SourceMapper.sourceFor$(ApplicationProvider.scala:20)
    at play.core.server.DevServerStart$$anon$1$$anon$2.sourceFor(DevServerStart.scala:169)
    at play.api.http.HttpErrorHandlerExceptions$.$anonfun$throwableToUsefulException$1(HttpErrorHandler.scala:358)
    at scala.Option.flatMap(Option.scala:283)
    at play.api.http.HttpErrorHandlerExceptions$.throwableToUsefulException(HttpErrorHandler.scala:358)
    at play.api.http.DefaultHttpErrorHandler.onServerError(HttpErrorHandler.scala:261)
    at play.filters.cors.AbstractCORSPolicy$$anonfun$1.applyOrElse(AbstractCORSPolicy.scala:128)
    at play.filters.cors.AbstractCORSPolicy$$anonfun$1.applyOrElse(AbstractCORSPolicy.scala:126)
    at scala.concurrent.impl.Promise$Transformation.run(Promise.scala:453)
    at play.api.libs.streams.Execution$trampoline$.execute(Execution.scala:70)
    at scala.concurrent.impl.Promise$Transformation.submitWithValue(Promise.scala:392)
    at scala.concurrent.impl.Promise$DefaultPromise.submitWithValue(Promise.scala:302)
    at scala.concurrent.impl.Promise$DefaultPromise.tryComplete0(Promise.scala:249)
    at scala.concurrent.impl.Promise$Transformation.handleFailure(Promise.scala:407)
    at scala.concurrent.impl.Promise$Transformation.run(Promise.scala:469)
    at akka.dispatch.BatchingExecutor$AbstractBatch.processBatch(BatchingExecutor.scala:56)
    at akka.dispatch.BatchingExecutor$BlockableBatch.$anonfun$run$1(BatchingExecutor.scala:93)
    at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.scala:18)
    at scala.concurrent.BlockContext$.withBlockContext(BlockContext.scala:94)
    at akka.dispatch.BatchingExecutor$BlockableBatch.run(BatchingExecutor.scala:93)
    at akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:48)
    at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(ForkJoinExecutorConfigurator.scala:48)
    at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290)
    at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1016)
    at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1665)
    at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1598)
    at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:177)
  

Комментарии:

1. Что это за код?

2. @VM4 Любой код в контроллере, который генерирует исключение

3. Происходит что-то действительно странное. Не могли бы вы попробовать изменить свой указатель ошибок на пользовательский? В файле conf: play.http.ErrorHandler = play.http. HtmlOrJsonHttpErrorHandler

4. Точно то же самое с добавлением. Разделил причину до действия, просто throw new Exception("...");

Ответ №1:

Это была несовместимость между play и sbt, и она была исправлена: https://github.com/playframework/playframework/issues/10486

Ответ №2:

В конечном итоге вы сталкиваетесь с этой ошибкой, когда возникает исключение во время обработки ошибки сервера в обработчике ошибок воспроизведения по умолчанию или пользовательском. Смотрите play.api.http.HttpErrorHandler .

Комментарии:

1. Но что на самом деле сломано? Обработчик ошибок по умолчанию должен «просто работать».