[ 
https://issues.apache.org/jira/browse/DAFFODIL-3003?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Steve Lawrence resolved DAFFODIL-3003.
--------------------------------------
    Fix Version/s: 4.0.0
       Resolution: Fixed

Fixed in commit 2f5e44777b063d2789399a2f258cf0d35bc18e08

> Unparsing streamed data without --stream causes NullPointerException
> --------------------------------------------------------------------
>
>                 Key: DAFFODIL-3003
>                 URL: https://issues.apache.org/jira/browse/DAFFODIL-3003
>             Project: Daffodil
>          Issue Type: Bug
>          Components: Back End, CLI
>    Affects Versions: 3.10.0
>            Reporter: Steve Lawrence
>            Priority: Major
>             Fix For: 4.0.0
>
>
> If you parse data using the --stream option, e.g.
> {code:xml}
> daffodil parse -s foo.dfdl.xsd --stream data.bin > data.xml
> {code}
> Then the resulting XML is a bunch of XML infosets separated by a NUL 
> character. This NUL character is used by the CLI to delimit infosets when 
> unparsing with something like
> {code:xml}
> daffodil unparse -s foo.dfdl.xsd --stream data.xml
> {code}
> But if you try to unaprse that file without the --stream option, e.g.
> {code:xml}
> daffodil unparse -s foo.dfdl.xsd data.xml
> {code}
> Then you get the following null pointer exception:
> {code}
> java.lang.NullPointerException
>       at 
> com.ctc.wstx.sr.InputElementStack.getCurrentNsCount(InputElementStack.java:1029)
>       at 
> com.ctc.wstx.sr.BasicStreamReader.getNamespaceCount(BasicStreamReader.java:807)
>       at 
> org.codehaus.stax2.ri.evt.EndElementEventImpl.<init>(EndElementEventImpl.java:35)
>       at 
> com.ctc.wstx.evt.DefaultEventAllocator.allocate(DefaultEventAllocator.java:159)
>       at 
> org.apache.daffodil.runtime1.infoset.XMLTextInfosetInputter.liftedTree2$1(XMLTextInfosetInputter.scala:406)
>       at 
> org.apache.daffodil.runtime1.infoset.XMLTextInfosetInputter.nextTagOrEndDocument(XMLTextInfosetInputter.scala:400)
>       at 
> org.apache.daffodil.runtime1.infoset.XMLTextInfosetInputter.next(XMLTextInfosetInputter.scala:381)
>       at 
> org.apache.daffodil.runtime1.infoset.InfosetInputter.reallyFill(InfosetInputter.scala:302)
>       at 
> org.apache.daffodil.runtime1.infoset.InfosetInputter.fill(InfosetInputter.scala:291)
>       at 
> org.apache.daffodil.lib.util.CursorImplMixin.doAdvance(Cursor.scala:198)
>       at 
> org.apache.daffodil.lib.util.CursorImplMixin.advance(Cursor.scala:158)
>       at 
> org.apache.daffodil.lib.util.CursorImplMixin.advance$(Cursor.scala:155)
>       at 
> org.apache.daffodil.runtime1.infoset.InfosetInputter.advance(InfosetInputter.scala:82)
>       at 
> org.apache.daffodil.runtime1.processors.unparsers.UStateMain.advance(UState.scala:606)
>       at org.apache.daffodil.lib.util.Cursor.advanceMaybe(Cursor.scala:107)
>       at org.apache.daffodil.lib.util.Cursor.advanceMaybe$(Cursor.scala:106)
>       at 
> org.apache.daffodil.runtime1.processors.unparsers.UState.advanceMaybe(UState.scala:72)
>       at 
> org.apache.daffodil.runtime1.processors.DataProcessor.doUnparse(DataProcessor.scala:669)
>       at 
> org.apache.daffodil.runtime1.processors.DataProcessor.unparse(DataProcessor.scala:557)
>       at 
> org.apache.daffodil.runtime1.processors.DataProcessor.unparse(DataProcessor.scala:541)
>       at 
> org.apache.daffodil.cli.InfosetHandler.unparseWithInfosetInputter(InfosetTypes.scala:219)
>       at 
> org.apache.daffodil.cli.InfosetHandler.unparseWithInfosetInputter$(InfosetTypes.scala:215)
>       at 
> org.apache.daffodil.cli.XMLTextInfosetHandler.unparseWithInfosetInputter(InfosetTypes.scala:286)
>       at 
> org.apache.daffodil.cli.XMLTextInfosetHandler.unparse(InfosetTypes.scala:300)
>       at 
> org.apache.daffodil.cli.Main.$anonfun$runIgnoreExceptions$31(Main.scala:1609)
>       at org.apache.daffodil.lib.util.Timer$.getTimeResult(Timer.scala:78)
>       at org.apache.daffodil.lib.util.Timer$.getResult(Timer.scala:37)
>       at org.apache.daffodil.cli.Main.runIgnoreExceptions(Main.scala:1609)
>       at org.apache.daffodil.cli.Main.run(Main.scala:2001)
>       at org.apache.daffodil.cli.Main$.main(Main.scala:916)
>       at org.apache.daffodil.cli.Main.main(Main.scala)
> {code}
> An error is correct since this infoset is invalid, but we should get a better 
> diagnostics that says the input XML is invalid, and not an exception. The 
> XMLTextInfosetInputter should be able to detect this and create an 
> appropriate error.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to