You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@daffodil.apache.org by "Steve Lawrence (JIRA)" <ji...@apache.org> on 2019/03/08 13:30:00 UTC
[jira] [Resolved] (DAFFODIL-2078) Unexpected exception with
dfdl:contentLength
[ https://issues.apache.org/jira/browse/DAFFODIL-2078?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Steve Lawrence resolved DAFFODIL-2078.
--------------------------------------
Resolution: Fixed
Fix Version/s: 2.4.0
Fixed in commit a6dc540fa13a45e119bbfda77ea4e514ccd1a88f
> Unexpected exception with dfdl:contentLength
> --------------------------------------------
>
> Key: DAFFODIL-2078
> URL: https://issues.apache.org/jira/browse/DAFFODIL-2078
> Project: Daffodil
> Issue Type: Bug
> Components: Back End
> Affects Versions: 2.2.0
> Reporter: Brandon Sloane
> Assignee: Steve Lawrence
> Priority: Major
> Fix For: 2.4.0
>
> Attachments: test.dfdl.xsd
>
>
> DFDL schema which uses the dfdl:contentLength on a parent node fails to compile, even when the length is explicit.
> I am unsure if the attached schema should compile. In general it is not possible to use dfdl:contentLength on a parent node, as said node has not yet finished parsing. However, when the lengthKind is explicitly the value is knowable. Regardless, if this is not allowed, a better error message is needed.
>
> To reproduce, run ``` daffodil save-parser -s test.dfdl.xsd test.dfdl.xsd.bin ``` on the attached schema. Relevent portion reproduced below:
> ```
> <xs:element name="x" dfdl:lengthKind="explicit" dfdl:length="\{ 1 }">
> <xs:complexType>
> <xs:sequence>
> <xs:element name="y" type="xs:int" dfdl:occursCountKind="expression" dfdl:occursCount='\{ if(dfdl:contentLength(.., "bits") eq 0) then 1 else 2 }' dfdl:inputValueCalc="\{ 1 }" />
> </xs:sequence>
> </xs:complexType>
> </xs:element>
> ```
>
> Full error is:
>
> ```
> !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
> !! An unexpected exception occurred. This is a bug! !!
> !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
> Please report this bug and help us fix it:
> https://daffodil.apache.org/community/#issue-tracker
> Please include the following exception, the command you
> ran, and any input, schema, or tdml files used that led
> to this bug.
> java.lang.NullPointerException
> at org.apache.daffodil.infoset.InfosetLengthUnknownException.<init>(InfosetImpl.scala:192)
> at org.apache.daffodil.infoset.InfosetContentLengthUnknownException.<init>(InfosetImpl.scala:201)
> at org.apache.daffodil.infoset.ContentLengthState.throwUnknown(InfosetImpl.scala:558)
> at org.apache.daffodil.infoset.LengthState.lengthInBits(InfosetImpl.scala:488)
> at org.apache.daffodil.dpath.DFDLLengthFunctionBase.$anonfun$getLength$1(DFDLFunctions2.scala:35)
> at org.apache.daffodil.dpath.DFDLLengthFunctionBase.$anonfun$getLength$1$adapted(DFDLFunctions2.scala:34)
> at org.apache.daffodil.dpath.DState$.withRetryIfBlocking(DState.scala:364)
> at org.apache.daffodil.dpath.DFDLLengthFunctionBase.getLength(DFDLFunctions2.scala:34)
> at org.apache.daffodil.dpath.DFDLLengthFunctionBase.computeValue(DFDLFunctions2.scala:70)
> at org.apache.daffodil.dpath.FNTwoArgsNodeAndValue.run(FNBases.scala:163)
> at org.apache.daffodil.dpath.CompiledDPath.run(DPathRuntime.scala:127)
> at org.apache.daffodil.dpath.CompareOperator.run(DPathRuntime.scala:230)
> at org.apache.daffodil.dpath.CompiledDPath.run(DPathRuntime.scala:127)
> at org.apache.daffodil.dpath.IF.run(DPathRuntime.scala:193)
> at org.apache.daffodil.dpath.CompiledDPath.run(DPathRuntime.scala:127)
> at org.apache.daffodil.dpath.CompiledDPath.runExpressionForConstant(DPathRuntime.scala:81)
> at org.apache.daffodil.dpath.DFDLPathExpressionParser.compile(DFDLExpressionParser.scala:55)
> at org.apache.daffodil.dsom.ExpressionCompiler.compileExpression1(CompiledExpression.scala:208)
> at org.apache.daffodil.dsom.ExpressionCompiler.compileExpression(CompiledExpression.scala:50)
> at org.apache.daffodil.dsom.ExpressionCompiler.compileProperty(CompiledExpression.scala:73)
> at org.apache.daffodil.dsom.ElementRuntimeValuedPropertiesMixin.$anonfun$occursCountExpr$1(RuntimePropertyMixins.scala:453)
> at org.apache.daffodil.oolag.OOLAG$OOLAGValue.liftedTree1$1(OOLAG.scala:585)
> at org.apache.daffodil.oolag.OOLAG$OOLAGValue.value$lzycompute(OOLAG.scala:583)
> at org.apache.daffodil.oolag.OOLAG$OOLAGValue.value(OOLAG.scala:581)
> at org.apache.daffodil.dsom.ElementRuntimeValuedPropertiesMixin.org$apache$daffodil$dsom$ElementRuntimeValuedPropertiesMixin$$occursCountExpr(RuntimePropertyMixins.scala:450)
> at org.apache.daffodil.dsom.ElementRuntimeValuedPropertiesMixin.org$apache$daffodil$dsom$ElementRuntimeValuedPropertiesMixin$$occursCountExpr$(RuntimePropertyMixins.scala:450)
> at org.apache.daffodil.dsom.LocalElementDecl.org$apache$daffodil$dsom$ElementRuntimeValuedPropertiesMixin$$occursCountExpr$lzycompute(LocalElementDecl.scala:22)
> at org.apache.daffodil.dsom.LocalElementDecl.org$apache$daffodil$dsom$ElementRuntimeValuedPropertiesMixin$$occursCountExpr(LocalElementDecl.scala:22)
> at org.apache.daffodil.dsom.ElementRuntimeValuedPropertiesMixin.occursCountEv(RuntimePropertyMixins.scala:457)
> at org.apache.daffodil.dsom.ElementRuntimeValuedPropertiesMixin.occursCountEv$(RuntimePropertyMixins.scala:456)
> at org.apache.daffodil.dsom.LocalElementDecl.occursCountEv$lzycompute(LocalElementDecl.scala:22)
> at org.apache.daffodil.dsom.LocalElementDecl.occursCountEv(LocalElementDecl.scala:22)
> at org.apache.daffodil.dsom.ElementRuntimeValuedPropertiesMixin.$anonfun$localElementPropertyReferencedElements$2(RuntimePropertyMixins.scala:484)
> at org.apache.daffodil.dsom.PropertyReferencedElementInfosMixin.ev$lzycompute$1(RealTermMixin.scala:32)
> at org.apache.daffodil.dsom.PropertyReferencedElementInfosMixin.ev$1(RealTermMixin.scala:32)
> at org.apache.daffodil.dsom.PropertyReferencedElementInfosMixin.propExprElts(RealTermMixin.scala:33)
> at org.apache.daffodil.dsom.PropertyReferencedElementInfosMixin.propExprElts$(RealTermMixin.scala:29)
> at org.apache.daffodil.dsom.LocalElementDecl.propExprElts(LocalElementDecl.scala:22)
> at org.apache.daffodil.dsom.ElementRuntimeValuedPropertiesMixin.localElementPropertyReferencedElements(RuntimePropertyMixins.scala:484)
> at org.apache.daffodil.dsom.ElementRuntimeValuedPropertiesMixin.org$apache$daffodil$dsom$ElementRuntimeValuedPropertiesMixin$$myPropertyContentReferencedElementInfos(RuntimePropertyMixins.scala:514)
> at org.apache.daffodil.dsom.ElementRuntimeValuedPropertiesMixin.org$apache$daffodil$dsom$ElementRuntimeValuedPropertiesMixin$$myPropertyContentReferencedElementInfos$(RuntimePropertyMixins.scala:513)
> at org.apache.daffodil.dsom.LocalElementDecl.org$apache$daffodil$dsom$ElementRuntimeValuedPropertiesMixin$$myPropertyContentReferencedElementInfos$lzycompute(LocalElementDecl.scala:22)
> at org.apache.daffodil.dsom.LocalElementDecl.org$apache$daffodil$dsom$ElementRuntimeValuedPropertiesMixin$$myPropertyContentReferencedElementInfos(LocalElementDecl.scala:22)
> at org.apache.daffodil.dsom.ElementRuntimeValuedPropertiesMixin.propertyContentReferencedElementInfos(RuntimePropertyMixins.scala:517)
> at org.apache.daffodil.dsom.ElementRuntimeValuedPropertiesMixin.propertyContentReferencedElementInfos$(RuntimePropertyMixins.scala:516)
> at org.apache.daffodil.dsom.LocalElementDecl.propertyContentReferencedElementInfos(LocalElementDecl.scala:22)
> at org.apache.daffodil.dsom.Term.contentLengthParserReferencedElementInfos(Term.scala:751)
> at org.apache.daffodil.dsom.Term.contentLengthParserReferencedElementInfos$(Term.scala:750)
> at org.apache.daffodil.dsom.LocalElementDecl.contentLengthParserReferencedElementInfos$lzycompute(LocalElementDecl.scala:22)
> at org.apache.daffodil.dsom.LocalElementDecl.contentLengthParserReferencedElementInfos(LocalElementDecl.scala:22)
> at org.apache.daffodil.dsom.Term.$anonfun$contentLengthParserReferencedElementInfos$1(Term.scala:755)
> at scala.collection.LinearSeqOptimized.foldLeft(LinearSeqOptimized.scala:122)
> at scala.collection.LinearSeqOptimized.foldLeft$(LinearSeqOptimized.scala:118)
> at scala.collection.immutable.List.foldLeft(List.scala:86)
> at org.apache.daffodil.dsom.Term.contentLengthParserReferencedElementInfos(Term.scala:755)
> at org.apache.daffodil.dsom.Term.contentLengthParserReferencedElementInfos$(Term.scala:750)
> at org.apache.daffodil.dsom.ModelGroup.contentLengthParserReferencedElementInfos$lzycompute(ModelGroup.scala:129)
> at org.apache.daffodil.dsom.ModelGroup.contentLengthParserReferencedElementInfos(ModelGroup.scala:129)
> at org.apache.daffodil.dsom.Term.$anonfun$contentLengthParserReferencedElementInfos$1(Term.scala:755)
> at scala.collection.LinearSeqOptimized.foldLeft(LinearSeqOptimized.scala:122)
> at scala.collection.LinearSeqOptimized.foldLeft$(LinearSeqOptimized.scala:118)
> at scala.collection.immutable.List.foldLeft(List.scala:86)
> at org.apache.daffodil.dsom.Term.contentLengthParserReferencedElementInfos(Term.scala:755)
> at org.apache.daffodil.dsom.Term.contentLengthParserReferencedElementInfos$(Term.scala:750)
> at org.apache.daffodil.dsom.AbstractElementRef.contentLengthParserReferencedElementInfos$lzycompute(ElementRef.scala:31)
> at org.apache.daffodil.dsom.AbstractElementRef.contentLengthParserReferencedElementInfos(ElementRef.scala:31)
> at org.apache.daffodil.dsom.ElementBase.isReferencedByContentLengthParserExpressions(ElementBase.scala:177)
> at org.apache.daffodil.dsom.ElementBase.isReferencedByContentLengthParserExpressions$(ElementBase.scala:173)
> at org.apache.daffodil.dsom.AbstractElementRef.isReferencedByContentLengthParserExpressions$lzycompute(ElementRef.scala:31)
> at org.apache.daffodil.dsom.AbstractElementRef.isReferencedByContentLengthParserExpressions(ElementRef.scala:31)
> at org.apache.daffodil.grammar.primitives.CaptureContentLengthStart.parser(ElementCombinator.scala:229)
> at org.apache.daffodil.grammar.SeqComp.$anonfun$parserChildren$2(Grammar.scala:95)
> at scala.collection.TraversableLike.$anonfun$map$1(TraversableLike.scala:234)
> at scala.collection.immutable.List.foreach(List.scala:389)
> at scala.collection.TraversableLike.map(TraversableLike.scala:234)
> at scala.collection.TraversableLike.map$(TraversableLike.scala:227)
> at scala.collection.immutable.List.map(List.scala:295)
> at org.apache.daffodil.grammar.SeqComp.parserChildren$lzycompute(Grammar.scala:95)
> at org.apache.daffodil.grammar.SeqComp.parserChildren(Grammar.scala:95)
> at org.apache.daffodil.grammar.SeqComp.parser$lzycompute(Grammar.scala:98)
> at org.apache.daffodil.grammar.SeqComp.parser(Grammar.scala:97)
> at org.apache.daffodil.grammar.Prod.parser$lzycompute(Production.scala:80)
> at org.apache.daffodil.grammar.Prod.parser(Production.scala:76)
> at org.apache.daffodil.grammar.Gram.maybeParser(GrammarTerm.scala:127)
> at org.apache.daffodil.grammar.primitives.ElementCombinatorBase.eParser$lzycompute(ElementCombinator.scala:443)
> at org.apache.daffodil.grammar.primitives.ElementCombinatorBase.eParser(ElementCombinator.scala:443)
> at org.apache.daffodil.grammar.primitives.ElementParseAndUnspecifiedLength.parser$lzycompute(ElementCombinator.scala:350)
> at org.apache.daffodil.grammar.primitives.ElementParseAndUnspecifiedLength.parser(ElementCombinator.scala:339)
> at org.apache.daffodil.grammar.primitives.ElementCombinator.parser$lzycompute(ElementCombinator.scala:95)
> at org.apache.daffodil.grammar.primitives.ElementCombinator.parser(ElementCombinator.scala:89)
> at org.apache.daffodil.grammar.Prod.parser$lzycompute(Production.scala:80)
> at org.apache.daffodil.grammar.Prod.parser(Production.scala:76)
> at org.apache.daffodil.grammar.Prod.parser$lzycompute(Production.scala:80)
> at org.apache.daffodil.grammar.Prod.parser(Production.scala:76)
> at org.apache.daffodil.compiler.ProcessorFactory.$anonfun$parser$1(Compiler.scala:79)
> at org.apache.daffodil.oolag.OOLAG$OOLAGValue.liftedTree1$1(OOLAG.scala:585)
> at org.apache.daffodil.oolag.OOLAG$OOLAGValue.value$lzycompute(OOLAG.scala:583)
> at org.apache.daffodil.oolag.OOLAG$OOLAGValue.value(OOLAG.scala:581)
> at org.apache.daffodil.compiler.ProcessorFactory.parser$lzycompute(Compiler.scala:78)
> at org.apache.daffodil.compiler.ProcessorFactory.parser(Compiler.scala:78)
> at org.apache.daffodil.compiler.ProcessorFactory.$anonfun$new$3(Compiler.scala:103)
> at org.apache.daffodil.oolag.OOLAG$OOLAGValue.liftedTree1$1(OOLAG.scala:585)
> at org.apache.daffodil.oolag.OOLAG$OOLAGValue.value$lzycompute(OOLAG.scala:583)
> at org.apache.daffodil.oolag.OOLAG$OOLAGValue.value(OOLAG.scala:581)
> at org.apache.daffodil.oolag.OOLAG$OOLAGValue.valueAsAny(OOLAG.scala:579)
> at org.apache.daffodil.oolag.OOLAG$OOLAGHost.$anonfun$checkErrors$2(OOLAG.scala:287)
> at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
> at org.apache.daffodil.oolag.OOLAG$.keepGoing(OOLAG.scala:60)
> at org.apache.daffodil.oolag.OOLAG$OOLAGHost.checkErrors(OOLAG.scala:287)
> at org.apache.daffodil.oolag.OOLAG$OOLAGHost.checkErrors$(OOLAG.scala:278)
> at org.apache.daffodil.dsom.SchemaComponentImpl.checkErrors(SchemaComponent.scala:37)
> at org.apache.daffodil.oolag.OOLAG$OOLAGHost.isError(OOLAG.scala:346)
> at org.apache.daffodil.oolag.OOLAG$OOLAGHost.isError$(OOLAG.scala:345)
> at org.apache.daffodil.compiler.ProcessorFactory.super$isError(Compiler.scala:118)
> at org.apache.daffodil.compiler.ProcessorFactory.$anonfun$isError$3(Compiler.scala:118)
> at scala.runtime.java8.JFunction0$mcZ$sp.apply(JFunction0$mcZ$sp.java:12)
> at org.apache.daffodil.oolag.OOLAG$.keepGoing(OOLAG.scala:60)
> at org.apache.daffodil.compiler.ProcessorFactory.$anonfun$isError$1(Compiler.scala:109)
> at scala.runtime.java8.JFunction0$mcZ$sp.apply(JFunction0$mcZ$sp.java:12)
> at scala.util.DynamicVariable.withValue(DynamicVariable.scala:58)
> at org.apache.daffodil.ExecutionMode$.$anonfun$usingCompilerMode$1(ExecutionMode.scala:64)
> at org.apache.daffodil.compiler.ProcessorFactory.isError(Compiler.scala:109)
> at org.apache.daffodil.compiler.Compiler.compileSource(Compiler.scala:336)
> at org.apache.daffodil.Main$.$anonfun$createProcessorFromSchema$1(Main.scala:715)
> at org.apache.daffodil.util.Timer$.getTimeResult(Timer.scala:76)
> at org.apache.daffodil.util.Timer$.getResult(Timer.scala:35)
> at org.apache.daffodil.Main$.createProcessorFromSchema(Main.scala:714)
> at org.apache.daffodil.Main$.run(Main.scala:1166)
> at org.apache.daffodil.Main$.main(Main.scala:1341)
> at org.apache.daffodil.Main.main(Main.scala)
> ```
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)