[prev in list] [next in list] [prev in thread] [next in thread] 

List:       xmlbeans-dev
Subject:    [jira] Resolved: (XMLBEANS-222) new XmlStreamReader from XmlObject
From:       "Cezar Andrei (JIRA)" <xmlbeans-dev () xml ! apache ! org>
Date:       2006-05-09 0:13:27
Message-ID: 20028870.1147133607343.JavaMail.jira () brutus
[Download RAW message or body]

     [ http://issues.apache.org/jira/browse/XMLBEANS-222?page=all ]
     
Cezar Andrei resolved XMLBEANS-222:
-----------------------------------

    Resolution: Fixed

There are two things happening here:
1. the semantics of XmlObject.newXMLStreamReader() is not exactly the same as \
XMLInputFactory.newInstance().createXMLStreamReader(). The difference is that it \
doesn't emit the start/end doc events, this is because in general an XmlObject \
represents the content and there isn't a special case for a Document XmlObject. 2. \
Once you get an XMLStreamReader the code calls imediately next() which advances the \
reader to the next event after Soaf:Envelope, so efectively missing the namespaces.  \
while (reader.hasNext()) {  int event = reader.next();


To catch the namespaces in question the test code has to be modified in one of the \
two following ways:

1) add an option to start with START_DOC event
        XmlOptions opts = new XmlOptions().setSaveOuter();
        XMLStreamReader reader = object.newXMLStreamReader(opts);

2) or modify the logic to check the first event
        XMLStreamReader reader = object.newXMLStreamReader();

        boolean foundXsiNamespace = false;
        int event = reader.getEventType();
        do
        {
            if (event == XMLStreamReader.START_ELEMENT)
            {
                for (int i = 0; i < reader.getNamespaceCount(); i++)
                {
                    if (reader.getNamespacePrefix(i).equals("xsi"))
                    {
                        foundXsiNamespace = true;
                    }
                    System.out.println("  testXMLStreamReader Namespace " + \
reader.getNamespacePrefix(i) + " : " +  reader.getNamespaceURI(i));
                }
            }
            event = reader.next();
        }
        while (reader.hasNext());
        System.out.println("    xsi Namespace: " + foundXsiNamespace);

> new XmlStreamReader from XmlObject doesn't capture xsi namespace in outer element
> ---------------------------------------------------------------------------------
> 
> Key: XMLBEANS-222
> URL: http://issues.apache.org/jira/browse/XMLBEANS-222
> Project: XMLBeans
> Type: Bug

> Components: XmlObject
> Versions: Version 2
> Environment: jdk 1.4.2_08, xmlbeans 2.0
> Reporter: Brian Bonner
> Attachments: XmlStreamReaderTest.java
> 
> I'll attach a test case.
> I'm parsing a SOAP envelope which has the xsi namespace declared in the outer \
> envelope.  An element of the body uses the prefix for one of it's attributes (i.e. \
> xsi:nil="true"). reader.getNamespaceCount() doesn't seem to find it.  If we create \
> the XMLStream from a reader using an InputFactory (vs. using the creator from \
> JSR173.class, it works, but will probably be slower.)

-- 
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: dev-unsubscribe@xmlbeans.apache.org
For additional commands, e-mail: dev-help@xmlbeans.apache.org


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic