Hi!!
I send following patch.
I added org.apache.tools.ant.taskdefs.rmic.WLRmic.java. It's rmic
adapter for Weblogic. I refered Peter Holzwarth's WLRmic.java that was
posted in January. Althogh there is one significant problem. I can't
test WLRmic code because I don't use weblogic. Does anyone test it?
I added getStubClassSuffix() and getSkelClassSuffix() at
RmicAdapter.java and DefaultRmicAdapter.java. Weblogic rmic's Stub and
Skel suffixes are different from SUN's rmic. And these methods are
needed. I took idea from Peter Holzwarth's code too.
regards.
----------------------
Takashi Okamoto
diff -urN orig/src/main/org/apache/tools/ant/taskdefs/Rmic.java
src/main/org/apache/tools/ant/taskdefs/Rmic.java
--- orig/src/main/org/apache/tools/ant/taskdefs/Rmic.java Sat Mar 17
23:25:05 2001
+++ src/main/org/apache/tools/ant/taskdefs/Rmic.java Sat Mar 17 23:25:48 2001
@@ -366,11 +366,11 @@
String compiler = project.getProperty("build.rmic");
RmicAdapter adapter = RmicAdapterFactory.getRmic(compiler, this );
-
- // now we need to populate the compiler adapter
- adapter.setRmic( this );
- Path classpath = adapter.getClasspath();
+ // now we need to populate the compiler adapter
+ adapter.setRmic(this);
+
+ Path classpath = adapter.getClasspath();
loader = new AntClassLoader(project, classpath);
// scan base dirs to build up compile lists only if a
@@ -391,7 +391,7 @@
log("RMI Compiling " + fileCount +
" class"+ (fileCount > 1 ? "es" : "")+" to " + baseDir,
Project.MSG_INFO);
-
+
// finally, lets execute the compiler!!
if (!adapter.execute()) {
throw new BuildException(FAIL_MSG, location);
@@ -401,7 +401,7 @@
// Move the generated source file to the base directory
if (null != sourceBase) {
for (int j = 0; j < fileCount; j++) {
- moveGeneratedFile(baseDir, sourceBase, (String)
compileList.elementAt(j));
+ moveGeneratedFile(baseDir, sourceBase, (String)
compileList.elementAt(j), adapter);
}
}
compileList.removeAllElements();
@@ -412,9 +412,10 @@
*
* @exception org.apache.tools.ant.BuildException When error
copying/removing files.
*/
- private void moveGeneratedFile (File baseDir, File sourceBaseFile, String
classname)
+ private void moveGeneratedFile (File baseDir, File sourceBaseFile, String
classname, RmicAdapter adapter)
throws BuildException {
- String stubFileName = classname.replace('.', File.separatorChar) +
"_Stub.java";
+ String stubFileName = classname.replace('.', File.separatorChar) +
+ adapter.getStubClassSuffix() + ".java";
File oldStubFile = new File(baseDir, stubFileName);
File newStubFile = new File(sourceBaseFile, stubFileName);
try {
@@ -426,7 +427,8 @@
throw new BuildException(msg, ioe, location);
}
if (!"1.2".equals(stubVersion)) {
- String skelFileName = classname.replace('.', '/') + "_Skel.java";
+ String skelFileName = classname.replace('.', '/') +
+ adapter.getSkelClassSuffix() + ".java";
File oldSkelFile = new File(baseDir, skelFileName);
File newSkelFile = new File(sourceBaseFile, skelFileName);
try {
diff -urN
orig/src/main/org/apache/tools/ant/taskdefs/rmic/DefaultRmicAdapter.java
src/main/org/apache/tools/ant/taskdefs/rmic/DefaultRmicAdapter.java
--- orig/src/main/org/apache/tools/ant/taskdefs/rmic/DefaultRmicAdapter.java
Sat Mar 17 23:25:05 2001
+++ src/main/org/apache/tools/ant/taskdefs/rmic/DefaultRmicAdapter.java Sat Mar
17 23:25:58 2001
@@ -75,7 +75,7 @@
*/
public abstract class DefaultRmicAdapter implements RmicAdapter {
- private Rmic attributes;
+ protected Rmic attributes;
public void setRmic( Rmic attributes ) {
this.attributes = attributes;
@@ -297,17 +297,17 @@
RmicFileNameMapper() {
stubMapper = new GlobPatternMapper();
stubMapper.setFrom("*.class");
- stubMapper.setTo("*_Stub.class");
+ stubMapper.setTo("*"+getStubClassSuffix()+".class");
// no _Skel file in stub version 1.2
if (!"1.2".equals(attributes.getStubVersion())) {
skelMapper = new GlobPatternMapper();
skelMapper.setFrom("*.class");
- skelMapper.setTo("*_Skel.class");
+ skelMapper.setTo("*"+getSkelClassSuffix()+".class");
}
}
- /**
+ /**
* Empty implementation.
*/
public void setFrom(String s) {}
@@ -319,8 +319,8 @@
public String[] mapFileName(String name) {
String[] stubName = stubMapper.mapFileName(name);
- if (stubName == null || name.endsWith("_Stub.class")
- || name.endsWith("_Skel.class")) {
+ if (stubName == null ||
name.endsWith(getStubClassSuffix()+".class")
+ || name.endsWith(getSkelClassSuffix()+".class")) {
// Not a .class file
return null;
}
@@ -341,5 +341,17 @@
}
}
}
-
+ /**
+ * Get the suffix for the rmic stub classes
+ */
+ public String getStubClassSuffix() {
+ return "_Stub";
+ }
+
+ /**
+ * Get the suffix for the rmic skeleton classes
+ */
+ public String getSkelClassSuffix() {
+ return "_Skel";
+ }
}
diff -urN orig/src/main/org/apache/tools/ant/taskdefs/rmic/RmicAdapter.java
src/main/org/apache/tools/ant/taskdefs/rmic/RmicAdapter.java
--- orig/src/main/org/apache/tools/ant/taskdefs/rmic/RmicAdapter.java Sat Mar
17 23:25:05 2001
+++ src/main/org/apache/tools/ant/taskdefs/rmic/RmicAdapter.java Sat Mar
17 23:25:58 2001
@@ -97,4 +97,14 @@
* The CLASSPATH this rmic process will use.
*/
public Path getClasspath();
+
+ /**
+ * Get the suffix for the rmic stub classes
+ */
+ public String getStubClassSuffix();
+
+ /**
+ * Get the suffix for the rmic skeleton classes
+ */
+ public String getSkelClassSuffix();
}
diff -urN
orig/src/main/org/apache/tools/ant/taskdefs/rmic/RmicAdapterFactory.java
src/main/org/apache/tools/ant/taskdefs/rmic/RmicAdapterFactory.java
--- orig/src/main/org/apache/tools/ant/taskdefs/rmic/RmicAdapterFactory.java
Sat Mar 17 23:25:05 2001
+++ src/main/org/apache/tools/ant/taskdefs/rmic/RmicAdapterFactory.java Sat Mar
17 23:25:58 2001
@@ -110,9 +110,11 @@
if ( rmicType.equalsIgnoreCase("sun") ) {
return new SunRmic();
- } if ( rmicType.equalsIgnoreCase("kaffe") ) {
+ } else if ( rmicType.equalsIgnoreCase("kaffe") ) {
return new KaffeRmic();
- }
+ } else if ( rmicType.equalsIgnoreCase("weblogic") ) {
+ return new WLRmic();
+ }
return resolveClassName( rmicType );
}
diff -urN orig/src/main/org/apache/tools/ant/taskdefs/rmic/WLRmic.java
src/main/org/apache/tools/ant/taskdefs/rmic/WLRmic.java
--- orig/src/main/org/apache/tools/ant/taskdefs/rmic/WLRmic.java Thu Jan
1 09:00:00 1970
+++ src/main/org/apache/tools/ant/taskdefs/rmic/WLRmic.java Sat Mar 17
23:25:58 2001
@@ -0,0 +1,117 @@
+/*
+ * The Apache Software License, Version 1.1
+ *
+ * Copyright (c) 2001 The Apache Software Foundation. All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3. The end-user documentation included with the redistribution, if
+ * any, must include the following acknowlegement:
+ * "This product includes software developed by the
+ * Apache Software Foundation (http://www.apache.org/)."
+ * Alternately, this acknowlegement may appear in the software itself,
+ * if and wherever such third-party acknowlegements normally appear.
+ *
+ * 4. The names "The Jakarta Project", "Ant", and "Apache Software
+ * Foundation" must not be used to endorse or promote products derived
+ * from this software without prior written permission. For written
+ * permission, please contact [EMAIL PROTECTED]
+ *
+ * 5. Products derived from this software may not be called "Apache"
+ * nor may "Apache" appear in their names without prior written
+ * permission of the Apache Group.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation. For more
+ * information on the Apache Software Foundation, please see
+ * <http://www.apache.org/>.
+ */
+
+package org.apache.tools.ant.taskdefs.rmic;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.taskdefs.LogOutputStream;
+import org.apache.tools.ant.types.Commandline;
+import org.apache.tools.ant.types.Path;
+
+import java.io.*;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Method;
+
+/**
+ * The implementation of the rmic for WebLogic
+ *
+ * @author Takashi Okamoto <[EMAIL PROTECTED]>
+ */
+public class WLRmic extends DefaultRmicAdapter {
+
+ public boolean execute() throws BuildException {
+ attributes.log("Using WebLogic rmic", Project.MSG_VERBOSE);
+ Commandline cmd = setupRmicCommand();
+
+ try {
+ // Create an instance of the rmic
+ Class c = Class.forName("weblogic.rmic");
+ Method doRmic = c.getMethod("main",
+ new Class [] { String[].class });
+ doRmic.invoke(null, new Object[] { cmd.getArguments() });
+ return true;
+ } catch (ClassNotFoundException ex) {
+ throw new BuildException("Cannot use WebLogic rmic, as it is not
available"+
+ " A common solution is to set the
environment variable"+
+ " CLASSPATH.", getRmic().getLocation() );
+ }
+ catch (Exception ex) {
+ if (ex instanceof BuildException) {
+ throw (BuildException) ex;
+ } else {
+ throw new BuildException("Error starting WebLogic rmic: ", ex,
getRmic().getLocation());
+ }
+ }
+ }
+
+ /**
+ * Get the suffix for the rmic stub classes
+ */
+ public String getStubClassSuffix() {
+ return "_WLStub";
+ }
+
+ /**
+ * Get the suffix for the rmic skeleton classes
+ */
+ public String getSkelClassSuffix() {
+ return "_WLSkel";
+ }
+}
+
+
+
+
+