Author: scheu
Date: Wed Apr 23 11:25:27 2008
New Revision: 650980

URL: http://svn.apache.org/viewvc?rev=650980&view=rev
Log:
WSCOMMONS-325
Contributor:Rich Scheuerle
Added some simple caching for the check.

Modified:
    
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/util/OMSerializerUtil.java

Modified: 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/util/OMSerializerUtil.java
URL: 
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/util/OMSerializerUtil.java?rev=650980&r1=650979&r2=650980&view=diff
==============================================================================
--- 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/util/OMSerializerUtil.java
 (original)
+++ 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/util/OMSerializerUtil.java
 Wed Apr 23 11:25:27 2008
@@ -167,22 +167,46 @@
      * @param writer
      * @return true if setPrefix should be generated before startElement
      */
+    private static boolean cache_isSetPrefixBeforeStartElement;
+    private static XMLStreamWriter cache_isSetPrefixBeforeStartElement_writer 
= null;
+    private static String semifore = "isSetPrefixBeforeStartElement";
     public static boolean isSetPrefixBeforeStartElement(XMLStreamWriter 
writer) {
+        // Try the cached value
+        if (cache_isSetPrefixBeforeStartElement_writer == writer) {
+            synchronized(semifore) {
+                if (cache_isSetPrefixBeforeStartElement_writer == writer) {
+                    return cache_isSetPrefixBeforeStartElement;
+                }
+            }
+        }
+        
+        // There is no cached value for this writer, so try getting 
+        // the property from the writer.
+        boolean ret = false;
         try {
             Boolean value = 
(Boolean)writer.getProperty(IS_SET_PREFIX_BEFORE_PROPERTY);
             // this will always be false if the property is defined
             if (value != null) {
-                return value.booleanValue();
+                ret = value.booleanValue();
             }
         }
         catch (IllegalArgumentException e) {
             // Some parsers throw an exception for unknown properties.
         }
-        // Fallback: Toggle based on sun or woodstox implementation.
-        NamespaceContext nc = writer.getNamespaceContext();
-        return (nc == null || 
-                (nc.getClass().getName().indexOf("wstx") == -1 && 
-                 nc.getClass().getName().indexOf("sun") == -1));
+        if (!ret) {
+            // Fallback: Toggle based on sun or woodstox implementation.
+            NamespaceContext nc = writer.getNamespaceContext();
+            ret = (nc == null || 
+                    (nc.getClass().getName().indexOf("wstx") == -1 && 
+                            nc.getClass().getName().indexOf("sun") == -1));
+        }
+        
+        // Cache the answer
+        synchronized(semifore) {
+            cache_isSetPrefixBeforeStartElement_writer = writer;
+            cache_isSetPrefixBeforeStartElement = ret;
+        }
+        return ret;
     }
 
     /**


Reply via email to