You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wink.apache.org by el...@apache.org on 2009/08/31 09:22:44 UTC

svn commit: r809483 - /incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/providers/entity/xml/AbstractJAXBProvider.java

Author: elman
Date: Mon Aug 31 07:22:44 2009
New Revision: 809483

URL: http://svn.apache.org/viewvc?rev=809483&view=rev
Log:
small fixes: 
1. use SoftConcurrentMap instead of WeakHashMap
2. use Class instead of String for cache maps
3. remove redundant getPackageName() method

Modified:
    incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/providers/entity/xml/AbstractJAXBProvider.java

Modified: incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/providers/entity/xml/AbstractJAXBProvider.java
URL: http://svn.apache.org/viewvc/incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/providers/entity/xml/AbstractJAXBProvider.java?rev=809483&r1=809482&r2=809483&view=diff
==============================================================================
--- incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/providers/entity/xml/AbstractJAXBProvider.java (original)
+++ incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/providers/entity/xml/AbstractJAXBProvider.java Mon Aug 31 07:22:44 2009
@@ -22,8 +22,6 @@
 import java.lang.reflect.Method;
 import java.lang.reflect.ParameterizedType;
 import java.lang.reflect.Type;
-import java.util.Map;
-import java.util.WeakHashMap;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 
@@ -44,25 +42,27 @@
 
 import org.apache.wink.common.internal.i18n.Messages;
 import org.apache.wink.common.internal.utils.MediaTypeUtils;
+import org.apache.wink.common.internal.utils.SimpleMap;
+import org.apache.wink.common.internal.utils.SoftConcurrentMap;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 public abstract class AbstractJAXBProvider {
 
-    private static final Logger                     logger                    =
-                                                                                  LoggerFactory
-                                                                                      .getLogger(AbstractJAXBProvider.class);
-    private static final Map<Class<?>, JAXBContext> jaxbDefaultContexts       =
-                                                                                  new WeakHashMap<Class<?>, JAXBContext>();
+    private static final Logger                           logger                    =
+                                                                                        LoggerFactory
+                                                                                            .getLogger(AbstractJAXBProvider.class);
+    private static final SimpleMap<Class<?>, JAXBContext> jaxbDefaultContexts       =
+                                                                                        new SoftConcurrentMap<Class<?>, JAXBContext>();
 
     @Context
-    private Providers                               providers;
+    private Providers                                     providers;
 
-    private static ConcurrentMap<String, Boolean>   jaxbIsXMLRootElementCache =
-                                                                                  new ConcurrentHashMap<String, Boolean>();
+    private static final ConcurrentMap<Class<?>, Boolean> jaxbIsXMLRootElementCache =
+                                                                                        new ConcurrentHashMap<Class<?>, Boolean>();
 
-    private static ConcurrentMap<String, Boolean>   jaxbIsXMLTypeCache        =
-                                                                                  new ConcurrentHashMap<String, Boolean>();
+    private static final ConcurrentMap<Class<?>, Boolean> jaxbIsXMLTypeCache        =
+                                                                                        new ConcurrentHashMap<Class<?>, Boolean>();
 
     protected final Unmarshaller getUnmarshaller(Class<?> type, MediaType mediaType)
         throws JAXBException {
@@ -85,26 +85,24 @@
     }
 
     private static boolean isXMLRootElement(Class<?> type) {
-        String className = type.getName();
-        Boolean isJAXBObject = jaxbIsXMLRootElementCache.get(className);
+        Boolean isJAXBObject = jaxbIsXMLRootElementCache.get(type);
 
         if (isJAXBObject == null) {
             boolean isXmlRootElement = type.getAnnotation(XmlRootElement.class) != null;
             isJAXBObject = Boolean.valueOf(isXmlRootElement);
-            jaxbIsXMLRootElementCache.putIfAbsent(className, isJAXBObject);
+            jaxbIsXMLRootElementCache.putIfAbsent(type, isJAXBObject);
         }
 
         return isJAXBObject.booleanValue();
     }
 
     private static boolean isXMLType(Class<?> type) {
-        String className = type.getName();
-        Boolean isJAXBObject = jaxbIsXMLTypeCache.get(className);
+        Boolean isJAXBObject = jaxbIsXMLTypeCache.get(type);
 
         if (isJAXBObject == null) {
             boolean isXmlTypeElement = type.getAnnotation(XmlType.class) != null;
             isJAXBObject = Boolean.valueOf(isXmlTypeElement);
-            jaxbIsXMLTypeCache.putIfAbsent(className, isJAXBObject);
+            jaxbIsXMLTypeCache.putIfAbsent(type, isJAXBObject);
         }
 
         return isJAXBObject.booleanValue();
@@ -130,14 +128,12 @@
     }
 
     private JAXBContext getDefaultContext(Class<?> type) throws JAXBException {
-        synchronized (jaxbDefaultContexts) {
-            JAXBContext context = jaxbDefaultContexts.get(type);
-            if (context == null) {
-                context = JAXBContext.newInstance(type);
-                jaxbDefaultContexts.put(type, context);
-            }
-            return context;
+        JAXBContext context = jaxbDefaultContexts.get(type);
+        if (context == null) {
+            context = JAXBContext.newInstance(type);
+            jaxbDefaultContexts.put(type, context);
         }
+        return context;
     }
 
     /**
@@ -203,7 +199,7 @@
         // return null;
         // }
         // Search for Factory
-        StringBuilder b = new StringBuilder(getPackageName(type));
+        StringBuilder b = new StringBuilder(type.getPackage().getName());
         b.append(".ObjectFactory");
         Class<?> factoryClass = null;
         try {
@@ -229,14 +225,4 @@
         return new JAXBElement(new QName(typeStr), type, jaxbObject);
     }
 
-    private String getPackageName(Class<?> type) {
-        String packageName;
-        int packageSeparator = type.getName().lastIndexOf('.');
-        if (packageSeparator != -1) {
-            packageName = type.getName().substring(0, packageSeparator);
-        } else {
-            packageName = type.getName();
-        }
-        return packageName;
-    }
 }