Generated Unmarshaller may not work with streaming XML
------------------------------------------------------

         Key: JIBX-60
         URL: http://jira.codehaus.org/browse/JIBX-60
     Project: JiBX
        Type: Bug
  Components: core  
    Versions: CVS    
    Reporter: Chris Chen


I am continuing to make JiBX work properly with streaming XML.  I ran into a 
problem, which I will describe here:

Let's say that I have a streaming xml as follows:

<stream>
  <features>
    <starttls><required/></starttls>
  </features>
 ...... keeps going until communication closes....
</stream>


I have created a custom unmarshaller for <starttls>.  <features> is specified 
in the binding file and the unmarshaller is generated by the binding compiler.  

Since this is a streaming xml, after </features> is received, the </features> 
end tag is the last to be sent.  There may be other data coming afterwards but 
</stream> is the last tag to be received to end the document.  

The problem is that the generated unmarshalling code for the <features> element 
is something like this:

parsePastStartTag(null, "features");
//retrieve unmarshaller for <starttls>
//unmarshall <starttls>
parsePastEndTag(null, "features");

The last line of code is what causes the problem.  By using parsePastEndTag(), 
the generated code will try to read past the end tag AND advance to the next 
major tag event (parsePastEndTag() first calls toEnd() and subsequently calls 
advance()).  The advance() method hangs my code because it is continually 
trying to read data from the socket's input stream.  However, there is nothing 
to read, so it tries forever.  

The reason is that the remote entity only sends data up to the character '>' of 
"</features>".

My proposal is that the generated unmarshalling code should use toEnd() rather 
than parsePastEndTag().  This should not be a problem for subsequent 
unmarshalling of other elements because isAt() is usually called first anyways, 
which will advance the parser position to the next tag, essentially doing 
something similar to parsePastEndTag().



-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://jira.codehaus.org/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira



-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users.
Discover which products truly live up to the hype. Start reading now.
http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click
_______________________________________________
jibx-devs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jibx-devs

Reply via email to