diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/BorlandDeploymentTool.java b/src/main/org/apache/tools/ant/taskdefs/optional/ejb/BorlandDeploymentTool.java index 1e070933d..8e857f655 100644 --- a/src/main/org/apache/tools/ant/taskdefs/optional/ejb/BorlandDeploymentTool.java +++ b/src/main/org/apache/tools/ant/taskdefs/optional/ejb/BorlandDeploymentTool.java @@ -55,21 +55,15 @@ package org.apache.tools.ant.taskdefs.optional.ejb; + import java.io.*; -import java.io.FileReader; -import java.io.LineNumberReader; -import java.io.StringReader; import java.net.*; import java.util.*; -import java.util.Iterator; import java.util.jar.*; import javax.xml.parsers.*; - import org.apache.tools.ant.*; -import org.apache.tools.ant.taskdefs.ExecTask; -import org.apache.tools.ant.taskdefs.Java; +import org.apache.tools.ant.taskdefs.*; import org.apache.tools.ant.types.*; -import org.apache.tools.ant.types.Commandline.Argument; import org.xml.sax.*; /** @@ -102,7 +96,7 @@ import org.xml.sax.*; * @author Benoit Moussaud * */ -public class BorlandDeploymentTool extends GenericDeploymentTool +public class BorlandDeploymentTool extends GenericDeploymentTool implements ExecuteStreamHandler { public static final String PUBLICID_BORLAND_EJB = "-//Inprise Corporation//DTD Enterprise JavaBeans 1.1//EN"; @@ -127,7 +121,6 @@ public class BorlandDeploymentTool extends GenericDeploymentTool /** Instance variable that stores the location of the borland DTD file. */ private String borlandDTD; - /** Instance variable that determines whether the debug mode is on */ private boolean java2iiopdebug = false; @@ -137,6 +130,8 @@ public class BorlandDeploymentTool extends GenericDeploymentTool private boolean verify = true; private String verifyArgs = ""; + private Hashtable _genfiles = new Hashtable(); + /** * set the debug mode for java2iiop (default false) **/ @@ -190,19 +185,19 @@ public class BorlandDeploymentTool extends GenericDeploymentTool protected DescriptorHandler getBorlandDescriptorHandler(final File srcDir) { DescriptorHandler handler = - new DescriptorHandler(getTask(), srcDir) { - protected void processElement() { - if (currentElement.equals("type-storage")) { - // Get the filename of vendor specific descriptor - String fileNameWithMETA = currentText; - //trim the META_INF\ off of the file name - String fileName = fileNameWithMETA.substring(META_DIR.length(), - fileNameWithMETA.length() ); - File descriptorFile = new File(srcDir, fileName); + new DescriptorHandler(getTask(), srcDir) { + protected void processElement() { + if (currentElement.equals("type-storage")) { + // Get the filename of vendor specific descriptor + String fileNameWithMETA = currentText; + //trim the META_INF\ off of the file name + String fileName = fileNameWithMETA.substring(META_DIR.length(), + fileNameWithMETA.length() ); + File descriptorFile = new File(srcDir, fileName); - ejbFiles.put(fileNameWithMETA, descriptorFile); - } - } + ejbFiles.put(fileNameWithMETA, descriptorFile); + } + } }; handler.registerDTD(PUBLICID_BORLAND_EJB, borlandDTD == null ? DEFAULT_BAS_DTD_LOCATION : borlandDTD); @@ -220,7 +215,7 @@ public class BorlandDeploymentTool extends GenericDeploymentTool */ protected void addVendorFiles(Hashtable ejbFiles, String ddPrefix) { - File borlandDD = new File(getConfig().descriptorDir,META_DIR+BAS_DD); + File borlandDD = new File(getConfig().descriptorDir,BAS_DD); if (borlandDD.exists()) { log("Borland specific file found "+ borlandDD, Project.MSG_VERBOSE); ejbFiles.put(META_DIR + BAS_DD, borlandDD); @@ -313,68 +308,50 @@ public class BorlandDeploymentTool extends GenericDeploymentTool * @param files : file list , updated by the adding generated files */ private void buildBorlandStubs(Iterator ithomes,Hashtable files ) { - org.apache.tools.ant.taskdefs.ExecTask execTask = null; - File java2iiopOut = null; - try { - java2iiopOut = File.createTempFile("java2iiop","log"); - log(" iiop log file : "+ java2iiopOut ,Project.MSG_DEBUG); - - execTask = (ExecTask) getTask().getProject().createTask("exec"); - execTask.setOutput(java2iiopOut); - if ( java2iiopdebug ) { - execTask.createArg().setValue("-VBJdebug"); - } // end of if () - - execTask.setDir(getConfig().srcDir); - execTask.setExecutable(JAVA2IIOP); - //set the classpath - execTask.createArg().setValue("-VBJclasspath"); - execTask.createArg().setPath(getCombinedClasspath()); - //list file - execTask.createArg().setValue("-list_files"); - //no TIE classes - execTask.createArg().setValue("-no_tie"); - //root dir - execTask.createArg().setValue("-root_dir"); - execTask.createArg().setValue(getConfig().srcDir.getAbsolutePath()); - //compiling order - execTask.createArg().setValue("-compile"); - //add the home class - while ( ithomes.hasNext()) { - execTask.createArg().setValue(ithomes.next().toString()); - } // end of while () - log("Calling java2iiop",Project.MSG_VERBOSE); - execTask.execute(); - } - catch (Exception e) { - // Have to catch this because of the semantics of calling main() - String msg = "Exception while calling java2iiop. Details: " + e.toString(); - throw new BuildException(msg, e); - } + Execute execTask = null; + + execTask = new Execute(this); + Project project = getTask().getProject(); + execTask.setAntRun(project); + execTask.setWorkingDirectory(project.getBaseDir()); + + Commandline commandline = new Commandline(); + commandline.setExecutable(JAVA2IIOP); + //debug ? + if ( java2iiopdebug ) { + commandline.createArgument().setValue("-VBJdebug"); + } // end of if () + //set the classpath + commandline.createArgument().setValue("-VBJclasspath"); + commandline.createArgument().setPath(getCombinedClasspath()); + //list file + commandline.createArgument().setValue("-list_files"); + //no TIE classes + commandline.createArgument().setValue("-no_tie"); + //root dir + commandline.createArgument().setValue("-root_dir"); + commandline.createArgument().setValue(getConfig().srcDir.getAbsolutePath()); + //compiling order + commandline.createArgument().setValue("-compile"); + //add the home class + while ( ithomes.hasNext()) { + commandline.createArgument().setValue(ithomes.next().toString()); + } // end of while () try { - FileReader fr = new FileReader(java2iiopOut); - LineNumberReader lnr = new LineNumberReader(fr); - String javafile; - while ( ( javafile = lnr.readLine()) != null) { - if ( javafile.endsWith(".java") ) { - String classfile = toClassFile(javafile); - - String key = classfile.substring(getConfig().srcDir.getAbsolutePath().length()+1); - log(" generated : "+ classfile ,Project.MSG_DEBUG); - log(" key : "+ key ,Project.MSG_DEBUG); - files.put(key, new File(classfile)); - } // end of if () - } // end of while () - lnr.close(); - } - catch(Exception e) { - String msg = "Exception while parsing java2iiop output. Details: " + e.toString(); - throw new BuildException(msg, e); + log("Calling java2iiop",Project.MSG_VERBOSE); + log(commandline.toString(),Project.MSG_DEBUG); + execTask.setCommandline(commandline.getCommandline()); + int result = execTask.execute(); + if ( result != 0 ) { + String msg = "Failed executing java2iiop (ret code is "+result+")"; + throw new BuildException(msg, getTask().getLocation()); + } } - - //delete the output , only if all is succesfull - java2iiopOut.delete(); + catch (java.io.IOException e) { + log("java2iiop exception :"+e.getMessage(),Project.MSG_ERR); + throw new BuildException(e,getTask().getLocation()); + } } /** @@ -398,6 +375,9 @@ public class BorlandDeploymentTool extends GenericDeploymentTool } // end of while () buildBorlandStubs(homes.iterator(),files); + + //add the gen files to the collection + files.putAll(_genfiles); super.writeJar(baseName, jarFile, files, publicId); @@ -432,4 +412,52 @@ public class BorlandDeploymentTool extends GenericDeploymentTool return classfile; } + // implementation of org.apache.tools.ant.taskdefs.ExecuteStreamHandler interface + + public void start() throws IOException { } + public void stop() { } + public void setProcessInputStream(OutputStream param1) throws IOException { } + + /** + * + * @param param1 + * @exception java.io.IOException + */ + public void setProcessOutputStream(InputStream is) throws IOException + { + try { + BufferedReader reader = new BufferedReader(new InputStreamReader(is)); + String javafile; + while ( ( javafile = reader.readLine()) != null) { + log("buffer:" +javafile,Project.MSG_DEBUG); + if ( javafile.endsWith(".java") ) { + String classfile = toClassFile(javafile); + String key = classfile.substring(getConfig().srcDir.getAbsolutePath().length()+1); + log(" generated : "+ classfile ,Project.MSG_DEBUG); + log(" key : "+ key ,Project.MSG_DEBUG); + _genfiles.put(key, new File(classfile)); + } // end of if () + } // end of while () + reader.close(); + } + catch(Exception e) { + String msg = "Exception while parsing java2iiop output. Details: " + e.toString(); + throw new BuildException(msg, e); + } + } + + /** + * @param param1 + * @exception java.io.IOException + */ + public void setProcessErrorStream(InputStream is) throws IOException + { + BufferedReader reader = new BufferedReader(new InputStreamReader(is)); + String s = reader.readLine(); + if ( s != null) + { + log("[java2iiop] "+s,Project.MSG_DEBUG); + } // end of if () + } + }