Josh Adams created DAFFODIL-2444:
------------------------------------
Summary: Path handling for expressions expects an infoset to
exist, causing unhandled exceptions
Key: DAFFODIL-2444
URL: https://issues.apache.org/jira/browse/DAFFODIL-2444
Project: Daffodil
Issue Type: Bug
Components: Diagnostics
Affects Versions: 3.0.0
Reporter: Josh Adams
While enabling support for defineVariable's that have non-constant expressions,
I ran into some error cases where the path handling code for expressions would
throw NoSuchElement exceptions when trying to handle this case where we are
trying to evaluate a path before the infoset even exists.
I attempted to add some basic handling to the case I was running into, but that
only lead to finding more issues where we were at least running into some
Assert.invariant checks instead of exceptions, but there are probably a number
of places that could use proper error handling in here if we want to handle
situations like this where the infoset doesn't exist.
Here is the stack trace for the test:
[error] Test
org.apache.daffodil.section07.variables.TestVariables.test_defineVariable_ref_infoset_err
failed: java.util.NoSuchElementException: head of empty list, took 0.029 sec
[error] at scala.collection.immutable.Nil$.head(List.scala:430)
[error] at scala.collection.immutable.Nil$.head(List.scala:427)
[error] at
org.apache.daffodil.dpath.NamedStep.downwardStep$lzycompute(Expression.scala:1177)
[error] at
org.apache.daffodil.dpath.NamedStep.downwardStep(Expression.scala:1176)
[error] at
org.apache.daffodil.dpath.NamedStep.compiledDPath$lzycompute(Expression.scala:1167)
[error] at
org.apache.daffodil.dpath.NamedStep.compiledDPath(Expression.scala:1166)
[error] at
org.apache.daffodil.dpath.RelativePathExpression.$anonfun$compiledDPath$3(Expression.scala:828)
[error] at scala.collection.immutable.List.map(List.scala:286)
[error] at
org.apache.daffodil.dpath.RelativePathExpression.compiledDPath$lzycompute(Expression.scala:827)
[error] at
org.apache.daffodil.dpath.RelativePathExpression.compiledDPath(Expression.scala:826)
[error] at
org.apache.daffodil.dpath.WholeExpression.compiledDPath$lzycompute(Expression.scala:650)
[error] at
org.apache.daffodil.dpath.WholeExpression.compiledDPath(Expression.scala:650)
[error] at
org.apache.daffodil.dpath.DFDLPathExpressionParser.compile(DFDLExpressionParser.scala:60)
[error] at
org.apache.daffodil.dsom.ExpressionCompiler.compileRealExpression(CompiledExpression.scala:219)
[error] at
org.apache.daffodil.dsom.ExpressionCompiler.compileExpression(CompiledExpression.scala:73)
[error] at
org.apache.daffodil.dsom.ExpressionCompiler.compileProperty(CompiledExpression.scala:116)
[error] at
org.apache.daffodil.dsom.DFDLDefineVariable.$anonfun$maybeDefaultValueExpr$1(DFDLDefineVariable.scala:73)
[error] at scala.Option.map(Option.scala:230)
[error] at
org.apache.daffodil.dsom.DFDLDefineVariable.maybeDefaultValueExpr$lzycompute(DFDLDefineVariable.scala:72)
[error] at
org.apache.daffodil.dsom.DFDLDefineVariable.maybeDefaultValueExpr(DFDLDefineVariable.scala:69)
[error] at
org.apache.daffodil.dsom.DFDLDefineVariable.$anonfun$variableRuntimeData$1(DFDLDefineVariable.scala:86)
[error] at
org.apache.daffodil.dsom.DFDLDefineVariable.$anonfun$variableRuntimeData$1$adapted(DFDLDefineVariable.scala:86)
[error] at
org.apache.daffodil.processors.VariableRuntimeData.maybeDefaultValueExpr$lzycompute(RuntimeData.scala:966)
[error] at
org.apache.daffodil.processors.VariableRuntimeData.maybeDefaultValueExpr(RuntimeData.scala:966)
[error] at
org.apache.daffodil.processors.VariableRuntimeData.preSerialization(RuntimeData.scala:970)
[error] at
org.apache.daffodil.dsom.DFDLDefineVariable.$anonfun$new$1(DFDLDefineVariable.scala:35)
[error] at
scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23)
[error] at
org.apache.daffodil.oolag.OOLAG$OOLAGValueBase.liftedTree1$1(OOLAG.scala:669)
[error] at
org.apache.daffodil.oolag.OOLAG$OOLAGValueBase.valueAsAny$lzycompute(OOLAG.scala:667)
[error] at
org.apache.daffodil.oolag.OOLAG$OOLAGValueBase.valueAsAny(OOLAG.scala:664)
[error] at
org.apache.daffodil.oolag.OOLAG$OOLAGHost.$anonfun$checkErrors$2(OOLAG.scala:414)
[error] at
scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23)
[error] at org.apache.daffodil.oolag.OOLAG$.keepGoing(OOLAG.scala:60)
[error] at
org.apache.daffodil.oolag.OOLAG$OOLAGHost.checkErrors(OOLAG.scala:414)
[error] at
org.apache.daffodil.oolag.OOLAG$OOLAGHost.checkErrors$(OOLAG.scala:400)
[error] at
org.apache.daffodil.dsom.SchemaComponentImpl.checkErrors(SchemaComponent.scala:35)
[error] at
org.apache.daffodil.oolag.OOLAG$OOLAGHost.isError(OOLAG.scala:471)
[error] at
org.apache.daffodil.oolag.OOLAG$OOLAGHost.isError$(OOLAG.scala:470)
[error] at
org.apache.daffodil.dsom.SchemaSet.super$isError(SchemaSet.scala:483)
[error] at
org.apache.daffodil.dsom.SchemaSet.$anonfun$isError$2(SchemaSet.scala:483)
[error] at
scala.runtime.java8.JFunction0$mcZ$sp.apply(JFunction0$mcZ$sp.java:23)
[error] at org.apache.daffodil.oolag.OOLAG$.keepGoing(OOLAG.scala:60)
[error] at org.apache.daffodil.dsom.SchemaSet.isError(SchemaSet.scala:474)
[error] at
org.apache.daffodil.compiler.ProcessorFactory.isError(Compiler.scala:111)
[error] at
org.apache.daffodil.compiler.Compiler.org$apache$daffodil$compiler$Compiler$$compileSourceInternal(Compiler.scala:329)
[error] at
org.apache.daffodil.compiler.Compiler$.org$apache$daffodil$compiler$Compiler$$compileSourceSynchronizer(Compiler.scala:367)
[error] at
org.apache.daffodil.compiler.Compiler.compileSource(Compiler.scala:314)
[error] at
org.apache.daffodil.tdml.processor.TDMLDFDLProcessorFactory.compileProcessor(DaffodilTDMLDFDLProcessor.scala:148)
[error] at
org.apache.daffodil.tdml.processor.TDMLDFDLProcessorFactory.$anonfun$getProcessor$1(DaffodilTDMLDFDLProcessor.scala:169)
[error] at
org.apache.daffodil.tdml.SchemaCache.doCompile$lzycompute$1(SchemaCache.scala:95)
[error] at
org.apache.daffodil.tdml.SchemaCache.doCompile$1(SchemaCache.scala:95)
[error] at
org.apache.daffodil.tdml.SchemaCache.$anonfun$compileAndCache$1(SchemaCache.scala:108)
[error] at
scala.collection.mutable.HashMap.getOrElseUpdate(HashMap.scala:86)
[error] at
org.apache.daffodil.tdml.SchemaCache$Cache.getOrElseUpdate(SchemaCache.scala:51)
[error] at
org.apache.daffodil.tdml.SchemaCache.compileAndCache(SchemaCache.scala:107)
[error] at
org.apache.daffodil.tdml.processor.TDMLDFDLProcessorFactory.getProcessor(DaffodilTDMLDFDLProcessor.scala:169)
[error] at org.apache.daffodil.tdml.TestCase.run(TDMLRunner.scala:753)
[error] at
org.apache.daffodil.tdml.DFDLTestSuite.runOneTest(TDMLRunner.scala:387)
[error] at
org.apache.daffodil.tdml.Runner.runOneTest(RunnerFactory.scala:144)
[error] at
org.apache.daffodil.tdml.Runner.runOneTest(RunnerFactory.scala:150)
[error] at
org.apache.daffodil.section07.variables.TestVariables.test_defineVariable_ref_infoset_err(TestVariables.scala:71)
--
This message was sent by Atlassian Jira
(v8.3.4#803005)