You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by dk...@apache.org on 2009/11/11 20:27:48 UTC

svn commit: r835028 - in /cxf/branches/2.2.x-fixes: ./ common/common/src/main/java/org/apache/cxf/common/util/ common/common/src/main/java/org/apache/cxf/helpers/ common/common/src/main/java/org/apache/cxf/staxutils/ rt/bindings/jbi/src/main/java/org/a...

Author: dkulp
Date: Wed Nov 11 19:27:48 2009
New Revision: 835028

URL: http://svn.apache.org/viewvc?rev=835028&view=rev
Log:
Merged revisions 835016 via svnmerge from 
https://svn.apache.org/repos/asf/cxf/trunk

........
  r835016 | dkulp | 2009-11-11 14:09:41 -0500 (Wed, 11 Nov 2009) | 2 lines
  
  [CXF-2530] Move all the "create a prefix for me" stuff to a couple
  places so we only need to optimize/debug one place.
........

Modified:
    cxf/branches/2.2.x-fixes/   (props changed)
    cxf/branches/2.2.x-fixes/common/common/src/main/java/org/apache/cxf/common/util/StringUtils.java
    cxf/branches/2.2.x-fixes/common/common/src/main/java/org/apache/cxf/helpers/DOMUtils.java
    cxf/branches/2.2.x-fixes/common/common/src/main/java/org/apache/cxf/staxutils/CachingXmlEventWriter.java
    cxf/branches/2.2.x-fixes/common/common/src/main/java/org/apache/cxf/staxutils/StaxUtils.java
    cxf/branches/2.2.x-fixes/rt/bindings/jbi/src/main/java/org/apache/cxf/binding/jbi/interceptor/JBIWrapperOutInterceptor.java
    cxf/branches/2.2.x-fixes/rt/core/src/main/java/org/apache/cxf/interceptor/WrappedOutInterceptor.java
    cxf/branches/2.2.x-fixes/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/util/NamespaceHelper.java
    cxf/branches/2.2.x-fixes/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/xml/stax/ElementWriter.java

Propchange: cxf/branches/2.2.x-fixes/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.

Modified: cxf/branches/2.2.x-fixes/common/common/src/main/java/org/apache/cxf/common/util/StringUtils.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.2.x-fixes/common/common/src/main/java/org/apache/cxf/common/util/StringUtils.java?rev=835028&r1=835027&r2=835028&view=diff
==============================================================================
--- cxf/branches/2.2.x-fixes/common/common/src/main/java/org/apache/cxf/common/util/StringUtils.java (original)
+++ cxf/branches/2.2.x-fixes/common/common/src/main/java/org/apache/cxf/common/util/StringUtils.java Wed Nov 11 19:27:48 2009
@@ -69,10 +69,10 @@
     }
 
     public static boolean isEmpty(String str) {
-        if (str != null && str.trim().length() > 0) {
-            return false;
+        if (str == null || str.length() == 0) {
+            return true;
         }
-        return true;
+        return str.trim().length() == 0;
     }
     
     public static boolean isEmpty(List<String> list) {

Modified: cxf/branches/2.2.x-fixes/common/common/src/main/java/org/apache/cxf/helpers/DOMUtils.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.2.x-fixes/common/common/src/main/java/org/apache/cxf/helpers/DOMUtils.java?rev=835028&r1=835027&r2=835028&view=diff
==============================================================================
--- cxf/branches/2.2.x-fixes/common/common/src/main/java/org/apache/cxf/helpers/DOMUtils.java (original)
+++ cxf/branches/2.2.x-fixes/common/common/src/main/java/org/apache/cxf/helpers/DOMUtils.java Wed Nov 11 19:27:48 2009
@@ -549,7 +549,7 @@
             p = "ns" + i;
             i++;
         }
-        el.setAttribute(XMLNAMESPACE + ":" + p, ns);
+        addNamespacePrefix(el, ns, p);
         return p;
     }
 

Modified: cxf/branches/2.2.x-fixes/common/common/src/main/java/org/apache/cxf/staxutils/CachingXmlEventWriter.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.2.x-fixes/common/common/src/main/java/org/apache/cxf/staxutils/CachingXmlEventWriter.java?rev=835028&r1=835027&r2=835028&view=diff
==============================================================================
--- cxf/branches/2.2.x-fixes/common/common/src/main/java/org/apache/cxf/staxutils/CachingXmlEventWriter.java (original)
+++ cxf/branches/2.2.x-fixes/common/common/src/main/java/org/apache/cxf/staxutils/CachingXmlEventWriter.java Wed Nov 11 19:27:48 2009
@@ -160,21 +160,9 @@
         } 
     }
     
-    private String creatPrefix() {
-        int count = 1;
-        String pfx = "ns" + count;
-        while (curContext.getNamespaceURI(pfx) != null) {
-            count++;
-            pfx = "ns" + count;
-        }
-        return pfx;
-    }
     public void writeAttribute(String uri, String name, String value) throws XMLStreamException {
         if (!StringUtils.isEmpty(uri)) {
-            String pfx = this.getPrefix(uri);
-            if (pfx == null) {
-                pfx = creatPrefix();
-            }
+            String pfx = StaxUtils.getUniquePrefix(this, uri, false);
             addEvent(factory.createAttribute(pfx, uri, name, value));            
         } else {            
             addEvent(factory.createAttribute(name, value));            

Modified: cxf/branches/2.2.x-fixes/common/common/src/main/java/org/apache/cxf/staxutils/StaxUtils.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.2.x-fixes/common/common/src/main/java/org/apache/cxf/staxutils/StaxUtils.java?rev=835028&r1=835027&r2=835028&view=diff
==============================================================================
--- cxf/branches/2.2.x-fixes/common/common/src/main/java/org/apache/cxf/staxutils/StaxUtils.java (original)
+++ cxf/branches/2.2.x-fixes/common/common/src/main/java/org/apache/cxf/staxutils/StaxUtils.java Wed Nov 11 19:27:48 2009
@@ -81,6 +81,11 @@
     private static final BlockingQueue<XMLOutputFactory> OUTPUT_FACTORY_POOL;
     
     private static final String XML_NS = "http://www.w3.org/2000/xmlns/";
+    private static final String DEF_PREFIXES[] = new String[] {
+        "ns1".intern(), "ns2".intern(), "ns3".intern(),
+        "ns4".intern(), "ns5".intern(), "ns6".intern(),
+        "ns7".intern(), "ns8".intern(), "ns9".intern()
+    };
     
     static {
         int i = 20;
@@ -212,6 +217,7 @@
         }
     }
 
+    
     public static void nextEvent(XMLStreamReader dr) {
         try {
             dr.next();
@@ -1020,7 +1026,6 @@
         return new QName(ns, localName, prefix);
     }
     
-
     /**
      * Create a unique namespace uri/prefix combination.
      * 
@@ -1042,18 +1047,29 @@
         }
         return prefix;
     }
-
+    public static String getUniquePrefix(XMLStreamWriter writer, String namespaceURI)
+        throws XMLStreamException {
+        return getUniquePrefix(writer, namespaceURI, false);
+    }
     public static String getUniquePrefix(XMLStreamWriter writer) {
-        int n = 1;
-        
         NamespaceContext nc = writer.getNamespaceContext();
+        if (nc == null) {
+            return DEF_PREFIXES[0];
+        }
+        for (String t : DEF_PREFIXES) {
+            String uri = nc.getNamespaceURI(t);
+            if (StringUtils.isEmpty(uri)) {
+                return t;
+            }
+        }
+
+        int n = 10;
         while (true) {
             String nsPrefix = "ns" + n;
-
-            if (nc == null || nc.getNamespaceURI(nsPrefix) == null) {
+            String uri = nc.getNamespaceURI(nsPrefix);
+            if (StringUtils.isEmpty(uri)) {
                 return nsPrefix;
             }
-
             n++;
         }
     }

Modified: cxf/branches/2.2.x-fixes/rt/bindings/jbi/src/main/java/org/apache/cxf/binding/jbi/interceptor/JBIWrapperOutInterceptor.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.2.x-fixes/rt/bindings/jbi/src/main/java/org/apache/cxf/binding/jbi/interceptor/JBIWrapperOutInterceptor.java?rev=835028&r1=835027&r2=835028&view=diff
==============================================================================
--- cxf/branches/2.2.x-fixes/rt/bindings/jbi/src/main/java/org/apache/cxf/binding/jbi/interceptor/JBIWrapperOutInterceptor.java (original)
+++ cxf/branches/2.2.x-fixes/rt/bindings/jbi/src/main/java/org/apache/cxf/binding/jbi/interceptor/JBIWrapperOutInterceptor.java Wed Nov 11 19:27:48 2009
@@ -39,6 +39,7 @@
 import org.apache.cxf.service.model.BindingOperationInfo;
 import org.apache.cxf.service.model.MessageInfo;
 import org.apache.cxf.service.model.MessagePartInfo;
+import org.apache.cxf.staxutils.StaxUtils;
 
 public class JBIWrapperOutInterceptor extends AbstractOutDatabindingInterceptor {
 
@@ -129,14 +130,10 @@
             QName name = outPart.getConcreteName();
 
             try {
-                
-                int x = 1;
-                while (xmlWriter.getNamespaceContext().getNamespaceURI("ns" + x) != null) {
-                    x++;
-                }
-                xmlWriter.setPrefix("ns" + x, name.getNamespaceURI());
-                xmlWriter.writeStartElement("ns" + x, name.getLocalPart(), name.getNamespaceURI());
-                xmlWriter.writeNamespace("ns" + x, name.getNamespaceURI());
+                String pfx = StaxUtils.getUniquePrefix(xmlWriter, name.getNamespaceURI());
+                xmlWriter.setPrefix(pfx, name.getNamespaceURI());
+                xmlWriter.writeStartElement(pfx, name.getLocalPart(), name.getNamespaceURI());
+                xmlWriter.writeNamespace(pfx, name.getNamespaceURI());
             } catch (XMLStreamException e) {
                 throw new Fault(new org.apache.cxf.common.i18n.Message("STAX_WRITE_EXC", BUNDLE), e);
             }

Modified: cxf/branches/2.2.x-fixes/rt/core/src/main/java/org/apache/cxf/interceptor/WrappedOutInterceptor.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.2.x-fixes/rt/core/src/main/java/org/apache/cxf/interceptor/WrappedOutInterceptor.java?rev=835028&r1=835027&r2=835028&view=diff
==============================================================================
--- cxf/branches/2.2.x-fixes/rt/core/src/main/java/org/apache/cxf/interceptor/WrappedOutInterceptor.java (original)
+++ cxf/branches/2.2.x-fixes/rt/core/src/main/java/org/apache/cxf/interceptor/WrappedOutInterceptor.java Wed Nov 11 19:27:48 2009
@@ -33,14 +33,10 @@
 import org.apache.cxf.service.model.BindingOperationInfo;
 import org.apache.cxf.service.model.MessageInfo;
 import org.apache.cxf.service.model.MessagePartInfo;
+import org.apache.cxf.staxutils.StaxUtils;
 
 public class WrappedOutInterceptor extends AbstractOutDatabindingInterceptor {
     private static final ResourceBundle BUNDLE = BundleUtils.getBundle(WrappedOutInterceptor.class);
-    private static final String DEF_PREFIXES[] = new String[] {
-        "ns1".intern(), "ns2".intern(), "ns3".intern(),
-        "ns4".intern(), "ns5".intern(), "ns6".intern(),
-        "ns7".intern(), "ns8".intern(), "ns9".intern()
-    };
 
     private WrappedOutEndingInterceptor ending = new WrappedOutEndingInterceptor();
     
@@ -75,21 +71,7 @@
                     pfx = service.getDataBinding().getDeclaredNamespaceMappings().get(name.getNamespaceURI());
                 }
                 if (pfx == null) {
-                    for (String t : DEF_PREFIXES) {
-                        if (!StringUtils.isEmpty(xmlWriter.getNamespaceContext()
-                                                     .getNamespaceURI(t))) {
-                            pfx = t;
-                            break;
-                        }
-                    }
-                    if (pfx == null) {    
-                        int x = 10;
-                        while (!StringUtils.isEmpty(xmlWriter.getNamespaceContext()
-                                                         .getNamespaceURI("ns" + x))) {
-                            x++;
-                        }
-                        pfx = "ns" + x;
-                    }
+                    pfx = StaxUtils.getUniquePrefix(xmlWriter, name.getNamespaceURI(), false);
                 }
                 xmlWriter.setPrefix(pfx, name.getNamespaceURI());
                 xmlWriter.writeStartElement(pfx, name.getLocalPart(), name.getNamespaceURI());

Modified: cxf/branches/2.2.x-fixes/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/util/NamespaceHelper.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.2.x-fixes/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/util/NamespaceHelper.java?rev=835028&r1=835027&r2=835028&view=diff
==============================================================================
--- cxf/branches/2.2.x-fixes/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/util/NamespaceHelper.java (original)
+++ cxf/branches/2.2.x-fixes/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/util/NamespaceHelper.java Wed Nov 11 19:27:48 2009
@@ -34,6 +34,7 @@
 import org.apache.cxf.aegis.DatabindingException;
 import org.apache.cxf.helpers.DOMUtils;
 import org.apache.cxf.helpers.JavaUtils;
+import org.apache.cxf.staxutils.StaxUtils;
 
 /**
  * Namespace utilities.
@@ -55,14 +56,12 @@
      */
     public static String getUniquePrefix(Element element, String namespaceURI) {
         String prefix = getPrefix(element, namespaceURI);
-
         // it is OK to have both namespace URI and prefix be empty. 
         if (prefix == null) {
             if ("".equals(namespaceURI)) {
                 return "";
             }
-            prefix = getUniquePrefix(element);
-            DOMUtils.addNamespacePrefix(element, namespaceURI, prefix);
+            prefix = DOMUtils.createNamespace(element, namespaceURI);
         }
         return prefix;
     }
@@ -75,20 +74,6 @@
         DOMUtils.getPrefixesRecursive(element, namespaceURI, prefixes);
     }
 
-    public static String getUniquePrefix(Element el) {
-        int n = 1;
-
-        while (true) {
-            String nsPrefix = "ns" + n;
-
-            if (DOMUtils.getNamespace(el, nsPrefix) == null) {
-                return nsPrefix;
-            }
-
-            n++;
-        }
-    }
-
     /**
      * Create a unique namespace uri/prefix combination.
      * 
@@ -99,9 +84,34 @@
      */
     public static String getUniquePrefix(XMLStreamWriter writer, String namespaceURI, boolean declare)
         throws XMLStreamException {
-        String prefix = writer.getNamespaceContext().getPrefix(namespaceURI);
+        return getUniquePrefix(writer, namespaceURI, null, declare);
+    }
+    
+    
+    /**
+     * Make a unique prefix.
+     * @param writer target writer.
+     * @param namespaceURI namespace
+     * @param preferred if there's a proposed prefix (e.g. xsi), here it is.
+     * @param declare whether to declare to the stream.
+     * @return the prefix.
+     * @throws XMLStreamException
+     */
+    public static String getUniquePrefix(XMLStreamWriter writer, 
+                                         String namespaceURI,
+                                         String preferred,
+                                         boolean declare)
+        throws XMLStreamException {
+        
+        if (preferred != null) {
+            String existing = writer.getNamespaceContext().getNamespaceURI(preferred);
+            if (namespaceURI.equals(existing)) {
+                return preferred;
+            }
+        }
+        String prefix = preferred; 
         if (prefix == null) {
-            prefix = getUniquePrefix(writer);
+            prefix = StaxUtils.getUniquePrefix(writer);
 
             if (declare) {
                 writer.setPrefix(prefix, namespaceURI);
@@ -112,20 +122,6 @@
         return prefix;
     }
 
-    public static String getUniquePrefix(XMLStreamWriter writer) {
-        int n = 1;
-
-        while (true) {
-            String nsPrefix = "ns" + n;
-
-            if (writer.getNamespaceContext().getNamespaceURI(nsPrefix) == null) {
-                return nsPrefix;
-            }
-
-            n++;
-        }
-    }
-
     /**
      * Generates the name of a XML namespace from a given class name and
      * protocol. The returned namespace will take the form

Modified: cxf/branches/2.2.x-fixes/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/xml/stax/ElementWriter.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.2.x-fixes/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/xml/stax/ElementWriter.java?rev=835028&r1=835027&r2=835028&view=diff
==============================================================================
--- cxf/branches/2.2.x-fixes/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/xml/stax/ElementWriter.java (original)
+++ cxf/branches/2.2.x-fixes/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/xml/stax/ElementWriter.java Wed Nov 11 19:27:48 2009
@@ -26,10 +26,10 @@
 import javax.xml.stream.XMLStreamWriter;
 
 import org.apache.cxf.aegis.DatabindingException;
-import org.apache.cxf.aegis.util.NamespaceHelper;
 import org.apache.cxf.aegis.xml.AbstractMessageWriter;
 import org.apache.cxf.aegis.xml.MessageWriter;
 import org.apache.cxf.common.util.StringUtils;
+import org.apache.cxf.staxutils.StaxUtils;
 
 /**
  * LiteralWriter
@@ -103,7 +103,7 @@
                
                 if (!StringUtils.isEmpty(namespace)) {
                     declare = true;
-                    prefix = NamespaceHelper.getUniquePrefix(writer);
+                    prefix = StaxUtils.getUniquePrefix(writer);
                 } else {
                     prefix = "";
                     if (!StringUtils.isEmpty(writer.getNamespaceContext().getNamespaceURI(""))) {
@@ -193,7 +193,7 @@
             String pfx = writer.getPrefix(ns);
 
             if (pfx == null) {
-                pfx = NamespaceHelper.getUniquePrefix(writer);
+                pfx = StaxUtils.getUniquePrefix(writer);
 
                 writer.setPrefix(pfx, ns);
                 writer.writeNamespace(pfx, ns);
@@ -221,7 +221,7 @@
                 } else if (contextPfx != null) {
                     pfx = contextPfx;
                 } else {
-                    pfx = NamespaceHelper.getUniquePrefix(writer);
+                    pfx = StaxUtils.getUniquePrefix(writer);
                 }
 
                 writer.setPrefix(pfx, ns);