deploymentengine.java
来自「开源的axis2框架的源码。用于开发WEBSERVER」· Java 代码 · 共 1,118 行 · 第 1/4 页
JAVA
1,118 行
}
} else {
modulesDir = new File(repositoryDir, DeploymentConstants.MODULE_PATH);
}
if (!modulesDir.exists()) {
log.info(Messages.getMessage("nomoduledirfound", getRepositoryPath(repositoryDir)));
}
}
protected String getRepositoryPath(File repository) {
try {
return repository.getCanonicalPath();
} catch (IOException e) {
return repository.getAbsolutePath();
}
}
protected ArrayList getFileList(URL fileListUrl) {
ArrayList fileList = new ArrayList();
InputStream in;
try {
in = fileListUrl.openStream();
} catch (IOException e) {
return fileList;
}
BufferedReader input = null;
try {
input = new BufferedReader(new InputStreamReader(in));
String line;
while ((line = input.readLine()) != null) {
line = line.trim();
if (line.length() > 0 && line.charAt(0)!='#') {
fileList.add(line);
}
}
} catch (IOException ex) {
ex.printStackTrace();
} finally {
try {
if (input != null) {
input.close();
}
}
catch (IOException ex) {
ex.printStackTrace();
}
}
return fileList;
}
public void setConfigContext(ConfigurationContext configContext) {
this.configContext = configContext;
initializeDeployers(this.configContext);
}
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);
}
}
/**
* Builds an AxisModule for a given module archive file. This does not
* called the init method since there is no reference to configuration context
* so who ever create module using this has to called module.init if it is
* required
*
* @param modulearchive : Actual module archive file
* @param config : AxisConfiguration : for get classloaders etc..
* @return a complete AxisModule read from the file.
* @throws org.apache.axis2.deployment.DeploymentException
* if there's a problem
*/
public static AxisModule buildModule(File modulearchive,
AxisConfiguration config)
throws DeploymentException {
final String MODULE_DEPLOYER = "moduleDeployer";
AxisModule axismodule;
ModuleDeployer deployer = (ModuleDeployer) config.getParameterValue(MODULE_DEPLOYER);
try {
if (deployer == null) {
deployer = new ModuleDeployer(config);
config.addParameter(MODULE_DEPLOYER, deployer);
}
DeploymentFileData currentDeploymentFile = new DeploymentFileData(modulearchive,
deployer);
axismodule = new AxisModule();
ArchiveReader archiveReader = new ArchiveReader();
currentDeploymentFile.setClassLoader(false, config.getModuleClassLoader(), null);
axismodule.setModuleClassLoader(currentDeploymentFile.getClassLoader());
archiveReader.readModuleArchive(currentDeploymentFile, axismodule,
false, config);
ClassLoader moduleClassLoader = axismodule.getModuleClassLoader();
Flow inflow = axismodule.getInFlow();
if (inflow != null) {
Utils.addFlowHandlers(inflow, moduleClassLoader);
}
Flow outFlow = axismodule.getOutFlow();
if (outFlow != null) {
Utils.addFlowHandlers(outFlow, moduleClassLoader);
}
Flow faultInFlow = axismodule.getFaultInFlow();
if (faultInFlow != null) {
Utils.addFlowHandlers(faultInFlow, moduleClassLoader);
}
Flow faultOutFlow = axismodule.getFaultOutFlow();
if (faultOutFlow != null) {
Utils.addFlowHandlers(faultOutFlow, moduleClassLoader);
}
} catch (AxisFault axisFault) {
throw new DeploymentException(axisFault);
}
return axismodule;
}
/**
* Fills an axisservice object using services.xml. First creates
* an axisservice object using WSDL and then fills it using the given services.xml.
* Loads all the required class and builds the chains, finally adds the
* servicecontext to EngineContext and axisservice into EngineConfiguration.
*
* @param serviceInputStream InputStream containing configuration data
* @param configCtx the ConfigurationContext in which we're deploying
* @return Returns AxisService.
* @throws DeploymentException if there's a problem
*/
public static AxisService buildService(InputStream serviceInputStream,
ConfigurationContext configCtx)
throws DeploymentException {
AxisService axisService = new AxisService();
try {
ServiceBuilder builder = new ServiceBuilder(serviceInputStream, configCtx, axisService);
builder.populateService(builder.buildOM());
} catch (AxisFault axisFault) {
throw new DeploymentException(axisFault);
} catch (XMLStreamException e) {
throw new DeploymentException(e);
}
return axisService;
}
/**
* To build a AxisServiceGroup for a given services.xml
* You have to add the created group into AxisConfig
*
* @param servicesxml InputStream created from services.xml or equivalent
* @param classLoader ClassLoader to use
* @param serviceGroupName name of the service group
* @param configCtx the ConfigurationContext in which we're deploying
* @param archiveReader the ArchiveReader we're working with
* @param wsdlServices Map of existing WSDL services
* @return a fleshed-out AxisServiceGroup
* @throws AxisFault if there's a problem
*/
public static AxisServiceGroup buildServiceGroup(InputStream servicesxml,
ClassLoader classLoader,
String serviceGroupName,
ConfigurationContext configCtx,
ArchiveReader archiveReader,
HashMap wsdlServices) throws AxisFault {
DeploymentFileData currentDeploymentFile = new DeploymentFileData(null, null);
currentDeploymentFile.setClassLoader(classLoader);
AxisServiceGroup serviceGroup = new AxisServiceGroup();
serviceGroup.setServiceGroupClassLoader(classLoader);
serviceGroup.setServiceGroupName(serviceGroupName);
AxisConfiguration axisConfig = configCtx.getAxisConfiguration();
try {
ArrayList serviceList = archiveReader.buildServiceGroup(servicesxml,
currentDeploymentFile,
serviceGroup,
wsdlServices, configCtx);
fillServiceGroup(serviceGroup, serviceList, null, axisConfig);
return serviceGroup;
} catch (XMLStreamException e) {
throw AxisFault.makeFault(e);
}
}
public static AxisServiceGroup loadServiceGroup(File serviceFile,
ConfigurationContext configCtx)
throws AxisFault {
try {
DeploymentFileData currentDeploymentFile = new DeploymentFileData(serviceFile, null);
DeploymentClassLoader classLoader = new DeploymentClassLoader(new URL[]{serviceFile.toURL()},
new ArrayList(),
Thread.currentThread().getContextClassLoader());
currentDeploymentFile.setClassLoader(classLoader);
AxisServiceGroup serviceGroup = new AxisServiceGroup();
serviceGroup.setServiceGroupClassLoader(classLoader);
// Drop the extension and take the name
String fileName = serviceFile.getName();
String serviceGroupName = fileName.substring(0, fileName.lastIndexOf("."));
serviceGroup.setServiceGroupName(serviceGroupName);
AxisConfiguration axisConfig = configCtx.getAxisConfiguration();
ArchiveReader archiveReader = new ArchiveReader();
HashMap wsdlServices = archiveReader.processWSDLs(currentDeploymentFile);
InputStream serviceXml = classLoader.getResourceAsStream("META-INF/services.xml");
ArrayList serviceList = archiveReader.buildServiceGroup(serviceXml,
currentDeploymentFile,
serviceGroup,
wsdlServices, configCtx);
fillServiceGroup(serviceGroup, serviceList, null, axisConfig);
return serviceGroup;
} catch (Exception e) {
throw new DeploymentException(e);
}
}
public File getServicesDir() {
return servicesDir;
}
public File getModulesDir() {
return modulesDir;
}
public File getRepositoryDir() {
return repositoryDir;
}
public void setExtensionToDeployerMappingMap(HashMap extensionToDeployerMappingMap) {
this.extensionToDeployerMappingMap = extensionToDeployerMappingMap;
}
public void setDirectoryToExtensionMappingMap(HashMap directoryToExtensionMappingMap) {
this.directoryToExtensionMappingMap = directoryToExtensionMappingMap;
}
public HashMap getDirectoryToExtensionMappingMap() {
return directoryToExtensionMappingMap;
}
public RepositoryListener getRepoListener() {
return repoListener;
}
public ServiceDeployer getServiceDeployer() {
return serviceDeployer;
}
public ModuleDeployer getModuleDeployer() {
return moduleDeployer;
}
public Deployer getDeployerForExtension(String extension) {
return (Deployer) extensionToDeployerMappingMap.get(extension);
}
/**
* Clean up the mess
*/
public void cleanup() {
if (scheduler != null) {
scheduler.cleanup();
}
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?