What is a Boxed Error in Scala? - scala

When I run my application, the browser shows
[ExecutionException: Boxed Error]
It doesn't say anything about the line number, etc.
In the console, I have the following
! #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]

"Boxed Error" is Scala's response to an Error being thrown within a Future. In Java, and hence Scala, subclasses of type Error have a special meaning as Fatal errors. See Differences between Exception and Error. In short, the javadoc says:
An Error is a subclass of Throwable that indicates serious problems
that a reasonable application should not try to catch. Most such
errors are abnormal conditions.
Unlike throwing other Throwables within a future, when a subclass of Error is thrown, the default Scala resolver will wrap up the Error in a java.util.concurrent.ExecutionException, with the message string "Boxed Error", and complete your promise with a failure.
To quote the futures documentation http://docs.scala-lang.org/overviews/core/futures.html w.r.t. Error being thrown:
[Error] exceptions are rethrown in the thread executing the failed
asynchronous computation. The rationale behind this is to prevent
propagation of critical and control-flow related exceptions normally
not handled by the client code and at the same time inform the client
in which future the computation failed.
If you want to do something special with the Failure, the original Error that was thrown can be extracted (but not in a way particularly amenable to pattern matching), by ExecutionException#getCause()

I don't know that's a Boxed Error, but according to your stacktrace, the root problem comes from the factorie lib, from the max2Double method at line 95.
Extract from the source code:
/**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
...
It seems that your Traversable is empty.

Related

IllegalArgumentException thrown from org.drools.modelcompiler.builder.generator.expressiontyper.ExpressionTyper

I spent a whole bunch of time today working out a problem that occurred on migrating from Optaplanner 7.48 to Optaplanner 8.3.0 The problem seems to me to be actually in the 7.50 version of Drools that Optaplanner 8.3 depends on.
rule "applyHomeTeamConstraints"
enabled true
when $f1: ProblemFixture(slot != null, $ht: homeTeam)
$tu: ProblemSoftConstraint(this memberOf $ht.constraints,
matches($f1.slot.dateTime) )
then
scoreHolder.penalize(kcontext, -$tu.getWeight());
end
The rule worked perfectly happily in Optaplanner 7.48/Drools 7.48.
When I use this rule in my Optaplanner 8.3.0/Drools 7.50 project, I get an exceptionally unhelpful message...
java.lang.IllegalStateException: There is an error in a scoreDrl or scoreDrlFile.
at uk.me.selwyn_family.league.scheduler.solver.SolverTest.testBuildSeasonSolver(SolverTest.java:47)
Caused by: java.lang.UnsupportedOperationException
at uk.me.selwyn_family.league.scheduler.solver.SolverTest.testBuildSeasonSolver(SolverTest.java:47)
After many hours of tracing I found that the exception was actually thrown at line 243 in org.drools.modelcompiler.builder.generator.expressiontyper.ExpressionTyper
Expression parentLeft = findLeftLeafOfNameExpr(halfPointFreeExpr.getParentNode().orElseThrow(UnsupportedOperationException::new));
and occurs because the parentNode is null.
I can solve the problem by simply add this. in front of the matches() as follows...
rule "applyHomeTeamConstraints"
enabled true
when $f1: ProblemFixture(slot != null, $ht: homeTeam)
$tu: ProblemSoftConstraint(this memberOf $ht.constraints,
this.matches($f1.slot.dateTime) )
then
scoreHolder.penalize(kcontext, -$tu.getWeight());
end
I am trying to work out whether it was only working by accident in the 7.48 version and actually should never have worked or whether a bug has crept into the Drools 7.50 that should be reported.
Either way a more helpful error message would be good!
Any suggestions gratefully received.
Update: Now I have told Surefire not to trimStackTrace here is the full trace...
java.lang.IllegalStateException: There is an error in a scoreDrl or scoreDrlFile.
at org.optaplanner.core.impl.score.director.ScoreDirectorFactoryFactory.buildDroolsScoreDirectorFactory(ScoreDirectorFactoryFactory.java:280)
at org.optaplanner.core.impl.score.director.ScoreDirectorFactoryFactory.decideMultipleScoreDirectorFactories(ScoreDirectorFactoryFactory.java:103)
at org.optaplanner.core.impl.score.director.ScoreDirectorFactoryFactory.buildScoreDirectorFactory(ScoreDirectorFactoryFactory.java:68)
at org.optaplanner.core.impl.solver.DefaultSolverFactory.buildScoreDirectorFactory(DefaultSolverFactory.java:116)
at org.optaplanner.core.impl.solver.DefaultSolverFactory.getScoreDirectorFactory(DefaultSolverFactory.java:73)
at org.optaplanner.core.api.score.ScoreManager.create(ScoreManager.java:59)
at uk.me.selwyn_family.league.scheduler.solver.SeasonSolver.<init>(SeasonSolver.java:31)
at uk.me.selwyn_family.league.scheduler.solver.SolverTest.testBuildSeasonSolver(SolverTest.java:47)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:85)
at org.testng.internal.Invoker.invokeMethod(Invoker.java:696)
at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:882)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1189)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:124)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:108)
at org.testng.TestRunner.privateRun(TestRunner.java:767)
at org.testng.TestRunner.run(TestRunner.java:617)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:348)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:343)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:305)
at org.testng.SuiteRunner.run(SuiteRunner.java:254)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1224)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1149)
at org.testng.TestNG.run(TestNG.java:1057)
at org.apache.maven.surefire.testng.TestNGExecutor.run(TestNGExecutor.java:136)
at org.apache.maven.surefire.testng.TestNGDirectoryTestSuite.executeSingleClass(TestNGDirectoryTestSuite.java:112)
at org.apache.maven.surefire.testng.TestNGDirectoryTestSuite.execute(TestNGDirectoryTestSuite.java:99)
at org.apache.maven.surefire.testng.TestNGProvider.invoke(TestNGProvider.java:145)
at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:428)
at org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:162)
at org.apache.maven.surefire.booter.ForkedBooter.run(ForkedBooter.java:562)
at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:548)
Caused by: java.lang.UnsupportedOperationException
at java.base/java.util.Optional.orElseThrow(Optional.java:408)
at org.drools.modelcompiler.builder.generator.expressiontyper.ExpressionTyper.toTypedExpressionRec(ExpressionTyper.java:243)
at org.drools.modelcompiler.builder.generator.expressiontyper.ExpressionTyper.toTypedExpression(ExpressionTyper.java:153)
at org.drools.modelcompiler.builder.generator.drlxparse.ConstraintParser.getDrlxParseResult(ConstraintParser.java:174)
at org.drools.modelcompiler.builder.generator.drlxparse.ConstraintParser.drlxParse(ConstraintParser.java:104)
at org.drools.modelcompiler.builder.generator.visitor.pattern.PatternDSL.findAllConstraint(PatternDSL.java:139)
at org.drools.modelcompiler.builder.generator.visitor.pattern.PatternDSL.buildPattern(PatternDSL.java:241)
at org.drools.modelcompiler.builder.generator.visitor.ModelGeneratorVisitor.visit(ModelGeneratorVisitor.java:145)
at org.drools.compiler.lang.descr.PatternDescr.accept(PatternDescr.java:303)
at org.drools.modelcompiler.builder.generator.visitor.AndVisitor.visit(AndVisitor.java:50)
at org.drools.modelcompiler.builder.generator.visitor.ModelGeneratorVisitor.visit(ModelGeneratorVisitor.java:86)
at org.drools.modelcompiler.builder.generator.ModelGenerator.processRule(ModelGenerator.java:187)
at org.drools.modelcompiler.builder.generator.ModelGenerator.generateModel(ModelGenerator.java:160)
at org.drools.modelcompiler.builder.ModelBuilderImpl.compileKnowledgePackages(ModelBuilderImpl.java:284)
at org.drools.modelcompiler.builder.ModelBuilderImpl.buildRules(ModelBuilderImpl.java:220)
at org.drools.modelcompiler.builder.ModelBuilderImpl.postBuild(ModelBuilderImpl.java:130)
at org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.build(CompositeKnowledgeBuilderImpl.java:115)
at org.drools.compiler.builder.impl.CompositeKnowledgeBuilderImpl.build(CompositeKnowledgeBuilderImpl.java:99)
at org.drools.compiler.kie.builder.impl.AbstractKieProject.buildKnowledgePackages(AbstractKieProject.java:268)
at org.drools.compiler.kie.builder.impl.AbstractKieProject.buildKnowledgePackages(AbstractKieProject.java:216)
at org.drools.compiler.kie.builder.impl.AbstractKieProject.verify(AbstractKieProject.java:80)
at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildKieProject(KieBuilderImpl.java:277)
at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:245)
at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:202)
at org.kie.internal.utils.KieHelper.getKieContainer(KieHelper.java:100)
at org.kie.internal.utils.KieHelper.build(KieHelper.java:82)
at org.optaplanner.core.impl.score.director.ScoreDirectorFactoryFactory.buildDroolsScoreDirectorFactory(ScoreDirectorFactoryFactory.java:272)
... 36 more
(No wonder it took me a long time to trace!!!)
This sounds like a regression in Drools. Yes, that error message isn't helpful - that too is an issue (note that Drools has improved a lot to get better error messages and the new way to write constraints (ConstraintStreams) has far more useful stacktraces).
One thing that doesn't make sense to me is your stacktrace:
java.lang.IllegalStateException: There is an error in a scoreDrl or scoreDrlFile.
at uk.me.selwyn_family.league.scheduler.solver.SolverTest.testBuildSeasonSolver(SolverTest.java:47)
Caused by: java.lang.UnsupportedOperationException
at uk.me.selwyn_family.league.scheduler.solver.SolverTest.testBuildSeasonSolver(SolverTest.java:47)
This stacktrace doesn't mention lines of org.optaplanner or org.drools. Can you please share the code of SolverTest.java:47 too so we can verify it doesn't covert/eat the exception? The message does seem to come from OptaPlanner, but a true OptaPlanner exception would have a chained (= caused by) exception coming from a line in org.drools with hopefully more information for us to diagnose why it doesn't give a proper error message.

Play Framework is hiding the intial exception

I'm getting this error from Play after implementing a controller. If I throw in a try to catch and println the error, I can see what exception was thrown by my code, but otherwise this information is missing and I get an error relating to files in SBT instead.
What is going on during the handling of my exception that is causing this other exception?
I'm running my application with 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)
It was an incompatibility between play and sbt, and has been fixed:
https://github.com/playframework/playframework/issues/10486
You end up with this error when an exception happens during handling the server error in the default or custom Play error handler. See play.api.http.HttpErrorHandler.

sbt.TrapExitSecurityException error message in from Chisel (rocket-chip)

I have gotten this fascinating exception (no additional backtrace, that's it) in rocket-chip Chisel elaboration.
[info] [0.003] Elaborating design...
------------------------------------------------------------------------------
Error: Exception thrown when elaborating ChiselGeneratorAnnotation
Try --help for more information.
------------------------------------------------------------------------------
Exception: sbt.TrapExitSecurityException thrown from the UncaughtExceptionHandler in thread "run-main-0"
This is from PR https://github.com/chipsalliance/rocket-chip/pull/2310. I have managed to hose the generator so completely with so little information in a way I've never seen before. Anyone know what this sort of error means?
I believe this is due to a recent PR to add Staged Compile: https://github.com/chipsalliance/rocket-chip/pull/2274/files

Error parsing media type 'application.xml' Jersey REST client

I'm getting this Exception when I run the client.
Exception in thread "main" java.lang.IllegalArgumentException: Error parsing media type 'application.xml'
at com.sun.jersey.core.impl.provider.header.MediaTypeProvider.fromString(MediaTypeProvider.java:79)
at com.sun.jersey.core.impl.provider.header.MediaTypeProvider.fromString(MediaTypeProvider.java:53)
at javax.ws.rs.core.MediaType.valueOf(MediaType.java:119)
at com.sun.jersey.api.client.PartialRequestBuilder.type(PartialRequestBuilder.java:92)
at com.sun.jersey.api.client.WebResource.type(WebResource.java:347)
at com.rest.client.EmpGETClient.main(EmpGETClient.java:15)
Caused by: java.text.ParseException: End of header
at com.sun.jersey.core.header.reader.HttpHeaderReaderImpl.getNextCharacter(HttpHeaderReaderImpl.java:168)
at com.sun.jersey.core.header.reader.HttpHeaderReaderImpl.next(HttpHeaderReaderImpl.java:129)
at com.sun.jersey.core.header.reader.HttpHeaderReaderImpl.next(HttpHeaderReaderImpl.java:124)
at com.sun.jersey.core.header.reader.HttpHeaderReader.nextSeparator(HttpHeaderReader.java:116)
at com.sun.jersey.core.impl.provider.header.MediaTypeProvider.valueOf(MediaTypeProvider.java:90)
at com.sun.jersey.core.impl.provider.header.MediaTypeProvider.fromString(MediaTypeProvider.java:77)
... 5 more
Try "application/xml" see also http://en.wikipedia.org/wiki/Internet_media_type#Type_application

NoClassDefFoundError running HashMap definition in Eclipse

I have wanted to use a HashMap that maps a value of type String using a key of type Integer. This is the definition:
HashMap <String, Integer> dict = new HashMap <String,Integer>();
I don't get any compiling errors. However, when I am debugging I get the error bellow when running that line:
com.google.gwt.user.server.rpc.UnexpectedException: Service method 'public abstract java.lang.String myProject.client.ProjectService.state(java.lang.String) throws java.lang.IllegalArgumentException' threw an unexpected exception: java.lang.NoClassDefFoundError: com/google/gwt/dev/util/collect/HashMap
at com.google.gwt.user.server.rpc.RPC.encodeResponseForFailure(RPC.java:385)
at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:588)
at ................
Any help?
Check your import statements. Make sure you are importing "java.util.HashMap".
(I think you imported "com.google.gwt.dev.util.collect.HashMap" )