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 ()
+ }
+
}