You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by jb...@apache.org on 2006/06/22 01:10:00 UTC

svn commit: r416162 - in /incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/util/resource: DataObjectXMLStreamReader.java SDOXMLResourceImpl.java XMLDocumentStreamReader.java

Author: jboynes
Date: Wed Jun 21 16:09:59 2006
New Revision: 416162

URL: http://svn.apache.org/viewvc?rev=416162&view=rev
Log:
apply patch from Raymond Feng for stax serialization improvements

Modified:
    incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/util/resource/DataObjectXMLStreamReader.java
    incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/util/resource/SDOXMLResourceImpl.java
    incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/util/resource/XMLDocumentStreamReader.java

Modified: incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/util/resource/DataObjectXMLStreamReader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/util/resource/DataObjectXMLStreamReader.java?rev=416162&r1=416161&r2=416162&view=diff
==============================================================================
--- incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/util/resource/DataObjectXMLStreamReader.java (original)
+++ incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/util/resource/DataObjectXMLStreamReader.java Wed Jun 21 16:09:59 2006
@@ -862,7 +862,7 @@
      */
     private void registerNamespace(String prefix, String uri) {
         if (!uri.equals(namespaceContext.getNamespaceURI(prefix))) {
-            namespaceContext.put(prefix, uri);
+            namespaceContext.registerMapping(prefix, uri);
             declaredNamespaceMap.put(prefix, uri);
         }
     }
@@ -1301,7 +1301,7 @@
             // namespaces are having no prefixes
             if (!uri.equals(namespaceContext.getNamespaceURI(prefix))) {
                 // this namespace is not there. Need to declare it
-                namespaceContext.put(prefix, uri);
+                namespaceContext.registerMapping(prefix, uri);
             }
         }
 
@@ -1416,19 +1416,22 @@
     protected static class DelegatingNamespaceContext implements NamespaceContext {
         private NamespaceContext parent;
 
-        private Map nsMap = new HashMap();
+        private Map prefixToNamespaceMapping = new HashMap();
 
         public DelegatingNamespaceContext(NamespaceContext parent) {
             super();
             this.parent = parent;
 
-            nsMap.put("xml", "http://www.w3.org/XML/1998/namespace");
-            nsMap.put("xmlns", "http://www.w3.org/2000/xmlns/");
-            nsMap.put("xsi", "http://www.w3.org/2001/XMLSchema-instance");
+            prefixToNamespaceMapping.put("xml", "http://www.w3.org/XML/1998/namespace");
+            prefixToNamespaceMapping.put("xmlns", "http://www.w3.org/2000/xmlns/");
+            prefixToNamespaceMapping.put("xsi", "http://www.w3.org/2001/XMLSchema-instance");
         }
 
         public String getNamespaceURI(String prefix) {
-            String ns = (String) nsMap.get(prefix);
+            if (prefix == null)
+                throw new IllegalArgumentException("Prefix is null");
+
+            String ns = (String) prefixToNamespaceMapping.get(prefix);
             if (ns != null)
                 return ns;
             else if (parent != null)
@@ -1440,7 +1443,7 @@
         public String getPrefix(String nsURI) {
             if (nsURI == null)
                 throw new IllegalArgumentException("Namespace is null");
-            for (Iterator i = nsMap.entrySet().iterator(); i.hasNext();) {
+            for (Iterator i = prefixToNamespaceMapping.entrySet().iterator(); i.hasNext();) {
                 Map.Entry entry = (Map.Entry) i.next();
                 if (entry.getValue().equals(nsURI)) {
                     return (String) entry.getKey();
@@ -1454,17 +1457,22 @@
 
         public Iterator getPrefixes(String nsURI) {
             List prefixList = new ArrayList();
-            for (Iterator i = nsMap.entrySet().iterator(); i.hasNext();) {
+            for (Iterator i = prefixToNamespaceMapping.entrySet().iterator(); i.hasNext();) {
                 Map.Entry entry = (Map.Entry) i.next();
                 if (entry.getValue().equals(nsURI)) {
                     prefixList.add(entry.getKey());
                 }
             }
+            if (parent != null) {
+                for (Iterator i = parent.getPrefixes(nsURI); i.hasNext();) {
+                    prefixList.add(i.next());
+                }
+            }
             return prefixList.iterator();
         }
 
-        public void put(String prefix, String nsURI) {
-            nsMap.put(prefix, nsURI);
+        public void registerMapping(String prefix, String nsURI) {
+            prefixToNamespaceMapping.put(prefix, nsURI);
         }
 
         private int counter = 0;
@@ -1476,12 +1484,12 @@
             if (prefix == null)
                 prefix = "";
             if (nsURI != null)
-                nsMap.put(prefix, nsURI);
+                prefixToNamespaceMapping.put(prefix, nsURI);
             return new QName(nsURI, name, prefix);
         }
 
-        public void remove(String prefix) {
-            nsMap.remove(prefix);
+        public void removeMapping(String prefix) {
+            prefixToNamespaceMapping.remove(prefix);
         }
 
         public void setParent(NamespaceContext parent) {

Modified: incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/util/resource/SDOXMLResourceImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/util/resource/SDOXMLResourceImpl.java?rev=416162&r1=416161&r2=416162&view=diff
==============================================================================
--- incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/util/resource/SDOXMLResourceImpl.java (original)
+++ incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/util/resource/SDOXMLResourceImpl.java Wed Jun 21 16:09:59 2006
@@ -79,7 +79,7 @@
 
                     uri = null;
                 }
-                return uri != null ? uri : super.getURI(prefix);
+                return uri != null && uri.length()!=0 ? uri : super.getURI(prefix);
             }
 
             public StreamNamespaceSupport(XMLStreamReader reader) {

Modified: incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/util/resource/XMLDocumentStreamReader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/util/resource/XMLDocumentStreamReader.java?rev=416162&r1=416161&r2=416162&view=diff
==============================================================================
--- incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/util/resource/XMLDocumentStreamReader.java (original)
+++ incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/util/resource/XMLDocumentStreamReader.java Wed Jun 21 16:09:59 2006
@@ -3,6 +3,8 @@
  */
 package org.apache.tuscany.sdo.util.resource;
 
+import java.util.NoSuchElementException;
+
 import javax.xml.namespace.NamespaceContext;
 import javax.xml.namespace.QName;
 import javax.xml.stream.Location;
@@ -10,22 +12,24 @@
 import javax.xml.stream.XMLStreamReader;
 
 /**
- * This class is derived from Apache Axis2 class 
- * <a href="http://svn.apache.org/repos/asf/webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/util/StreamWrapper.java">
- * org.apache.axis2.util.StreamWrapper</a>. It's used wrap a XMLStreamReader to create a XMLStreamReader representing a document and
- * it will produce START_DOCUMENT, END_DOCUMENT events.
- *
+ * This class is derived from Apache Axis2 class <a
+ * href="http://svn.apache.org/repos/asf/webservices/axis2/trunk/java/modules/core/src/org/apache/axis2/util/StreamWrapper.java">
+ * org.apache.axis2.util.StreamWrapper</a>. It's used wrap a XMLStreamReader to create a XMLStreamReader representing a document and it will produce
+ * START_DOCUMENT, END_DOCUMENT events.
+ * 
  */
 public class XMLDocumentStreamReader implements XMLStreamReader {
-    private static final int STATE_SWITCHED = 0;
-    private static final int STATE_INIT = 1;
-    private static final int STATE_SWITCH_AT_NEXT = 2;
-    private static final int STATE_COMPLETE_AT_NEXT = 3;
-    private static final int STATE_COMPLETED = 4;
+    private static final int STATE_INIT = 0; // The wrapper will produce START_DOCUMENT
+
+    private static final int STATE_SWITCHED = 1; // The real reader will produce events
+
+    private static final int STATE_COMPLETE_AT_NEXT = 2; // The wrapper will produce END_DOCUMENT
+
+    private static final int STATE_COMPLETED = 3; // Done
+
     private XMLStreamReader realReader = null;
-    private int state = STATE_INIT;
-    private int prevState = state;
 
+    private int state = STATE_INIT;
 
     public XMLDocumentStreamReader(XMLStreamReader realReader) {
         if (realReader == null) {
@@ -33,63 +37,52 @@
         }
 
         this.realReader = realReader;
+
+        // If the real reader is positioned at START_DOCUMENT, always use the real reader
+        if (realReader.getEventType() == START_DOCUMENT)
+            state = STATE_SWITCHED;
     }
 
     public void close() throws XMLStreamException {
-        if (prevState != STATE_INIT) {
-            realReader.close();
-        } else {
-            throw new XMLStreamException();
-        }
+        realReader.close();
     }
 
     public int next() throws XMLStreamException {
-        prevState = state;
         int returnEvent = -1;
 
         switch (state) {
-            // Commented out by Raymond Feng. It's a bug in the Axis2 code and it will produce START_DOCUMENT twice
-            /*
-            case STATE_INIT:
-                if (realReader.getEventType() == START_DOCUMENT) {
-                    state = STATE_SWITCHED;
-                    returnEvent = realReader.getEventType();
-                } else {
-                    state = STATE_SWITCH_AT_NEXT;
-                    returnEvent = START_DOCUMENT;
-                }
-                break;
-            */    
-            case STATE_SWITCHED:
-                returnEvent = realReader.next();
-                if (returnEvent == END_DOCUMENT) {
-                    state = STATE_COMPLETED;
-                } else if (!realReader.hasNext()) {
-                    state = STATE_COMPLETE_AT_NEXT;
-                }
-                break;
-            case STATE_INIT:
-                prevState = STATE_SWITCH_AT_NEXT;
-            case STATE_SWITCH_AT_NEXT:
-                state = STATE_SWITCHED;
-                returnEvent = realReader.getEventType();
-                break;
-            case STATE_COMPLETE_AT_NEXT:
+        case STATE_SWITCHED:
+            returnEvent = realReader.next();
+            if (returnEvent == END_DOCUMENT) {
                 state = STATE_COMPLETED;
-                returnEvent = END_DOCUMENT;
-                break;
-            case STATE_COMPLETED:
-                //oops - no way we can go beyond this
-                throw new XMLStreamException("end reached!");
-            default:
-                throw new UnsupportedOperationException();
+            } else if (!realReader.hasNext()) {
+                state = STATE_COMPLETE_AT_NEXT;
+            }
+            break;
+        case STATE_INIT:
+            state = STATE_SWITCHED;
+            returnEvent = realReader.getEventType();
+            break;
+        case STATE_COMPLETE_AT_NEXT:
+            state = STATE_COMPLETED;
+            returnEvent = END_DOCUMENT;
+            break;
+        case STATE_COMPLETED:
+            // oops - no way we can go beyond this
+            throw new NoSuchElementException("End of stream has reached.");
+        default:
+            throw new UnsupportedOperationException();
         }
 
         return returnEvent;
     }
 
+    private boolean isDelegating() {
+        return state == STATE_SWITCHED || state == STATE_COMPLETE_AT_NEXT;
+    }
+
     public int nextTag() throws XMLStreamException {
-        if (prevState != STATE_INIT) {
+        if (isDelegating()) {
             return realReader.nextTag();
         } else {
             throw new XMLStreamException();
@@ -97,13 +90,13 @@
     }
 
     public void require(int i, String s, String s1) throws XMLStreamException {
-        if (prevState != STATE_INIT) {
+        if (isDelegating()) {
             realReader.require(i, s, s1);
         }
     }
 
     public boolean standaloneSet() {
-        if (prevState != STATE_INIT) {
+        if (isDelegating()) {
             return realReader.standaloneSet();
         } else {
             return false;
@@ -111,79 +104,75 @@
     }
 
     public int getAttributeCount() {
-        if (prevState != STATE_INIT) {
+        if (isDelegating()) {
             return realReader.getAttributeCount();
         } else {
-            return 0;
+            throw new IllegalStateException();
         }
     }
 
     public String getAttributeLocalName(int i) {
-        if (prevState != STATE_INIT) {
+        if (isDelegating()) {
             return realReader.getAttributeLocalName(i);
         } else {
-            return null;
+            throw new IllegalStateException();
         }
     }
 
     public QName getAttributeName(int i) {
-        if (prevState != STATE_INIT) {
+        if (isDelegating()) {
             return realReader.getAttributeName(i);
         } else {
-            return null;
+            throw new IllegalStateException();
         }
     }
 
     public String getAttributeNamespace(int i) {
-        if (prevState != STATE_INIT) {
+        if (isDelegating()) {
             return realReader.getAttributeNamespace(i);
         } else {
-            return null;
+            throw new IllegalStateException();
         }
     }
 
     public String getAttributePrefix(int i) {
-        if (prevState != STATE_INIT) {
+        if (isDelegating()) {
             return realReader.getAttributePrefix(i);
         } else {
-            return null;
+            throw new IllegalStateException();
         }
     }
 
     public String getAttributeType(int i) {
-        if (prevState != STATE_INIT) {
+        if (isDelegating()) {
             return realReader.getAttributeType(i);
         } else {
-            return null;
+            throw new IllegalStateException();
         }
     }
 
     public String getAttributeValue(int i) {
-        if (prevState != STATE_INIT) {
+        if (isDelegating()) {
             return realReader.getAttributeValue(i);
         } else {
-            return null;
+            throw new IllegalStateException();
         }
     }
 
     public String getAttributeValue(String s, String s1) {
-        if (prevState != STATE_INIT) {
+        if (isDelegating()) {
             return realReader.getAttributeValue(s, s1);
         } else {
-            return null;
+            throw new IllegalStateException();
         }
     }
 
     public String getCharacterEncodingScheme() {
-        if (prevState != STATE_INIT) {
-            return realReader.getCharacterEncodingScheme();
-        } else {
-            return null;
-        }
+        return realReader.getCharacterEncodingScheme();
     }
 
     public String getElementText() throws XMLStreamException {
-        if (prevState != STATE_INIT) {
+        if (isDelegating()) {
             return realReader.getElementText();
         } else {
             throw new XMLStreamException();
@@ -191,31 +180,28 @@
     }
 
     public String getEncoding() {
-        if (prevState != STATE_INIT) {
-            return realReader.getEncoding();
-        } else {
-            return null;
-        }
+        return realReader.getEncoding();
     }
 
     public int getEventType() {
-        if (prevState == STATE_INIT) {
-            return START_DOCUMENT;
-        } else {
-            return realReader.getEventType();
-        }
-    }
-
-    public String getLocalName() {
-        if (prevState != STATE_INIT) {
-            return realReader.getLocalName();
-        } else {
-            return null;
+        int event = -1;
+        switch (state) {
+        case STATE_SWITCHED:
+        case STATE_COMPLETE_AT_NEXT:
+            event = realReader.getEventType();
+            break;
+        case STATE_INIT:
+            event = START_DOCUMENT;
+            break;
+        case STATE_COMPLETED:
+            event = END_DOCUMENT;
+            break;
         }
+        return event;
     }
 
     public Location getLocation() {
-        if (prevState != STATE_INIT) {
+        if (isDelegating()) {
             return realReader.getLocation();
         } else {
             return null;
@@ -223,87 +209,91 @@
     }
 
     public QName getName() {
-        if (prevState != STATE_INIT) {
+        if (isDelegating()) {
             return realReader.getName();
         } else {
-            return null;
+            throw new IllegalStateException();
         }
     }
 
-    public NamespaceContext getNamespaceContext() {
-        if (prevState != STATE_INIT) {
-            return realReader.getNamespaceContext();
+    public String getLocalName() {
+        if (isDelegating()) {
+            return realReader.getLocalName();
         } else {
-            return null;
+            throw new IllegalStateException();
         }
     }
 
+    public NamespaceContext getNamespaceContext() {
+        return realReader.getNamespaceContext();
+    }
+
     public int getNamespaceCount() {
-        if (prevState != STATE_INIT) {
+        if (isDelegating()) {
             return realReader.getNamespaceCount();
         } else {
-            return 0;
+            throw new IllegalStateException();
         }
     }
 
     public String getNamespacePrefix(int i) {
-        if (prevState != STATE_INIT) {
+        if (isDelegating()) {
             return realReader.getNamespacePrefix(i);
         } else {
-            return null;
+            throw new IllegalStateException();
         }
     }
 
     public String getNamespaceURI() {
-        if (prevState != STATE_INIT) {
+        if (isDelegating()) {
             return realReader.getNamespaceURI();
         } else {
-            return null;
+            throw new IllegalStateException();
         }
     }
 
     public String getNamespaceURI(int i) {
-        if (prevState != STATE_INIT) {
+        if (isDelegating()) {
             return realReader.getNamespaceURI(i);
         } else {
-            return null;
+            throw new IllegalStateException();
         }
     }
 
     public String getNamespaceURI(String s) {
-        if (prevState != STATE_INIT) {
+        if (isDelegating()) {
             return realReader.getNamespaceURI(s);
         } else {
-            return null;
+            throw new IllegalStateException();
         }
     }
 
     public String getPIData() {
-        if (prevState != STATE_INIT) {
+        if (isDelegating()) {
             return realReader.getPIData();
         } else {
-            return null;
+            throw new IllegalStateException();
         }
     }
 
     public String getPITarget() {
-        if (prevState != STATE_INIT) {
+        if (isDelegating()) {
             return realReader.getPITarget();
         } else {
-            return null;
+            throw new IllegalStateException();
         }
     }
 
     public String getPrefix() {
-        if (prevState != STATE_INIT) {
+        if (isDelegating()) {
             return realReader.getPrefix();
         } else {
-            return null;
+            throw new IllegalStateException();
         }
     }
 
     public Object getProperty(String s) throws IllegalArgumentException {
-        if (prevState != STATE_INIT) {
+        if (isDelegating()) {
             return realReader.getProperty(s);
         } else {
             throw new IllegalArgumentException();
@@ -311,47 +301,47 @@
     }
 
     public String getText() {
-        if (prevState != STATE_INIT) {
+        if (isDelegating()) {
             return realReader.getText();
         } else {
-            return null;
+            throw new IllegalStateException();
         }
     }
 
     public char[] getTextCharacters() {
-        if (prevState != STATE_INIT) {
+        if (isDelegating()) {
             return realReader.getTextCharacters();
         } else {
-            return new char[0];
+            throw new IllegalStateException();
         }
     }
 
     public int getTextCharacters(int i, char[] chars, int i1, int i2) throws XMLStreamException {
-        if (prevState != STATE_INIT) {
+        if (isDelegating()) {
             return realReader.getTextCharacters(i, chars, i1, i2);
         } else {
-            return 0;
+            throw new IllegalStateException();
         }
     }
 
     public int getTextLength() {
-        if (prevState != STATE_INIT) {
-            return realReader.getTextStart();
+        if (isDelegating()) {
+            return realReader.getTextLength();
         } else {
-            return 0;
+            throw new IllegalStateException();
         }
     }
 
     public int getTextStart() {
-        if (prevState != STATE_INIT) {
+        if (isDelegating()) {
             return realReader.getTextStart();
         } else {
-            return 0;
+            throw new IllegalStateException();
         }
     }
 
     public String getVersion() {
-        if (prevState != STATE_INIT) {
+        if (isDelegating()) {
             return realReader.getVersion();
         } else {
             return null;
@@ -359,7 +349,7 @@
     }
 
     public boolean hasName() {
-        if (prevState != STATE_INIT) {
+        if (isDelegating()) {
             return realReader.hasName();
         } else {
             return false;
@@ -371,7 +361,7 @@
             return true;
         } else if (state == STATE_COMPLETED) {
             return false;
-        } else if (prevState != STATE_INIT) {
+        } else if (state == STATE_SWITCHED) {
             return realReader.hasNext();
         } else {
             return true;
@@ -379,7 +369,7 @@
     }
 
     public boolean hasText() {
-        if (prevState != STATE_INIT) {
+        if (isDelegating()) {
             return realReader.hasText();
         } else {
             return false;
@@ -387,7 +377,7 @@
     }
 
     public boolean isAttributeSpecified(int i) {
-        if (prevState != STATE_INIT) {
+        if (isDelegating()) {
             return realReader.isAttributeSpecified(i);
         } else {
             return false;
@@ -395,7 +385,7 @@
     }
 
     public boolean isCharacters() {
-        if (prevState != STATE_INIT) {
+        if (isDelegating()) {
             return realReader.isCharacters();
         } else {
             return false;
@@ -403,7 +393,7 @@
     }
 
     public boolean isEndElement() {
-        if (prevState != STATE_INIT) {
+        if (isDelegating()) {
             return realReader.isEndElement();
         } else {
             return false;
@@ -411,7 +401,7 @@
     }
 
     public boolean isStandalone() {
-        if (prevState != STATE_INIT) {
+        if (isDelegating()) {
             return realReader.isStandalone();
         } else {
             return false;
@@ -419,7 +409,7 @@
     }
 
     public boolean isStartElement() {
-        if (prevState != STATE_INIT) {
+        if (isDelegating()) {
             return realReader.isStartElement();
         } else {
             return false;
@@ -427,7 +417,7 @@
     }
 
     public boolean isWhiteSpace() {
-        if (prevState != STATE_INIT) {
+        if (isDelegating()) {
             return realReader.isWhiteSpace();
         } else {
             return false;



---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org