You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by ga...@apache.org on 2008/10/31 19:40:36 UTC
svn commit: r709529 - in
/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment:
AxisConfigBuilder.java DeploymentEngine.java RepositoryListener.java
Author: gawor
Date: Fri Oct 31 11:40:35 2008
New Revision: 709529
URL: http://svn.apache.org/viewvc?rev=709529&view=rev
Log:
partial fix for the multiple deployer for the same extension problem (AXIS2-4101)
Modified:
webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/AxisConfigBuilder.java
webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/DeploymentEngine.java
webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/RepositoryListener.java
Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/AxisConfigBuilder.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/AxisConfigBuilder.java?rev=709529&r1=709528&r2=709529&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/AxisConfigBuilder.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/AxisConfigBuilder.java Fri Oct 31 11:40:35 2008
@@ -67,6 +67,7 @@
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
+import java.util.Map;
public class AxisConfigBuilder extends DescriptionBuilder {
@@ -354,19 +355,20 @@
}
private void processDeployers(Iterator deployerItr) {
- HashMap directoryToExtensionMappingMap = new HashMap();
HashMap extensionToDeployerMappingMap = new HashMap();
+ Map<String, Map<String, Deployer>> deployers = new HashMap<String, Map<String, Deployer>>();
while (deployerItr.hasNext()) {
OMElement element = (OMElement) deployerItr.next();
String directory = element.getAttributeValue(new QName(DIRECTORY));
if (directory == null) {
log.error("Deployer missing 'directory' attribute : " + element.toString());
+ continue;
}
String extension = element.getAttributeValue(new QName(EXTENSION));
if (extension == null) {
log.error("Deployer missing 'extension' attribute : " + element.toString());
- return;
+ continue;
}
// A leading dot is redundant, so strip it. So we allow either ".foo" or "foo", either
@@ -388,19 +390,18 @@
}
deployer.setDirectory(directory);
deployer.setExtension(extension);
- if (directory != null) {
- ArrayList extensionList = (ArrayList) directoryToExtensionMappingMap.get(directory);
- if (extensionList == null) {
- extensionList = new ArrayList();
- }
- extensionList.add(extension);
- directoryToExtensionMappingMap.put(directory, extensionList);
+
+ Map<String, Deployer> extensionMap = deployers.get(directory);
+ if (extensionMap == null) {
+ extensionMap = new HashMap<String, Deployer>();
+ deployers.put(directory, extensionMap);
}
+ extensionMap.put(extension, deployer);
extensionToDeployerMappingMap.put(extension, deployer);
}
if (deploymentEngine != null) {
- deploymentEngine.setDirectoryToExtensionMappingMap(directoryToExtensionMappingMap);
deploymentEngine.setExtensionToDeployerMappingMap(extensionToDeployerMappingMap);
+ deploymentEngine.setDeployers(deployers);
}
}
Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/DeploymentEngine.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/DeploymentEngine.java?rev=709529&r1=709528&r2=709529&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/DeploymentEngine.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/DeploymentEngine.java Fri Oct 31 11:40:35 2008
@@ -121,12 +121,11 @@
//To deploy modules (both mar and expanded)
protected ModuleDeployer moduleDeployer;
- //To keep the mapping that which directory will contain which type ,
- // for exmaple directory services will contains .aar
- private HashMap directoryToExtensionMappingMap = new HashMap();
//to keep map of which deployer can process which file extension ,
// for example ServiceDeployer will process .aar file
private HashMap extensionToDeployerMappingMap = new HashMap();
+
+ private Map<String, Map<String, Deployer>> deployerMap = new HashMap<String, Map<String, Deployer>>();
public void loadServices() {
repoListener.checkServices();
@@ -176,62 +175,61 @@
}
private void loadCustomServices(URL repoURL){
- Map directoryToExtensionMappingMap = getDirectoryToExtensionMappingMap();
- if (directoryToExtensionMappingMap.size() > 0) {
- Iterator keys = directoryToExtensionMappingMap.keySet().iterator();
- while (keys.hasNext()) {
- try {
- String directory = (String)keys.next();
- ArrayList list = (ArrayList)directoryToExtensionMappingMap.get(directory);
- String listName;
- if (!directory.endsWith("/")) {
- listName = directory + ".list";
- directory += "/";
- } else {
- listName = directory.replaceAll("/","") + ".list";
- }
- String repoPath = repoURL.getPath();
- if (!repoPath.endsWith("/")) {
- repoPath += "/";
- repoURL = new URL(repoURL.getProtocol() + "://" + repoPath);
+ for (Map.Entry<String, Map<String, Deployer>> entry : getDeployers().entrySet()) {
+ String directory = entry.getKey();
+ Map<String, Deployer> extensionMap = entry.getValue();
+ try {
+ String listName;
+ if (!directory.endsWith("/")) {
+ listName = directory + ".list";
+ directory += "/";
+ } else {
+ listName = directory.replaceAll("/","") + ".list";
+ }
+ String repoPath = repoURL.getPath();
+ if (!repoPath.endsWith("/")) {
+ repoPath += "/";
+ repoURL = new URL(repoURL.getProtocol() + "://" + repoPath);
+ }
+
+ URL servicesDir = new URL(repoURL, directory);
+ URL filelisturl = new URL(servicesDir, listName);
+ ArrayList files = getFileList(filelisturl);
+ for (int i = 0; i < files.size(); i++) {
+ String fileName = (String) files.get(i);
+ String extension = getExtension(fileName);
+ Deployer deployer = extensionMap.get(extension);
+ if (deployer == null) {
+ continue;
}
+ URL servicesURL = new URL(servicesDir, fileName);
- URL servicesDir = new URL(repoURL, directory);
- URL filelisturl = new URL(servicesDir, listName);
- ArrayList files = getFileList(filelisturl);
- for (int i = 0; i < files.size(); i++) {
- String fileName = (String) files.get(i);
- Deployer deployer = getDeployerForExtension(getExtension(fileName));
- URL servicesURL = new URL(servicesDir, fileName);
-
- // We are calling reflection code here , to avoid changes to the interface
- Class classToLoad = deployer.getClass();
- // We can not call classToLoad.getDeclaredMethed() , since there
- // can be insatnce where mutiple services extends using one class
- // just for init and other reflection methods
- Method method =
- null;
+ // We are calling reflection code here , to avoid changes to the interface
+ Class classToLoad = deployer.getClass();
+ // We can not call classToLoad.getDeclaredMethed() , since there
+ // can be insatnce where mutiple services extends using one class
+ // just for init and other reflection methods
+ Method method = null;
+ try {
+ method = classToLoad.getMethod("deployFromURL", new Class[]{URL.class});
+ } catch (Exception e) {
+ //We do not need to inform this to user , since this something
+ // Axis2 is checking to support Session. So if the method is
+ // not there we should ignore that
+ }
+ if (method != null) {
try {
- method = classToLoad.getMethod("deployFromURL", new Class[]{URL.class});
+ method.invoke(deployer, new Object[]{servicesURL});
} catch (Exception e) {
- //We do not need to inform this to user , since this something
- // Axis2 is checking to support Session. So if the method is
- // not there we should ignore that
- }
- if (method != null) {
- try {
- method.invoke(deployer, new Object[]{servicesURL});
- } catch (Exception e) {
- log.info("Exception trying to call " + "deployFromURL for the deployer" + deployer.getClass() , e);
- }
+ log.info("Exception trying to call " + "deployFromURL for the deployer" + deployer.getClass() , e);
}
}
-
- } catch (MalformedURLException e) {
- //I am just ignoring the error at the moment , but need to think how to handle this
}
+ } catch (MalformedURLException e) {
+ //I am just ignoring the error at the moment , but need to think how to handle this
}
+
}
}
@@ -989,14 +987,14 @@
private void initializeDeployers(ConfigurationContext configContext) {
serviceDeployer = new ServiceDeployer();
- serviceDeployer.init(configContext);
- Iterator deployers = extensionToDeployerMappingMap.values().iterator();
- while (deployers.hasNext()) {
- Deployer deployer = (Deployer) deployers.next();
- deployer.init(configContext);
+ serviceDeployer.init(configContext);
+ for (Map<String, Deployer> extensionMap : deployerMap.values()) {
+ for (Deployer deployer : extensionMap.values()) {
+ deployer.init(configContext);
+ }
}
}
-
+
/**
* Builds an AxisModule for a given module archive file. This does not
* called the init method since there is no reference to configuration context
@@ -1170,16 +1168,15 @@
public void setExtensionToDeployerMappingMap(HashMap extensionToDeployerMappingMap) {
this.extensionToDeployerMappingMap = extensionToDeployerMappingMap;
}
-
- public void setDirectoryToExtensionMappingMap(HashMap directoryToExtensionMappingMap) {
- this.directoryToExtensionMappingMap = directoryToExtensionMappingMap;
+
+ public void setDeployers(Map<String, Map<String, Deployer>> deployerMap) {
+ this.deployerMap = deployerMap;
+ }
+
+ public Map<String, Map<String, Deployer>> getDeployers() {
+ return this.deployerMap;
}
-
-
- public HashMap getDirectoryToExtensionMappingMap() {
- return directoryToExtensionMappingMap;
- }
-
+
public RepositoryListener getRepoListener() {
return repoListener;
}
@@ -1192,7 +1189,12 @@
public ModuleDeployer getModuleDeployer() {
return moduleDeployer;
}
-
+
+ public Deployer getDeployer(String directory, String extension) {
+ Map<String, Deployer> extensionMap = deployerMap.get(directory);
+ return (extensionMap != null) ? extensionMap.get(extension) : null;
+ }
+
public Deployer getDeployerForExtension(String extension) {
return (Deployer) extensionToDeployerMappingMap.get(extension);
}
Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/RepositoryListener.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/RepositoryListener.java?rev=709529&r1=709528&r2=709529&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/RepositoryListener.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/deployment/RepositoryListener.java Fri Oct 31 11:40:35 2008
@@ -240,17 +240,11 @@
//This will load the files from the directories
// specified by axis2.xml (As <deployer>)
private void loadOtherDirectories() {
- Map directoryToExtensionMappingMap = deploymentEngine.getDirectoryToExtensionMappingMap();
- if (directoryToExtensionMappingMap.size() > 0) {
- Iterator keys = directoryToExtensionMappingMap.keySet().iterator();
- while (keys.hasNext()) {
- String s = (String)keys.next();
- ArrayList list = (ArrayList)directoryToExtensionMappingMap.get(s);
- for (int i = 0; i < list.size(); i++) {
- String extension = (String)list.get(i);
- findFileForGivenDirectory(s, extension);
- }
-
+ for (Map.Entry<String, Map<String, Deployer>> entry : deploymentEngine.getDeployers().entrySet()) {
+ String directory = entry.getKey();
+ Map<String, Deployer> extensionMap = entry.getValue();
+ for (String extension : extensionMap.keySet()) {
+ findFileForGivenDirectory(directory, extension);
}
}
}
@@ -274,7 +268,7 @@
if (!file.isDirectory() && extension
.equals(DeploymentFileData.getFileExtension(file.getName()))) {
addFileToDeploy(file,
- deploymentEngine.getDeployerForExtension(extension),
+ deploymentEngine.getDeployer(dir, extension),
WSInfo.TYPE_CUSTOM);
}
}