You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by di...@apache.org on 2008/04/14 00:19:14 UTC

svn commit: r647636 - in /webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws: marshaller/impl/alt/ runtime/description/marshal/impl/

Author: dims
Date: Sun Apr 13 15:18:50 2008
New Revision: 647636

URL: http://svn.apache.org/viewvc?rev=647636&view=rev
Log:
Fix for AXIS2-3737 - Problems loading RequestWrapper/ResponseWrapper etc when JAXWS Service is deployed as a jar under servicejars

When loading classes via TCCL fails, then try the AxisService's classloader.


Modified:
    webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/marshaller/impl/alt/DocLitWrappedMethodMarshaller.java
    webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/marshaller/impl/alt/DocLitWrappedPlusMethodMarshaller.java
    webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/marshaller/impl/alt/LegacyExceptionUtil.java
    webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/marshaller/impl/alt/MethodMarshallerUtils.java
    webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/runtime/description/marshal/impl/AnnotationBuilder.java
    webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/runtime/description/marshal/impl/ArtifactProcessor.java
    webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/runtime/description/marshal/impl/PackageSetBuilder.java
    webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/runtime/description/marshal/impl/PropertyDescriptorMapBuilder.java

Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/marshaller/impl/alt/DocLitWrappedMethodMarshaller.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/marshaller/impl/alt/DocLitWrappedMethodMarshaller.java?rev=647636&r1=647635&r2=647636&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/marshaller/impl/alt/DocLitWrappedMethodMarshaller.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/marshaller/impl/alt/DocLitWrappedMethodMarshaller.java Sun Apr 13 15:18:50 2008
@@ -363,7 +363,12 @@
 
             // Now create the single JAXB element
             String wrapperName = marshalDesc.getResponseWrapperClassName(operationDesc);
-            Class cls = MethodMarshallerUtils.loadClass(wrapperName);
+            Class cls;
+            try {
+                cls = MethodMarshallerUtils.loadClass(wrapperName);
+            } catch (ClassNotFoundException e){
+                cls = MethodMarshallerUtils.loadClass(wrapperName, endpointDesc.getAxisService().getClassLoader());
+            }
             JAXBWrapperTool wrapperTool = new JAXBWrapperToolImpl();
             Object object = wrapperTool.wrap(cls, nameList, objectList,
                                              marshalDesc.getPropertyDescriptorMap(cls));
@@ -458,7 +463,12 @@
 
             // Now create the single JAXB element 
             String wrapperName = marshalDesc.getRequestWrapperClassName(operationDesc);
-            Class cls = MethodMarshallerUtils.loadClass(wrapperName);
+            Class cls;
+            try {
+                cls = MethodMarshallerUtils.loadClass(wrapperName);
+            } catch (ClassNotFoundException e){
+                cls = MethodMarshallerUtils.loadClass(wrapperName, endpointDesc.getAxisService().getClassLoader());
+            }
             JAXBWrapperTool wrapperTool = new JAXBWrapperToolImpl();
             Object object = wrapperTool.wrap(cls, nameList, objectList,
                                              marshalDesc.getPropertyDescriptorMap(cls));

Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/marshaller/impl/alt/DocLitWrappedPlusMethodMarshaller.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/marshaller/impl/alt/DocLitWrappedPlusMethodMarshaller.java?rev=647636&r1=647635&r2=647636&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/marshaller/impl/alt/DocLitWrappedPlusMethodMarshaller.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/marshaller/impl/alt/DocLitWrappedPlusMethodMarshaller.java Sun Apr 13 15:18:50 2008
@@ -524,7 +524,12 @@
 
             // Now create the single JAXB element
             String wrapperName = marshalDesc.getResponseWrapperClassName(operationDesc);
-            Class cls = MethodMarshallerUtils.loadClass(wrapperName);
+            Class cls;
+            try {
+                cls = MethodMarshallerUtils.loadClass(wrapperName);
+            } catch (ClassNotFoundException e){
+                cls = MethodMarshallerUtils.loadClass(wrapperName, endpointDesc.getAxisService().getClassLoader());
+            }
             JAXBWrapperTool wrapperTool = new JAXBWrapperToolImpl();
             Object object = wrapperTool.wrap(cls, nameList, objectList,
                                              marshalDesc.getPropertyDescriptorMap(cls));
@@ -647,7 +652,12 @@
 
             // Now create the single JAXB element 
             String wrapperName = marshalDesc.getRequestWrapperClassName(operationDesc);
-            Class cls = MethodMarshallerUtils.loadClass(wrapperName);
+            Class cls;
+            try {
+                cls = MethodMarshallerUtils.loadClass(wrapperName);
+            } catch (ClassNotFoundException e){
+                cls = MethodMarshallerUtils.loadClass(wrapperName, endpointDesc.getAxisService().getClassLoader());
+            }
             JAXBWrapperTool wrapperTool = new JAXBWrapperToolImpl();
             Object object = wrapperTool.wrap(cls, nameList, objectList,
                                              marshalDesc.getPropertyDescriptorMap(cls));

Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/marshaller/impl/alt/LegacyExceptionUtil.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/marshaller/impl/alt/LegacyExceptionUtil.java?rev=647636&r1=647635&r2=647636&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/marshaller/impl/alt/LegacyExceptionUtil.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/marshaller/impl/alt/LegacyExceptionUtil.java Sun Apr 13 15:18:50 2008
@@ -113,7 +113,11 @@
             Class faultBeanClass = null;
             if (faultBeanName != null && faultBeanName.length() > 0) {
                 try {
-                    faultBeanClass = MethodMarshallerUtils.loadClass(faultBeanName);
+                    try {
+                        faultBeanClass = MethodMarshallerUtils.loadClass(faultBeanName);
+                    } catch (ClassNotFoundException e){
+                        faultBeanClass = MethodMarshallerUtils.loadClass(faultBeanName, fd.getOperationDescription().getEndpointInterfaceDescription().getEndpointDescription().getAxisService().getClassLoader());
+                    }
                 } catch (Throwable throwable) {
                     if (log.isDebugEnabled()) {
                         log.debug("Cannot load fault bean class = " + faultBeanName +

Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/marshaller/impl/alt/MethodMarshallerUtils.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/marshaller/impl/alt/MethodMarshallerUtils.java?rev=647636&r1=647635&r2=647636&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/marshaller/impl/alt/MethodMarshallerUtils.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/marshaller/impl/alt/MethodMarshallerUtils.java Sun Apr 13 15:18:50 2008
@@ -969,7 +969,12 @@
             JAXBBlockContext blockContext = new JAXBBlockContext(marshalDesc.getPackages());
 
             // Note that faultBean may not be a bean, it could be a primitive 
-            Class faultBeanFormalClass = loadClass(faultBeanDesc.getFaultBeanClassName());
+            Class faultBeanFormalClass;
+            try {
+                faultBeanFormalClass = loadClass(faultBeanDesc.getFaultBeanClassName());
+            } catch (ClassNotFoundException e){
+                faultBeanFormalClass = loadClass(faultBeanDesc.getFaultBeanClassName(), operationDesc.getEndpointInterfaceDescription().getEndpointDescription().getAxisService().getClassLoader());
+            }
 
             // Use "by java type" marshalling if necessary
             if (blockContext.getConstructionType() != 
@@ -993,7 +998,12 @@
             }
 
             // Construct the JAX-WS generated exception that holds the faultBeanObject
-            Class exceptionClass = loadClass(faultDesc.getExceptionClassName());
+            Class exceptionClass;
+            try {
+                exceptionClass = loadClass(faultDesc.getExceptionClassName());
+            } catch (ClassNotFoundException e){
+                exceptionClass = loadClass(faultDesc.getExceptionClassName(), operationDesc.getEndpointInterfaceDescription().getEndpointDescription().getAxisService().getClassLoader());
+            }
             if (log.isErrorEnabled()) {
                 log.debug("Found FaultDescription.  The exception name is " +
                         exceptionClass.getName());
@@ -1082,12 +1092,27 @@
     }
 
     /**
+     * Load the class
+     *
+     * @param className
+     * @return loaded class
+     * @throws ClassNotFoundException
+     */
+    static Class loadClass(String className, ClassLoader cl) throws ClassNotFoundException {
+        // Don't make this public, its a security exposure
+        Class cls = ClassUtils.getPrimitiveClass(className);
+        if (cls == null) {
+            cls = forName(className, true, cl);
+        }
+        return cls;
+    }
+    /**
      * Return the class for this name
      *
      * @return Class
      */
     private static Class forName(final String className, final boolean initialize,
-                                 final ClassLoader classLoader) {
+                                 final ClassLoader classLoader) throws ClassNotFoundException {
         // NOTE: This method must remain private because it uses AccessController
         Class cl = null;
         try {
@@ -1107,7 +1132,7 @@
             if (log.isDebugEnabled()) {
                 log.debug("Exception thrown from AccessController: " + e);
             }
-            throw ExceptionFactory.makeWebServiceException(e.getException());
+            throw (ClassNotFoundException) e.getException();
         }
 
         return cl;

Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/runtime/description/marshal/impl/AnnotationBuilder.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/runtime/description/marshal/impl/AnnotationBuilder.java?rev=647636&r1=647635&r2=647636&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/runtime/description/marshal/impl/AnnotationBuilder.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/runtime/description/marshal/impl/AnnotationBuilder.java Sun Apr 13 15:18:50 2008
@@ -88,15 +88,19 @@
                                            Map<String, AnnotationDesc> map) {
         String implClassName = getServiceImplClassName(endpointDesc);
         if (implClassName != null) {
-            Class clz = loadClass(implClassName);
+            Class clz;
+            clz = loadClass(implClassName);
+            if(clz == null){
+                clz = loadClass(implClassName, endpointDesc.getAxisService().getClassLoader());
+            }
             if (clz != null) {
-                addAnnotation(clz, map);
+                addAnnotation(endpointDesc, clz, map);
             }
         }
         EndpointInterfaceDescription endpointInterfaceDesc =
                 endpointDesc.getEndpointInterfaceDescription();
         if (endpointInterfaceDesc != null) {
-            getAnnotationDescs(endpointInterfaceDesc, ap, map);
+            getAnnotationDescs(endpointDesc, endpointInterfaceDesc, ap, map);
         }
     }
 
@@ -106,12 +110,13 @@
      * @param ap                    ArtifactProcessor which found/produced artifact classes
      * @param map
      */
-    private static void getAnnotationDescs(EndpointInterfaceDescription endpointInterfaceDesc,
+    private static void getAnnotationDescs(EndpointDescription endpointDesc, 
+                                           EndpointInterfaceDescription endpointInterfaceDesc,
                                            ArtifactProcessor ap,
                                            Map<String, AnnotationDesc> map) {
         Class clz = endpointInterfaceDesc.getSEIClass();
         if (clz != null) {
-            addAnnotation(clz, map);
+            addAnnotation(endpointDesc, clz, map);
         }
         
         // Don't dig into the async operations
@@ -120,7 +125,7 @@
         // Build a set of packages from all of the opertions
         if (opDescs != null) {
             for (int i = 0; i < opDescs.length; i++) {
-                getAnnotationDescs(opDescs[i], ap, map);
+                getAnnotationDescs(endpointDesc, opDescs[i], ap, map);
             }
         }
     }
@@ -133,7 +138,8 @@
      * @param ap     ArtifactProcessor which found/produced artifact classes
      * @param map
      */
-    private static void getAnnotationDescs(OperationDescription opDesc,
+    private static void getAnnotationDescs(EndpointDescription endpointDesc,
+                                           OperationDescription opDesc,
                                            ArtifactProcessor ap,
                                            Map<String, AnnotationDesc> map) {
 
@@ -141,7 +147,7 @@
         ParameterDescription[] parameterDescs = opDesc.getParameterDescriptions();
         if (parameterDescs != null) {
             for (int i = 0; i < parameterDescs.length; i++) {
-                getAnnotationDescs(parameterDescs[i], map);
+                getAnnotationDescs(endpointDesc, parameterDescs[i], map);
             }
         }
 
@@ -149,36 +155,37 @@
         FaultDescription[] faultDescs = opDesc.getFaultDescriptions();
         if (faultDescs != null) {
             for (int i = 0; i < faultDescs.length; i++) {
-                getAnnotationDescs(faultDescs[i], ap, map);
+                getAnnotationDescs(endpointDesc, faultDescs[i], ap, map);
             }
         }
 
         // Also consider the request and response wrappers
         String wrapperName = ap.getRequestWrapperMap().get(opDesc);
         if (wrapperName != null) {
-            addAnnotation(wrapperName, map);
+            addAnnotation(endpointDesc, wrapperName, map);
         }
         wrapperName = ap.getResponseWrapperMap().get(opDesc);
         if (wrapperName != null) {
-            addAnnotation(wrapperName, map);
+            addAnnotation(endpointDesc, wrapperName, map);
         }
 
         // Finally consider the result type
         Class cls = opDesc.getResultActualType();
         if (cls != null && cls != void.class && cls != Void.class) {
-            addAnnotation(cls, map);
+            addAnnotation(endpointDesc, cls, map);
         }
     }
 
 
-    private static void getAnnotationDescs(ParameterDescription paramDesc,
+    private static void getAnnotationDescs(EndpointDescription endpointDesc,
+                                           ParameterDescription paramDesc,
                                            Map<String, AnnotationDesc> map) {
 
         // Get the type that defines the actual data.  (this is never a holder )
         Class paramClass = paramDesc.getParameterActualType();
 
         if (paramClass != null) {
-            getTypeAnnotationDescs(paramClass, map);
+            getTypeAnnotationDescs(endpointDesc, paramClass, map);
         }
 
     }
@@ -189,13 +196,17 @@
      * @param faultDesc FaultDescription
      * @param set       Set<Package> that is updated
      */
-    private static void getAnnotationDescs(FaultDescription faultDesc,
+    private static void getAnnotationDescs(EndpointDescription endpointDesc, 
+                                           FaultDescription faultDesc,
                                            ArtifactProcessor ap,
                                            Map<String, AnnotationDesc> map) {
         FaultBeanDesc faultBeanDesc = ap.getFaultBeanDescMap().get(faultDesc);
         Class faultBean = loadClass(faultBeanDesc.getFaultBeanClassName());
+        if(faultBean == null) {
+            faultBean = loadClass(faultBeanDesc.getFaultBeanClassName(), endpointDesc.getAxisService().getClassLoader());    
+        }
         if (faultBean != null) {
-            getTypeAnnotationDescs(faultBean, map);
+            getTypeAnnotationDescs(endpointDesc, faultBean, map);
         }
     }
 
@@ -206,13 +217,13 @@
      *
      * @param cls
      */
-    private static void getTypeAnnotationDescs(Class cls, Map<String, AnnotationDesc> map) {
+    private static void getTypeAnnotationDescs(EndpointDescription endpointDesc, Class cls, Map<String, AnnotationDesc> map) {
 
         if (JAXBElement.class.isAssignableFrom(cls)) {
             try {
                 Method m = cls.getMethod("getValue", noClass);
                 Class cls2 = m.getReturnType();
-                addAnnotation(cls2, map);
+                addAnnotation(endpointDesc, cls2, map);
 
             } catch (Exception e) {
                 // We should never get here
@@ -221,21 +232,24 @@
                 }
             }
         } else {
-            addAnnotation(cls, map);
+            addAnnotation(endpointDesc, cls, map);
         }
     }
 
-    private static void addAnnotation(String className, Map<String, AnnotationDesc> map) {
+    private static void addAnnotation(EndpointDescription endpointDesc, String className, Map<String, AnnotationDesc> map) {
 
         if (map.get(className) == null) {
             Class clz = loadClass(className);
+            if (clz == null) {
+                clz = loadClass(className, endpointDesc.getAxisService().getClassLoader());    
+            }
             if (clz != null) {
-                addAnnotation(clz, map);
+                addAnnotation(endpointDesc, clz, map);
             }
         }
     }
 
-    private static void addAnnotation(Class cls, Map<String, AnnotationDesc> map) {
+    private static void addAnnotation(EndpointDescription endpointDesc, Class cls, Map<String, AnnotationDesc> map) {
 
         String className = cls.getCanonicalName();
         if (map.get(className) == null) {
@@ -258,11 +272,38 @@
             Class[] interfaces = cls.getInterfaces();
             if (interfaces != null) {
                 for (int i=0; i<interfaces.length; i++) {
-                    addAnnotation(interfaces[i], map);
+                    addAnnotation(endpointDesc, interfaces[i], map);
                 }
             }
             
         }
+    }
+
+    /**
+     * Loads the class
+     *
+     * @param className
+     * @return Class (or null if the class cannot be loaded)
+     */
+    private static Class loadClass(String className, ClassLoader loader) {
+        // Don't make this public, its a security exposure
+        if (className == null || className.length() == 0) {
+            return null;
+        }
+        try {
+
+            return forName(className, true,
+                           loader);
+            //Catch Throwable as ClassLoader can throw an NoClassDefFoundError that
+            //does not extend Exception, so lets catch everything that extends Throwable
+            //rather than just Exception.
+        } catch (Throwable e) {
+            // TODO Should the exception be swallowed ?
+            if (log.isDebugEnabled()) {
+                log.debug("PackageSetBuilder cannot load the following class:" + className);
+            }
+        }
+        return null;
     }
 
     /**

Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/runtime/description/marshal/impl/ArtifactProcessor.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/runtime/description/marshal/impl/ArtifactProcessor.java?rev=647636&r1=647635&r2=647636&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/runtime/description/marshal/impl/ArtifactProcessor.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/runtime/description/marshal/impl/ArtifactProcessor.java Sun Apr 13 15:18:50 2008
@@ -103,6 +103,9 @@
                     }
                     String foundRequestWrapperName = findArtifact(requestWrapperName);
                     if (foundRequestWrapperName == null) {
+                        foundRequestWrapperName = findArtifact(requestWrapperName, ed.getAxisService().getClassLoader());
+                    }
+                    if (foundRequestWrapperName == null) {
                         foundRequestWrapperName = missingArtifact(requestWrapperName);
                     }
                     if (foundRequestWrapperName != null) {
@@ -121,6 +124,9 @@
                     }
                     String foundResponseWrapperName = findArtifact(responseWrapperName);
                     if (foundResponseWrapperName == null) {
+                        foundResponseWrapperName = findArtifact(responseWrapperName, ed.getAxisService().getClassLoader());
+                    }
+                    if (foundResponseWrapperName == null) {
                         foundResponseWrapperName = missingArtifact(responseWrapperName);
                     }
                     if (foundResponseWrapperName != null) {
@@ -128,7 +134,7 @@
                     }
 
                     for (FaultDescription faultDesc : opDesc.getFaultDescriptions()) {
-                        FaultBeanDesc faultBeanDesc = create(faultDesc, opDesc);
+                        FaultBeanDesc faultBeanDesc = create(ed, faultDesc, opDesc);
                         faultBeanDescMap.put(faultDesc, faultBeanDesc);
                     }
                 }
@@ -136,7 +142,7 @@
         }
     }
 
-    private FaultBeanDesc create(FaultDescription faultDesc, OperationDescription opDesc) {
+    private FaultBeanDesc create(EndpointDescription ed, FaultDescription faultDesc, OperationDescription opDesc) {
         /* FaultBeanClass algorithm
          *   1) The class defined on @WebFault of the exception
          *   2) If not present or invalid, the class defined by getFaultInfo.
@@ -161,6 +167,9 @@
         }
         String foundClassName = findArtifact(faultBeanClassName);
         if (foundClassName == null) {
+            faultBeanClassName = findArtifact(faultBeanClassName, ed.getAxisService().getClassLoader());
+        }
+        if (foundClassName == null) {
             faultBeanClassName = missingArtifact(faultBeanClassName);
         }
         if (foundClassName != null) {
@@ -176,7 +185,12 @@
         if (faultBeanLocalName == null || faultBeanLocalName.length() == 0) {
             if (faultBeanClassName != null && faultBeanClassName.length() > 0) {
                 try {
-                    Class faultBean = loadClass(faultBeanClassName);
+                    Class faultBean;
+                    try {
+                        faultBean = loadClass(faultBeanClassName, getContextClassLoader());
+                    } catch (ClassNotFoundException e){
+                        faultBean = loadClass(faultBeanClassName, ed.getAxisService().getClassLoader());
+                    }
                     AnnotationDesc aDesc = AnnotationDescImpl.create(faultBean);
                     if (aDesc.hasXmlRootElement()) {
                         faultBeanLocalName = aDesc.getXmlRootElementName();
@@ -199,7 +213,12 @@
         if (faultBeanNamespace == null || faultBeanNamespace.length() == 0) {
             if (faultBeanClassName != null && faultBeanClassName.length() > 0) {
                 try {
-                    Class faultBean = loadClass(faultBeanClassName);
+                    Class faultBean;
+                    try {
+                        faultBean = loadClass(faultBeanClassName, getContextClassLoader());
+                    } catch (ClassNotFoundException e){
+                        faultBean = loadClass(faultBeanClassName, ed.getAxisService().getClassLoader());
+                    }
                     AnnotationDesc aDesc = AnnotationDescImpl.create(faultBean);
                     if (aDesc.hasXmlRootElement()) {
                         faultBeanNamespace = aDesc.getXmlRootElementNamespace();
@@ -291,6 +310,10 @@
     static final String JAXWS_SUBPACKAGE = "jaxws";
 
     private static String findArtifact(String artifactClassName) {
+        return findArtifact(artifactClassName, getContextClassLoader());
+    }
+
+    private static String findArtifact(String artifactClassName, ClassLoader classLoader) {
         String returnArtifactClassName = null;
         if (artifactClassName == null) {
             return returnArtifactClassName;
@@ -298,7 +321,7 @@
 
         // Try to load the class that was passed in
         try {
-            loadClass(artifactClassName);
+            forName(artifactClassName, true, classLoader);
             returnArtifactClassName = artifactClassName;
         }
         catch (ClassNotFoundException e) {
@@ -313,7 +336,7 @@
                 String className = getSimpleClassName(artifactClassName);
                 String alternateWrapperClass = alternatePackage + "." + className;
                 try {
-                    loadClass(alternateWrapperClass);
+                    loadClass(alternateWrapperClass, getContextClassLoader());
                     returnArtifactClassName = alternateWrapperClass;
                 }
                 catch (ClassNotFoundException e) {
@@ -325,9 +348,9 @@
         return returnArtifactClassName;
     }
 
-    private static Class loadClass(String className) throws ClassNotFoundException {
+    private static Class loadClass(String className, ClassLoader classLoader) throws ClassNotFoundException {
         // Don't make this public, its a security exposure
-        return forName(className, true, getContextClassLoader());
+        return forName(className, true, classLoader);
     }
 
     /**

Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/runtime/description/marshal/impl/PackageSetBuilder.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/runtime/description/marshal/impl/PackageSetBuilder.java?rev=647636&r1=647635&r2=647636&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/runtime/description/marshal/impl/PackageSetBuilder.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/runtime/description/marshal/impl/PackageSetBuilder.java Sun Apr 13 15:18:50 2008
@@ -159,6 +159,9 @@
         String implClassName = getServiceImplClassName(endpointDesc);
         if (implClassName != null) {
             Class clz = loadClass(implClassName);
+            if(clz == null){
+                clz = loadClass(implClassName, endpointDesc.getAxisService().getClassLoader());
+            }
             if (clz != null) {
                 addXmlSeeAlsoPackages(clz, msrd, set);
             }
@@ -166,7 +169,7 @@
         EndpointInterfaceDescription endpointInterfaceDesc =
                 endpointDesc.getEndpointInterfaceDescription();
         if (endpointInterfaceDesc != null) {
-            getPackagesFromAnnotations(endpointInterfaceDesc, set, msrd);
+            getPackagesFromAnnotations(endpointDesc, endpointInterfaceDesc, set, msrd);
         }
         return set;
     }
@@ -177,6 +180,7 @@
      * @param msrd
      */
     private static void getPackagesFromAnnotations(
+            EndpointDescription ed,
             EndpointInterfaceDescription endpointInterfaceDesc,
             TreeSet<String> set,
             MarshalServiceRuntimeDescription msrd) {
@@ -190,7 +194,7 @@
         // Build a set of packages from all of the operations
         if (opDescs != null) {
             for (int i = 0; i < opDescs.length; i++) {
-                getPackagesFromAnnotations(opDescs[i], set, msrd);
+                getPackagesFromAnnotations(ed, opDescs[i], set, msrd);
             }
         }
         return;
@@ -202,7 +206,7 @@
      * @param opDesc OperationDescription
      * @param set    Set<Package> that is updated
      */
-    private static void getPackagesFromAnnotations(OperationDescription opDesc, TreeSet<String> set,
+    private static void getPackagesFromAnnotations(EndpointDescription ed, OperationDescription opDesc, TreeSet<String> set,
                                                    MarshalServiceRuntimeDescription msrd) {
 
         // Walk the parameter information
@@ -217,7 +221,7 @@
         FaultDescription[] faultDescs = opDesc.getFaultDescriptions();
         if (faultDescs != null) {
             for (int i = 0; i < faultDescs.length; i++) {
-                getPackagesFromAnnotations(faultDescs[i], set, msrd);
+                getPackagesFromAnnotations(ed, faultDescs[i], set, msrd);
             }
         }
 
@@ -277,7 +281,8 @@
      * @param faultDesc FaultDescription
      * @param set       Set<Package> that is updated
      */
-    private static void getPackagesFromAnnotations(FaultDescription faultDesc, TreeSet<String> set,
+    private static void getPackagesFromAnnotations(EndpointDescription ed, 
+                                                   FaultDescription faultDesc, TreeSet<String> set,
                                                    MarshalServiceRuntimeDescription msrd) {
 
         FaultBeanDesc faultBeanDesc = msrd.getFaultBeanDesc(faultDesc);
@@ -297,6 +302,9 @@
             return;
         }
         Class faultBean = loadClass(faultBeanName);
+        if(faultBean == null){
+            faultBean = loadClass(faultBeanName, ed.getAxisService().getClassLoader());
+        }
         if (faultBean != null) {
             setTypeAndElementPackages(faultBean, faultBeanDesc.getFaultBeanNamespace(),
                                       faultBeanDesc.getFaultBeanLocalName(), set, msrd);
@@ -467,6 +475,36 @@
             Class cls = ClassUtils.getPrimitiveClass(className);
             if (cls == null) {
                 cls = Class.forName(className, true, getContextClassLoader());
+            }
+            return cls;
+            //Catch Throwable as ClassLoader can throw an NoClassDefFoundError that
+            //does not extend Exception, so lets catch everything that extends Throwable
+            //rather than just Exception.
+        } catch (Throwable e) {
+            // TODO Should the exception be swallowed ?
+            if (log.isDebugEnabled()) {
+                log.debug("PackageSetBuilder cannot load the following class:" + className);
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Loads the class
+     *
+     * @param className
+     * @return Class (or null if the class cannot be loaded)
+     */
+    private static Class loadClass(String className, ClassLoader loader) {
+        // Don't make this public, its a security exposure
+        if (className == null || className.length() == 0) {
+            return null;
+        }
+        try {
+            // Class.forName does not support primitives
+            Class cls = ClassUtils.getPrimitiveClass(className);
+            if (cls == null) {
+                cls = Class.forName(className, true, loader);
             }
             return cls;
             //Catch Throwable as ClassLoader can throw an NoClassDefFoundError that

Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/runtime/description/marshal/impl/PropertyDescriptorMapBuilder.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/runtime/description/marshal/impl/PropertyDescriptorMapBuilder.java?rev=647636&r1=647635&r2=647636&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/runtime/description/marshal/impl/PropertyDescriptorMapBuilder.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/runtime/description/marshal/impl/PropertyDescriptorMapBuilder.java Sun Apr 13 15:18:50 2008
@@ -91,7 +91,7 @@
         EndpointInterfaceDescription endpointInterfaceDesc =
                 endpointDesc.getEndpointInterfaceDescription();
         if (endpointInterfaceDesc != null) {
-            getPropertyDescMaps(endpointInterfaceDesc, ap, map);
+            getPropertyDescMaps(endpointDesc, endpointInterfaceDesc, ap, map);
         }
     }
 
@@ -101,7 +101,8 @@
      * @param ap                    ArtifactProcessor which found the artifact classes
      * @param map
      */
-    private static void getPropertyDescMaps(EndpointInterfaceDescription endpointInterfaceDesc,
+    private static void getPropertyDescMaps(EndpointDescription endpointDesc,
+                                            EndpointInterfaceDescription endpointInterfaceDesc,
                                             ArtifactProcessor ap,
                                             Map<Class, Map<String, PropertyDescriptorPlus>> map) {
         OperationDescription[] opDescs = endpointInterfaceDesc.getOperations();
@@ -109,7 +110,7 @@
         // Build a set of packages from all of the opertions
         if (opDescs != null) {
             for (int i = 0; i < opDescs.length; i++) {
-                getPropertyDescMaps(opDescs[i], ap, map);
+                getPropertyDescMaps(endpointDesc, opDescs[i], ap, map);
             }
         }
     }
@@ -119,7 +120,8 @@
      * @param opDesc
      * @param map
      */
-    private static void getPropertyDescMaps(OperationDescription opDesc,
+    private static void getPropertyDescMaps(EndpointDescription endpointDesc,
+                                            OperationDescription opDesc,
                                             ArtifactProcessor ap,
                                             Map<Class, Map<String, PropertyDescriptorPlus>> map) {
 
@@ -127,18 +129,18 @@
         FaultDescription[] faultDescs = opDesc.getFaultDescriptions();
         if (faultDescs != null) {
             for (int i = 0; i < faultDescs.length; i++) {
-                getPropertyDescMaps(faultDescs[i], ap, map);
+                getPropertyDescMaps(endpointDesc, faultDescs[i], ap, map);
             }
         }
 
         // Also consider the request and response wrappers
         String wrapperName = ap.getRequestWrapperMap().get(opDesc);
         if (wrapperName != null) {
-            addPropertyDesc(wrapperName, map);
+            addPropertyDesc(endpointDesc, wrapperName, map);
         }
         wrapperName = ap.getResponseWrapperMap().get(opDesc);
         if (wrapperName != null) {
-            addPropertyDesc(wrapperName, map);
+            addPropertyDesc(endpointDesc, wrapperName, map);
         }
     }
 
@@ -146,7 +148,8 @@
      * @param opDesc
      * @param map
      */
-    private static void getPropertyDescMaps(FaultDescription faultDesc,
+    private static void getPropertyDescMaps(EndpointDescription endpointDesc,
+                                            FaultDescription faultDesc,
                                             ArtifactProcessor ap,
                                             Map<Class, Map<String, PropertyDescriptorPlus>> map) {
         // TODO The property descriptors for legacy exceptions and the corresponding fault beans could be cached at this point.
@@ -173,18 +176,22 @@
             String faultDescBeanName = faultBeanDesc.getFaultBeanClassName();
             Class faultDescBean = loadClass(faultDescBeanName);
             if (faultDescBean != null) {
-                addPropertyDesc(faultDescBeanName, map);
-                addPropertyDesc(faultDescExceptionName, map);
+                addPropertyDesc(endpointDesc, faultDescBeanName, map);
+                addPropertyDesc(endpointDesc, faultDescExceptionName, map);
             }
 
         }
     }
 
-    private static void addPropertyDesc(String clsName,
+    private static void addPropertyDesc(EndpointDescription endpointDesc, 
+                                        String clsName,
                                         Map<Class, Map<String, PropertyDescriptorPlus>> map) {
 
         Class cls = loadClass(clsName);
         if (cls == null) {
+            cls = loadClass(clsName, endpointDesc.getAxisService().getClassLoader());
+        }
+        if (cls == null) {
             return;
         }
 
@@ -214,6 +221,33 @@
 
             return forName(className, true,
                            getContextClassLoader());
+            //Catch Throwable as ClassLoader can throw an NoClassDefFoundError that
+            //does not extend Exception, so lets catch everything that extends Throwable
+            //rather than just Exception.
+        } catch (Throwable e) {
+            // TODO Should the exception be swallowed ?
+            if (log.isDebugEnabled()) {
+                log.debug("PackageSetBuilder cannot load the following class:" + className);
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Loads the class
+     *
+     * @param className
+     * @return Class (or null if the class cannot be loaded)
+     */
+    private static Class loadClass(String className, ClassLoader cl) {
+        // Don't make this public, its a security exposure
+        if (className == null || className.length() == 0) {
+            return null;
+        }
+        try {
+
+            return forName(className, true,
+                           cl);
             //Catch Throwable as ClassLoader can throw an NoClassDefFoundError that
             //does not extend Exception, so lets catch everything that extends Throwable
             //rather than just Exception.



---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org