Nested XML - CData inconsistencies
----------------------------------

         Key: XMLBEANS-241
         URL: http://issues.apache.org/jira/browse/XMLBEANS-241
     Project: XMLBeans
        Type: Bug
  Components: XmlObject  
 Environment: XP Professional
    Reporter: Keith Daurs
    Priority: Critical


Trying to insert XML data into an existing XML document. Success of this 
operation appears to be dependant on the size of data held in the nested XML 
child elements. Operation works fine up to a certain size with nested XML 
correctly wrapped within CDATA. However, if child elements are over a certain 
size then nested XML is not recognised as CDATA and the <> chars are escaped, 
causing parsing problems further down the line. 

For an example I have used the EasyPO xsd as provided on the XMLBeans website, 
and adding the folowing data as my nested XML:

SUCCESSFUL RUN

<nestedXML>
        <testData>
        <textDataOne>hello world hello world hello world hello world hello 
world hello world hello world hello world hello world hello world hello world 
hello world hello world hello world hello world hello world hello world hello 
world hello world hello world hello world hello world hello world hello world 
hello world hello world hello world </textDataOne>
        <sizeTextDataOne>324 bytes</sizeTextDataOne>
        <textDataTwo>hello</textDataTwo>
        <sizeTextDataTwo>5 bytes</sizeTextDataTwo>
        </testData>
</nestedXML>

Output as follows:

<?xml version="1.0" encoding="UTF-8"?>
<purchase-order xmlns="http://openuri.org/easypo";>
    <customer>
        <name>Gladys Kravitz</name>
        <address>Anytown, PA</address>
    </customer>
    <date>2003-01-07T14:16:00-05:00</date>
    <line-item>
        <description>Burnham's Celestial Handbook, Vol 1</description>
        <per-unit-ounces>5</per-unit-ounces>
        <price>21.79</price>
        <quantity>2</quantity>
    </line-item>
    <line-item>
        <description>Burnham's Celestial Handbook, Vol 2</description>
        <per-unit-ounces>5</per-unit-ounces>
        <price>19.89</price>
        <quantity>2</quantity>
    </line-item>
    <line-item><description><![CDATA[<nestedXML>
        <testData>
        <textDataOne>hello world hello world hello world hello world hello 
world hello world hello world hello world hello world hello world hello world 
hello world hello world hello world hello world hello world hello world hello 
world hello world hello world hello world hello world hello world hello world 
hello world hello world hello world </textDataOne>
        <sizeTextDataOne>324 bytes</sizeTextDataOne>
        <textDataTwo>hello</textDataTwo>
        <sizeTextDataTwo>5 bytes</sizeTextDataTwo>
        </testData>
</nestedXML>]]></description></line-item><shipper>
        <name>ZipShip</name>
        <per-ounce-rate>0.74</per-ounce-rate>
    </shipper>
</purchase-order>

UNSUCCESSFUL RUN

<nestedXML>
        <testData>
        <textDataOne>hello world hello world hello world hello world hello 
world hello world hello world hello world hello world hello world hello world 
hello world hello world hello world hello world hello world hello world hello 
world hello world hello world hello world hello world hello world hello world 
hello world hello world hello world </textDataOne>
        <sizeTextDataOne>324 bytes</sizeTextDataOne>
        <textDataTwo>hello world hello world hello world hello world hello 
world hello world hello world hello world hello world hello world hello world 
hello world hello world hello world hello world hello world hello world hello 
world hello world hello world hello world hello world hello world hello world 
hello world hello world hello world </textDataTwo>
        <sizeTextDataTwo>324 bytes</sizeTextDataTwo>
        </testData>
</nestedXML>

Output as follows:

<?xml version="1.0" encoding="UTF-8"?>
<purchase-order xmlns="http://openuri.org/easypo";>
    <customer>
        <name>Gladys Kravitz</name>
        <address>Anytown, PA</address>
    </customer>
    <date>2003-01-07T14:16:00-05:00</date>
    <line-item>
        <description>Burnham's Celestial Handbook, Vol 1</description>
        <per-unit-ounces>5</per-unit-ounces>
        <price>21.79</price>
        <quantity>2</quantity>
    </line-item>
    <line-item>
        <description>Burnham's Celestial Handbook, Vol 2</description>
        <per-unit-ounces>5</per-unit-ounces>
        <price>19.89</price>
        <quantity>2</quantity>
    </line-item>
    <line-item><description>&lt;nestedXML>
        &lt;testData>
        &lt;textDataOne>hello world hello world hello world hello world hello 
world hello world hello world hello world hello world hello world hello world 
hello world hello world hello world hello world hello world hello world hello 
world hello world hello world hello world hello world hello world hello world 
hello world hello world hello world &lt;/textDataOne>
        &lt;sizeTextDataOne>324 bytes&lt;/sizeTextDataOne>
        &lt;textDataTwo>hello world hello world hello world hello world hello 
world hello world hello world hello world hello world hello world hello world 
hello world hello world hello world hello world hello world hello world hello 
world hello world hello world hello world hello world hello world hello world 
hello world hello world hello world &lt;/textDataTwo>
        &lt;sizeTextDataTwo>324 bytes&lt;/sizeTextDataTwo>
        &lt;/testData>
&lt;/nestedXML></description></line-item><shipper>
        <name>ZipShip</name>
        <per-ounce-rate>0.74</per-ounce-rate>
    </shipper>
</purchase-order>

Example code used:

import java.io.File;
import java.io.IOException;

import org.apache.xmlbeans.XmlException;
import org.apache.xmlbeans.XmlObject;
import org.openuri.easypo.LineItem;
import org.openuri.easypo.PurchaseOrderDocument;

/**
 * @author
 *
 */
public class XMLBeanTester
{

        /**
         * @param args
         */
        public static void main(String[] args)
        {
                new XMLBeanTester().testXMLBeans();
        }
        
        public void testXMLBeans()
        {
                File xmlFile = new File("myPO.xml");
                String test_XML_data = "nested_xml.xml";

                try
                {
                        PurchaseOrderDocument PODoc = 
PurchaseOrderDocument.Factory.parse(xmlFile);
                        XmlObject xml = XmlObject.Factory.parse(new 
File(test_XML_data));               
                        LineItem item = 
PODoc.getPurchaseOrder().addNewLineItem();
                        item.setDescription(xml.xmlText());     
                        PODoc.save(new File("myNewPO.xml"));
                }
                catch (XmlException e)
                {
                        System.out.println("XML Problem:- ");
                        e.printStackTrace();
                }
                catch (IOException e)
                {
                        System.out.println("IO Problem:- ");
                        e.printStackTrace();
                } 
        }
}

Is this a known bug or I am I missing something fundamental (quite possible!)? 
Any input will be appreciated as this is now having a serious impact on our 
project.

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


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to