Author: scheu
Date: Sat Aug 28 14:55:23 2010
New Revision: 990378

URL: http://svn.apache.org/viewvc?rev=990378&view=rev
Log:
AXIS2-4803
Contributor:Rich Scheuerle
Changed JAXBUtils to verify that classes are present in the constructed 
JAXBContext.
If not, the code automatically falls back to the existing "load by classes" 
algorithm.

Modified:
    
axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/message/databinding/JAXBUtils.java

Modified: 
axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/message/databinding/JAXBUtils.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/message/databinding/JAXBUtils.java?rev=990378&r1=990377&r2=990378&view=diff
==============================================================================
--- 
axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/message/databinding/JAXBUtils.java
 (original)
+++ 
axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/message/databinding/JAXBUtils.java
 Sat Aug 28 14:55:23 2010
@@ -606,7 +606,7 @@ public class JAXBUtils {
 
         // CONTEXT construction
         if (contextConstruction) {
-            JAXBContext context = 
createJAXBContextUsingContextPath(contextPackages, cl);
+            JAXBContext context = 
createJAXBContextUsingContextPath(contextPackages, cl, classRefs);
             if (context != null) {
                 contextValue = new JAXBContextValue(context, 
CONSTRUCTION_TYPE.BY_CONTEXT_PATH);
             }
@@ -885,10 +885,12 @@ public class JAXBUtils {
      *
      * @param packages
      * @param cl       ClassLoader
+     * @param List<String> classRefs
      * @return JAXBContext or null if unsuccessful
      */
     private static JAXBContext 
createJAXBContextUsingContextPath(TreeSet<String> packages,
-                                                                 ClassLoader 
cl) {
+                                                                 ClassLoader 
cl,
+                                                                 List<String> 
classRefs) {
         JAXBContext context = null;
         String contextpath = "";
 
@@ -907,6 +909,13 @@ public class JAXBUtils {
                 log.debug("Attempting to create JAXBContext with contextPath=" 
+ contextpath);
             }
             context = JAXBContext_newInstance(contextpath, cl);
+            
+            if (!containsClasses(context, classRefs)) {
+                if (log.isDebugEnabled()) {
+                    log.debug("  Unsuccessful: Will now use an alterative 
JAXBConstruct construction");
+                    return null;
+                }
+            }
             if (log.isDebugEnabled()) {
                 log.debug("  Successfully created JAXBContext:" + context);
             }
@@ -919,6 +928,32 @@ public class JAXBUtils {
         }
         return context;
     }
+    
+    /**
+     * containsClasses
+     * @param JAXBContext 
+     * @param List<String> classRefs
+     */
+    private static boolean containsClasses(JAXBContext context, List<String> 
classRefs) {
+        String text = context.toString();
+        
+        text = text.replace('\n', ' ');
+        text = text.replace('\t', ' ');
+        text = text.replace('\r', ' ');
+        
+        for (String classRef: classRefs) {
+            if (!classRef.endsWith(".ObjectFactory")) {
+                String search = " " + classRef + " ";
+                if (text.contains(search)) {
+                    if (log.isDebugEnabled()) {
+                        log.debug("The context does not contain " + classRef + 
" " + context);
+                    }
+                    return false;
+                }
+            }
+        }
+        return true;
+    }
 
     /**
      * This method will return all the Class names needed to construct a 
JAXBContext


Reply via email to