001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: *
017: */
018:
019: package org.apache.tools.ant.taskdefs.rmic;
020:
021: import java.lang.reflect.Method;
022: import org.apache.tools.ant.AntClassLoader;
023: import org.apache.tools.ant.BuildException;
024: import org.apache.tools.ant.Project;
025: import org.apache.tools.ant.types.Commandline;
026:
027: /**
028: * The implementation of the rmic for WebLogic
029: *
030: * @since Ant 1.4
031: */
032: public class WLRmic extends DefaultRmicAdapter {
033: /** The classname of the weblogic rmic */
034: public static final String WLRMIC_CLASSNAME = "weblogic.rmic";
035: /**
036: * the name of this adapter for users to select
037: */
038: public static final String COMPILER_NAME = "weblogic";
039:
040: /** The error string to use if not able to find the weblogic rmic */
041: public static final String ERROR_NO_WLRMIC_ON_CLASSPATH = "Cannot use WebLogic rmic, as it is not "
042: + "available. A common solution is to "
043: + "set the environment variable " + "CLASSPATH.";
044:
045: /** The error string to use if not able to start the weblogic rmic */
046: public static final String ERROR_WLRMIC_FAILED = "Error starting WebLogic rmic: ";
047: /** The stub suffix */
048: public static final String WL_RMI_STUB_SUFFIX = "_WLStub";
049: /** The skeleton suffix */
050: public static final String WL_RMI_SKEL_SUFFIX = "_WLSkel";
051:
052: /**
053: * Carry out the rmic compilation.
054: * @return true if the compilation succeeded
055: * @throws BuildException on error
056: */
057: public boolean execute() throws BuildException {
058: getRmic().log("Using WebLogic rmic", Project.MSG_VERBOSE);
059: Commandline cmd = setupRmicCommand(new String[] { "-noexit" });
060:
061: AntClassLoader loader = null;
062: try {
063: // Create an instance of the rmic
064: Class c = null;
065: if (getRmic().getClasspath() == null) {
066: c = Class.forName(WLRMIC_CLASSNAME);
067: } else {
068: loader = getRmic().getProject().createClassLoader(
069: getRmic().getClasspath());
070: c = Class.forName(WLRMIC_CLASSNAME, true, loader);
071: }
072: Method doRmic = c.getMethod("main",
073: new Class[] { String[].class });
074: doRmic.invoke(null, new Object[] { cmd.getArguments() });
075: return true;
076: } catch (ClassNotFoundException ex) {
077: throw new BuildException(ERROR_NO_WLRMIC_ON_CLASSPATH,
078: getRmic().getLocation());
079: } catch (Exception ex) {
080: if (ex instanceof BuildException) {
081: throw (BuildException) ex;
082: } else {
083: throw new BuildException(ERROR_WLRMIC_FAILED, ex,
084: getRmic().getLocation());
085: }
086: } finally {
087: if (loader != null) {
088: loader.cleanup();
089: }
090: }
091: }
092:
093: /**
094: * Get the suffix for the rmic stub classes
095: * @return the stub suffix
096: */
097: public String getStubClassSuffix() {
098: return WL_RMI_STUB_SUFFIX;
099: }
100:
101: /**
102: * Get the suffix for the rmic skeleton classes
103: * @return the skeleton suffix
104: */
105: public String getSkelClassSuffix() {
106: return WL_RMI_SKEL_SUFFIX;
107: }
108: }
|