You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by rf...@apache.org on 2009/07/20 22:20:24 UTC

svn commit: r795991 - in /tuscany/branches/sca-java-1.5.1/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb: JAXBContextCache.java XMLRootElementUtil.java

Author: rfeng
Date: Mon Jul 20 20:20:23 2009
New Revision: 795991

URL: http://svn.apache.org/viewvc?rev=795991&view=rev
Log:
Merge the fix for TUSCANY-3167, TUSCANY-3162 from 1.6-SNAPSHOT

Modified:
    tuscany/branches/sca-java-1.5.1/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBContextCache.java   (contents, props changed)
    tuscany/branches/sca-java-1.5.1/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/XMLRootElementUtil.java

Modified: tuscany/branches/sca-java-1.5.1/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBContextCache.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.5.1/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBContextCache.java?rev=795991&r1=795990&r2=795991&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.5.1/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBContextCache.java (original)
+++ tuscany/branches/sca-java-1.5.1/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBContextCache.java Mon Jul 20 20:20:23 2009
@@ -47,6 +47,11 @@
 import javax.xml.bind.JAXBException;
 import javax.xml.bind.Marshaller;
 import javax.xml.bind.Unmarshaller;
+import javax.xml.bind.annotation.XmlEnum;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlSeeAlso;
+import javax.xml.bind.annotation.XmlTransient;
+import javax.xml.bind.annotation.XmlType;
 import javax.xml.transform.Source;
 
 import org.apache.tuscany.sca.databinding.util.LRUCache;
@@ -417,9 +422,20 @@
         }
         // Adding classes that are not part of JAXB packages
         for (Class<?> cls : classes) {
+
             Package pkg = getPackage(cls);
             if (pkg == null || nonJAXBPackages.contains(pkg)) {
                 classSet.add(cls);
+            } else {
+                // TUSCANY-3162: Test if a class is generated by JAXB
+                // There might be the case that non-JAXB classes are in the same package as the JAXB classes
+                if (!cls.isAnnotationPresent(XmlType.class) 
+                    && !cls.isAnnotationPresent(XmlEnum.class)
+                    && !cls.isAnnotationPresent(XmlSeeAlso.class)
+                    && !cls.isAnnotationPresent(XmlRootElement.class)
+                    && !cls.isAnnotationPresent(XmlTransient.class)) {
+                    classSet.add(cls);
+                }
             }
         }
         return classSet;

Propchange: tuscany/branches/sca-java-1.5.1/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBContextCache.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Jul 20 20:20:23 2009
@@ -1,2 +1,3 @@
 /tuscany/branches/sca-java-1.3/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBContextCache.java:671193
-/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBContextCache.java:723438-743922,745298,787802
+/tuscany/branches/sca-java-1.x/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBContextCache.java:795966
+/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBContextCache.java:723438-743922,745298,787802,795933-795959

Modified: tuscany/branches/sca-java-1.5.1/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/XMLRootElementUtil.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.5.1/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/XMLRootElementUtil.java?rev=795991&r1=795990&r2=795991&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.5.1/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/XMLRootElementUtil.java (original)
+++ tuscany/branches/sca-java-1.5.1/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/XMLRootElementUtil.java Mon Jul 20 20:20:23 2009
@@ -32,6 +32,7 @@
 import java.util.List;
 import java.util.Map;
 import java.util.StringTokenizer;
+import java.util.WeakHashMap;
 
 import javax.xml.bind.JAXBElement;
 import javax.xml.bind.annotation.XmlElement;
@@ -46,6 +47,13 @@
  */
 public class XMLRootElementUtil {
 
+    /**
+     * TUSCANY-3167
+     * Cache for property descriptors
+     */
+    private static Map<Class<?>, Map<String, JAXBPropertyDescriptor>> PROPERTY_MAP =
+        new WeakHashMap<Class<?>, Map<String, JAXBPropertyDescriptor>>();
+
     /** Constructor is intentionally private.  This class only provides static utility methods */
     private XMLRootElementUtil() {
 
@@ -158,11 +166,16 @@
      * @param jaxbClass
      * @return map
      */
-    public static Map<String, JAXBPropertyDescriptor> createPropertyDescriptorMap(Class<?> jaxbClass)
+    public synchronized static Map<String, JAXBPropertyDescriptor> createPropertyDescriptorMap(Class<?> jaxbClass)
         throws NoSuchFieldException, IntrospectionException {
 
+        Map<String, JAXBPropertyDescriptor> map = PROPERTY_MAP.get(jaxbClass);
+        if (map != null) {
+            return map;
+        }
+
+        map = new HashMap<String, JAXBPropertyDescriptor>();
         PropertyDescriptor[] pds = Introspector.getBeanInfo(jaxbClass).getPropertyDescriptors();
-        Map<String, JAXBPropertyDescriptor> map = new HashMap<String, JAXBPropertyDescriptor>();
 
         // Unfortunately the element names are stored on the fields.
         // Get all of the fields in the class and super classes
@@ -217,8 +230,8 @@
                 map.put(xmlName, new JAXBPropertyDescriptor(pd, xmlName, index));
                 index++;
             }
-
         }
+        PROPERTY_MAP.put(jaxbClass, map);
         return map;
     }