packagesetbuilder.java
来自「开源的axis2框架的源码。用于开发WEBSERVER」· Java 代码 · 共 518 行 · 第 1/2 页
JAVA
518 行
* @param faultDesc FaultDescription
* @param set Set<Package> that is updated
*/
private static void getPackagesFromAnnotations(FaultDescription faultDesc, TreeSet<String> set,
MarshalServiceRuntimeDescription msrd) {
FaultBeanDesc faultBeanDesc = msrd.getFaultBeanDesc(faultDesc);
if(faultBeanDesc == null){
if(log.isDebugEnabled()){
log.debug("faultBeanDesc from MarshallServiceRuntimeDescription is null");
}
//NO FaultBeanDesc found nothing we can do.
return;
}
String faultBeanName = faultBeanDesc.getFaultBeanClassName();
if(faultBeanName == null){
if(log.isDebugEnabled()){
log.debug("FaultBeanName is null");
}
//We cannot load the faultBeanName
return;
}
Class faultBean = loadClass(faultBeanName);
if (faultBean != null) {
setTypeAndElementPackages(faultBean, faultBeanDesc.getFaultBeanNamespace(),
faultBeanDesc.getFaultBeanLocalName(), set, msrd);
}
}
/**
* For each data element, we need the package for both the element and its type.
*
* @param cls Class representing element, type or both
* @param namespace of the element
* @param localPart of the element
* @param set with both type and element packages set
*/
private static void setTypeAndElementPackages(Class cls, String namespace, String localPart,
TreeSet<String> set,
MarshalServiceRuntimeDescription msrd) {
// Get the element and type classes
Class eClass = getElement(cls, msrd);
Class tClass = getType(cls);
// Set the package for the type
if (tClass != null) {
Package typePkg = tClass.getPackage();
//For primitive types there is no package
String pkg = (typePkg != null) ? typePkg.getName() : null;
if (pkg != null) {
set.add(pkg);
}
}
// Set the package for the element
if (tClass != eClass) {
if (eClass == null) {
// A null or empty namespace indicates that the element is
// unqualified. This can occur if the parameter is represented as a child element
// in doc/lit wrapped. The package is determined from the wrapper element in such casses.
if (namespace != null && namespace.length() > 0) {
// Use default namespace to package algorithm
String pkg = makePackage(namespace);
if (pkg != null) {
set.add(pkg);
}
}
} else {
Package elementPkg = eClass.getPackage();
String pkg = (elementPkg != null) ? elementPkg.getName() : null;
if (pkg != null) {
set.add(pkg);
}
}
}
}
/**
* If cls represents an xml element then cls is returned. Otherwise null is returned
*
* @param cls Class
* @return Class or null
*/
private static Class getElement(Class cls, MarshalServiceRuntimeDescription msrd) {
AnnotationDesc annotationDesc = msrd.getAnnotationDesc(cls);
if (annotationDesc == null) {
// This shouldn't happen
annotationDesc = AnnotationDescImpl.create(cls);
}
if (annotationDesc.hasXmlRootElement()) {
return cls;
}
return null;
}
private final static Class[] noClass = new Class[] { };
/**
* Returns the class that defines the type.
*
* @param cls
* @return
*/
private static Class getType(Class cls) {
if (JAXBElement.class.isAssignableFrom(cls)) {
try {
Method m = cls.getMethod("getValue", noClass);
return m.getReturnType();
} catch (Exception e) {
// We should never get here
if (log.isDebugEnabled()) {
log.debug("Cannot find JAXBElement.getValue method.");
}
return null;
}
} else {
return cls;
}
}
/**
* Default Namespace to Package algorithm
*
* @param ns
* @return
*/
private static String makePackage(String ns) {
String pkgName = JavaUtils.getPackageFromNamespace(ns);
return pkgName;
}
/**
* Return the package associated with the class name. The className may not be specified (in
* which case a null Package is returned). if class has unnamed package return ""
*
* @param className String (may be null or empty)
* @return Package or null if problems occur
*/
private static String getPackageFromClassName(String className) {
Class clz = loadClass(className);
String pkg =
(clz == null) ? null : (clz.getPackage() == null) ? "" : clz.getPackage().getName();
return pkg;
}
/**
* Loads the class
*
* @param className
* @return Class (or null if the class cannot be loaded)
*/
private static Class loadClass(String className) {
// 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, 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;
}
private static Definition getWSDLDefinition(String wsdlLoc){
Definition wsdlDefinition = null;
final String wsdlLocation = wsdlLoc;
if (wsdlLocation != null && wsdlLocation.trim().length() > 0) {
try {
wsdlDefinition = (Definition) AccessController.doPrivileged(
new PrivilegedExceptionAction() {
public Object run() throws MalformedURLException, IOException, WSDLException {
String baseDir = new File(System.getProperty("basedir",".")).getCanonicalPath();
String wsdlLocationPath = new File(baseDir +File.separator+ wsdlLocation).getAbsolutePath();
File file = new File(wsdlLocationPath);
URL url = file.toURL();
if(log.isDebugEnabled()){
log.debug("Reading WSDL from URL:" +url.toString());
}
WSDLWrapper wsdlWrapper = new WSDL4JWrapper(url);
return wsdlWrapper.getDefinition();
}
});
} catch (PrivilegedActionException e) {
ExceptionFactory.makeWebServiceException(e.getException());
}
}
return wsdlDefinition;
}
/**
* Return the class for this name
*
* @return Class
*/
static Class forName(final String className, final boolean initialize,
final ClassLoader classloader) throws ClassNotFoundException {
// NOTE: This method must remain protected because it uses AccessController
Class cl = null;
try {
cl = (Class)AccessController.doPrivileged(
new PrivilegedExceptionAction() {
public Object run() throws ClassNotFoundException {
// Class.forName does not support primitives
Class cls = ClassUtils.getPrimitiveClass(className);
if (cls == null) {
cls = Class.forName(className, initialize, classloader);
}
return cls;
}
}
);
} catch (PrivilegedActionException e) {
if (log.isDebugEnabled()) {
log.debug("Exception thrown from AccessController: " + e);
}
throw (ClassNotFoundException)e.getException();
}
return cl;
}
/** @return ClassLoader */
static ClassLoader getContextClassLoader() {
// NOTE: This method must remain private because it uses AccessController
ClassLoader cl = null;
try {
cl = (ClassLoader)AccessController.doPrivileged(
new PrivilegedExceptionAction() {
public Object run() throws ClassNotFoundException {
return Thread.currentThread().getContextClassLoader();
}
}
);
} catch (PrivilegedActionException e) {
if (log.isDebugEnabled()) {
log.debug("Exception thrown from AccessController: " + e);
}
throw (RuntimeException)e.getException();
}
return cl;
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?