You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by fr...@apache.org on 2007/02/13 22:11:21 UTC

svn commit: r507227 - /incubator/tuscany/java/sdo/impl/src/main/java/org/apache/tuscany/sdo/util/resource/SDOXMLResourceImpl.java

Author: frankb
Date: Tue Feb 13 13:11:20 2007
New Revision: 507227

URL: http://svn.apache.org/viewvc?view=rev&rev=507227
Log:
Fix for TUSCANY-1107

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

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?view=diff&rev=507227&r1=507226&r2=507227
==============================================================================
--- 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 Tue Feb 13 13:11:20 2007
@@ -59,44 +59,44 @@
      */
     public static class SDOXMLHelperImpl extends XMLHelperImpl {
 
+        /**
+         * EMF XMLResource (SAX) may be used to load from only a *portion* of a StAX stream
+         * which may reference (global) namespaces bound outside the (local) portion.
+         * This class extends EMF's NamespaceSupport to make {@link #getPrefix} and {@link #getURI}
+         * query these global binding(s) after first checking the local context(s).
+         */
         private static class StreamNamespaceSupport extends XMLHelperImpl.NamespaceSupport {
-            private XMLStreamReader reader;
+            protected NamespaceContext nameSpaceContext;
 
             public String getPrefix(String uri) {
-                if (reader == null)
-                    return super.getPrefix(uri);
-                String prefix = null;
-                try {
-                    prefix = uri != null ? reader.getNamespaceContext().getPrefix(uri) : null;
-                } catch (Exception e) {
-                    // HACK:
-                    // java.lang.UnsupportedOperationException
-                    // at org.apache.axiom.om.impl.llom.OMStAXWrapper.getNamespaceContext(OMStAXWrapper.java:984)
-
-                    prefix = null;
-                }
-                return prefix != null ? prefix : super.getPrefix(uri);
+                String prefix = super.getPrefix(uri);
+                if (prefix == null)
+                    try {
+                        prefix = nameSpaceContext.getPrefix(uri);
+                    } catch (Exception e) {
+                        // HACK:
+                        // java.lang.UnsupportedOperationException
+                        // at org.apache.axiom.om.impl.llom.OMStAXWrapper.getNamespaceContext(OMStAXWrapper.java:984)
+                    }
+                return prefix;
             }
 
             public String getURI(String prefix) {
-                if (reader == null)
-                    return super.getURI(prefix);
-                String uri;
-                try {
-                    uri = prefix != null ? reader.getNamespaceContext().getNamespaceURI(prefix) : null;
-                } catch (Exception e) {
-                    // HACK:
-                    // java.lang.UnsupportedOperationException
-                    // at org.apache.axiom.om.impl.llom.OMStAXWrapper.getNamespaceContext(OMStAXWrapper.java:984)
-
-                    uri = null;
-                }
-                return uri != null && uri.length()!=0 ? uri : super.getURI(prefix);
+                String uri = super.getURI(prefix);
+                if (uri == null)
+                    try {
+                        uri = nameSpaceContext.getNamespaceURI(prefix);
+                    } catch (Exception e) {
+                        // HACK:
+                        // java.lang.UnsupportedOperationException
+                        // at org.apache.axiom.om.impl.llom.OMStAXWrapper.getNamespaceContext(OMStAXWrapper.java:984)
+                    }
+                return uri;
             }
 
             public StreamNamespaceSupport(XMLStreamReader reader) {
                 super();
-                this.reader = reader;
+                nameSpaceContext = reader.getNamespaceContext();
             }
 
         }
@@ -108,7 +108,8 @@
 
         public SDOXMLHelperImpl(XMLStreamReader reader) {
             super();
-            this.namespaceSupport = new StreamNamespaceSupport(reader);
+            if (reader instanceof XMLDocumentStreamReader) // Only use StreamNamespaceSupport when loading from a *portion* of a StAX stream
+                namespaceSupport = new StreamNamespaceSupport(reader);
         }
         
         private class NameSpaceContext implements NamespaceContext { // TODO Helper# pushContext() & popContext



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