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