[ http://issues.apache.org/jira/browse/AXIS2-137?page=all ]
Deepal Jayasinghe resolved AXIS2-137:
-------------------------------------
Fix Version: 0.91
Resolution: Fixed
Assign To: Deepal Jayasinghe
Thanks Gopalakrishnan , it was my fault. and I fixed it in the following way
if (axis2repository == null) {
String userHome = System.getProperty("user.home");
File userHomedir = new File(userHome);
File repository = new File(userHomedir, ".axis2home");
if (!repository.exists()) {
repository.mkdirs();
modules = new File(repository, "modules");
modules.mkdirs();
} else {
modules = new File(repository, "modules");
if(!modules.exists()){
modules.mkdirs();
}
}
} else {
modules = new File(axis2repository, "modules");
if (!modules.exists()) {
modules = new File(axis2repository, "modules");
modules.mkdirs();
}
}
String modulearchiveName = moduleName + ".mar";
modulearchiveFile = new File(modules, modulearchiveName);
if (modulearchiveFile.exists()) {
return modulearchiveFile;
}
//
// else {
// modulearchiveFile.createNewFile();
// }
//
ClassLoader cl = Thread.currentThread().getContextClassLoader();
InputStream in = cl.getResourceAsStream("modules/" + moduleName +
".mar");
if (in == null) {
in = cl.getResourceAsStream("modules/" + moduleName + ".jar");
}
if (in == null) {
throw new DeploymentException(moduleName + " module is not
found");
} else {
modulearchiveFile.createNewFile();
FileOutputStream dest = new
FileOutputStream(modulearchiveFile);
ZipOutputStream out = new ZipOutputStream(new
BufferedOutputStream(dest));
byte data[] = new byte[BUFFER];
ZipInputStream zin = null;
zin = new ZipInputStream(in);
ZipEntry entry;
while ((entry = zin.getNextEntry()) != null) {
ZipEntry zip = new ZipEntry(entry);
out.putNextEntry(zip);
int count;
while ((count = zin.read(data, 0, BUFFER)) != -1) {
out.write(data, 0, count);
}
}
out.close();
zin.close();
}
} catch (Exception e) {
throw new DeploymentException(e);
}
return modulearchiveFile;
}
> ArchiveReader.creatModuleArchivefromResource(): handling of module archive
> has problems.
> ----------------------------------------------------------------------------------------
>
> Key: AXIS2-137
> URL: http://issues.apache.org/jira/browse/AXIS2-137
> Project: Apache Axis 2.0 (Axis2)
> Type: Bug
> Components: deployment
> Versions: 0.9
> Reporter: Gopalakrishnan
> Assignee: Deepal Jayasinghe
> Fix For: 0.91
>
> There 3 problems in this:
> 1.
> org.apache.axis2.deployment.repository.util.ArchiveReader.creatModuleArchivefromResource()
> has this piece of code:
> if(DeploymentEngine.axis2repository == null ){
> String userHome = System.getProperty("user.home");
> File userHomedir = new File(userHome);
> File repository = new File(userHomedir, ".axis2home");
> 184: if (!repository.exists()) { *****
> repository.mkdirs();
> modules = new File(repository, "modules");
> modules.mkdirs();
> }
> } else {
> modules = new File(DeploymentEngine.axis2repository, "modules");
> if (!modules.exists()) {
> modules = new File(DeploymentEngine.axis2repository, "modules");
> modules.mkdirs();
> }
> }
> String modulearchiveName = moduleName + ".mar";
> 197: modulearchiveFile = new File(modules, modulearchiveName);
> So when the repository directory exsists(line 184), the module variable will
> not be initialized and at Line 197, modules will still be null. So the
> moduleArchiveFile will point to a file in the users 'current directory' and
> the .mar file will get extracted in the user's current dir, instead of the
> userhome/.axis2home/modules dir.
> the code should have been:
> if (DeploymentEngine.axis2repository == null) {
> modules = new File(System.getProperty("user.home"),
> ".axis2home/modules");
> } else {
> modules = new File(DeploymentEngine.axis2repository, "modules");
> }
> if (!modules.exists())
> modules.mkdirs();
>
> String modulearchiveName = moduleName + ".mar";
> modulearchiveFile = new File(modules, modulearchiveName);
>
> 2.
> Another problem is from 198 - 202
> if (modulearchiveFile.exists()) {
> return modulearchiveFile;
> } else {
> modulearchiveFile.createNewFile();
> }
> If the module file exsists it returns it otherwise creates a new one. But we
> are creating the new file too early, what if we are not able to load the
> module file as resource. This will endup in creating a 0 byte file file in
> the repository and from next time onwards axis will try to load this 0 byte
> file and will give a module.xml not found error. We should do
> modulearchiveFile.createNewFile(); only after
> if(in == null){
> throw new DeploymentException( moduleName + " module is not
> found");
> }
> succeeds.
> 3. Why are we caching the module archive in the repository dir? This will
> create problems if I update the .mar file in my distribution(.jar file or
> .war file). Axis engine will find the old .mar file in the repository and use
> it, instead of loading the new .mar from the distribution .jar or .war.
>
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira