blob: aa3417bd08a618c880493248402ec4762d1c83a6 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.axis2.tool.ant;
import org.apache.axis2.util.CommandLineOption;
import org.apache.axis2.util.CommandLineOptionConstants;
import org.apache.axis2.util.CommandLineOptionParser;
import org.apache.axis2.util.URLProcessor;
import org.apache.axis2.wsdl.codegen.CodeGenerationEngine;
import org.apache.axis2.wsdl.util.ConfigPropertyFileLoader;
import org.apache.tools.ant.AntClassLoader;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Task;
import org.apache.tools.ant.types.Parameter;
import org.apache.tools.ant.types.Path;
import org.apache.tools.ant.types.Reference;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Properties;
public class AntCodegenTask extends Task {
private String wsdlFileName = null;
private String output = ".";
private String language = ConfigPropertyFileLoader.getDefaultLanguage();
private String packageName = URLProcessor.DEFAULT_PACKAGE;
private String databindingName = ConfigPropertyFileLoader.getDefaultDBFrameworkName();
private String portName = null;
private String serviceName = null;
private boolean asyncOnly = false;
private boolean syncOnly = false;
private boolean serverSide = false;
private boolean testcase = false;
private boolean generateServiceXml = false;
private boolean generateAllClasses = false;
private boolean unpackClasses = false;
private boolean serverSideInterface = false;
private boolean allPorts = false;
private boolean backwardCompatible = false;
private boolean flattenFiles = false;
private boolean skipMessageReceiver = false;
private boolean skipBuildXML = false;
private boolean skipWSDL = false;
private boolean overWrite = false;
private boolean suppressPrefixes = false;
private Properties props = new Properties();
private String repositoryPath = null;
private String externalMapping = null;
private String wsdlVersion = null;
private String targetSourceFolderLocation = null;
private String targetResourcesFolderLocation = null;
private boolean unwrap = false;
private String namespaceToPackages = null;
private Path classpath;
/**
*
*/
public AntCodegenTask() {
super();
}
/**
* Sets the classpath.
*
* @return Returns Path.
*/
public Path createClasspath() {
if (classpath == null) {
classpath = new Path(getProject());
classpath = classpath.concatSystemClasspath();
}
return classpath.createPath();
}
/**
* Set the reference to an optional classpath
*
* @param r the id of the Ant path instance to act as the classpath
*/
public void setClasspathRef(Reference r) {
createClasspath().setRefid(r);
}
/** @return */
public boolean isServerSideInterface() {
return serverSideInterface;
}
/** @param serverSideInterface */
public void setServerSideInterface(boolean serverSideInterface) {
this.serverSideInterface = serverSideInterface;
}
/** Fills the option map. This map is passed onto the code generation API to generate the code. */
private Map fillOptionMap() {
Map optionMap = new HashMap();
////////////////////////////////////////////////////////////////
//WSDL file name
optionMap.put(
CommandLineOptionConstants.WSDL2JavaConstants.WSDL_LOCATION_URI_OPTION,
new CommandLineOption(
CommandLineOptionConstants.WSDL2JavaConstants.WSDL_LOCATION_URI_OPTION,
getStringArray(wsdlFileName)));
//WSDL version
if (wsdlVersion != null) {
optionMap.put(
CommandLineOptionConstants.WSDL2JavaConstants.WSDL_VERSION_OPTION,
new CommandLineOption(
CommandLineOptionConstants.WSDL2JavaConstants.WSDL_VERSION_OPTION,
getStringArray(wsdlVersion)));
}
// repository path
if (repositoryPath != null) {
optionMap.put(
CommandLineOptionConstants.WSDL2JavaConstants.REPOSITORY_PATH_OPTION,
new CommandLineOption(
CommandLineOptionConstants.WSDL2JavaConstants.REPOSITORY_PATH_OPTION,
getStringArray(repositoryPath)));
}
// external mapping
if (externalMapping != null) {
optionMap.put(
CommandLineOptionConstants.WSDL2JavaConstants.EXTERNAL_MAPPING_OPTION,
new CommandLineOption(
CommandLineOptionConstants.WSDL2JavaConstants.EXTERNAL_MAPPING_OPTION,
getStringArray(externalMapping)));
}
// target source folder location
if (targetSourceFolderLocation != null) {
optionMap.put(
CommandLineOptionConstants.WSDL2JavaConstants.SOURCE_FOLDER_NAME_OPTION,
new CommandLineOption(
CommandLineOptionConstants.WSDL2JavaConstants.SOURCE_FOLDER_NAME_OPTION,
getStringArray(targetSourceFolderLocation)));
}
// target source folder location
if (targetResourcesFolderLocation != null) {
optionMap.put(
CommandLineOptionConstants.WSDL2JavaConstants.RESOURCE_FOLDER_OPTION,
new CommandLineOption(
CommandLineOptionConstants.WSDL2JavaConstants.RESOURCE_FOLDER_OPTION,
getStringArray(targetResourcesFolderLocation)));
}
// target source folder location
if (unwrap) {
optionMap.put(
CommandLineOptionConstants.WSDL2JavaConstants.UNWRAP_PARAMETERS,
new CommandLineOption(
CommandLineOptionConstants.WSDL2JavaConstants.UNWRAP_PARAMETERS,
new String[0]));
}
//output location
optionMap.put(
CommandLineOptionConstants.WSDL2JavaConstants.OUTPUT_LOCATION_OPTION,
new CommandLineOption(
CommandLineOptionConstants.WSDL2JavaConstants.OUTPUT_LOCATION_OPTION,
getStringArray(output)));
//////////////////////////////////////////////////////////////////
// Databinding type
optionMap.put(
CommandLineOptionConstants.WSDL2JavaConstants.DATA_BINDING_TYPE_OPTION,
new CommandLineOption(
CommandLineOptionConstants.WSDL2JavaConstants.DATA_BINDING_TYPE_OPTION,
getStringArray(databindingName)));
// Async only option - forcing to generate async methods only
if (asyncOnly) {
optionMap.put(
CommandLineOptionConstants.WSDL2JavaConstants.CODEGEN_ASYNC_ONLY_OPTION,
new CommandLineOption(
CommandLineOptionConstants.WSDL2JavaConstants.CODEGEN_ASYNC_ONLY_OPTION,
new String[0]));
}
// Sync only option - forcing to generate Sync methods only
if (syncOnly) {
optionMap.put(
CommandLineOptionConstants.WSDL2JavaConstants.CODEGEN_SYNC_ONLY_OPTION,
new CommandLineOption(
CommandLineOptionConstants.WSDL2JavaConstants.CODEGEN_SYNC_ONLY_OPTION,
new String[0]));
}
//Package
optionMap.put(
CommandLineOptionConstants.WSDL2JavaConstants.PACKAGE_OPTION,
new CommandLineOption(
CommandLineOptionConstants.WSDL2JavaConstants.PACKAGE_OPTION,
getStringArray(packageName)));
//stub language
optionMap.put(
CommandLineOptionConstants.WSDL2JavaConstants.STUB_LANGUAGE_OPTION,
new CommandLineOption(
CommandLineOptionConstants.WSDL2JavaConstants.STUB_LANGUAGE_OPTION,
getStringArray(language)));
//server side and generate services.xml options
if (serverSide) {
optionMap.put(
CommandLineOptionConstants.WSDL2JavaConstants.SERVER_SIDE_CODE_OPTION,
new CommandLineOption(
CommandLineOptionConstants.WSDL2JavaConstants.SERVER_SIDE_CODE_OPTION,
new String[0]));
//services XML generation - effective only when specified as the server side
if (generateServiceXml) {
optionMap.put(
CommandLineOptionConstants.WSDL2JavaConstants
.GENERATE_SERVICE_DESCRIPTION_OPTION,
new CommandLineOption(
CommandLineOptionConstants.WSDL2JavaConstants
.GENERATE_SERVICE_DESCRIPTION_OPTION,
new String[0]));
}
//generate all option - Only valid when generating serverside code
if (generateAllClasses) {
optionMap.put(
CommandLineOptionConstants.WSDL2JavaConstants.GENERATE_ALL_OPTION,
new CommandLineOption(
CommandLineOptionConstants.WSDL2JavaConstants.GENERATE_ALL_OPTION,
new String[0]));
}
}
//generate the test case
if (testcase) {
optionMap.put(
CommandLineOptionConstants.WSDL2JavaConstants.GENERATE_TEST_CASE_OPTION,
new CommandLineOption(
CommandLineOptionConstants.WSDL2JavaConstants.GENERATE_TEST_CASE_OPTION,
new String[0]));
}
//Unwrap classes option - this determines whether the generated classes are inside the stub/MR
//or gets generates as seperate classes
if (unpackClasses) {
optionMap.put(
CommandLineOptionConstants.WSDL2JavaConstants.UNPACK_CLASSES_OPTION,
new CommandLineOption(
CommandLineOptionConstants.WSDL2JavaConstants.UNPACK_CLASSES_OPTION,
new String[0]));
}
//server side interface option
if (serverSideInterface) {
optionMap.put(
CommandLineOptionConstants.WSDL2JavaConstants.SERVER_SIDE_INTERFACE_OPTION,
new CommandLineOption(
CommandLineOptionConstants.WSDL2JavaConstants.SERVER_SIDE_INTERFACE_OPTION,
new String[0]));
}
if (allPorts) {
optionMap.put(
CommandLineOptionConstants.WSDL2JavaConstants.All_PORTS_OPTION,
new CommandLineOption(
CommandLineOptionConstants.WSDL2JavaConstants.All_PORTS_OPTION,
new String[0]));
}
if (backwardCompatible) {
optionMap.put(
CommandLineOptionConstants.WSDL2JavaConstants.BACKWORD_COMPATIBILITY_OPTION,
new CommandLineOption(
CommandLineOptionConstants.WSDL2JavaConstants.BACKWORD_COMPATIBILITY_OPTION,
new String[0]));
}
if (flattenFiles) {
optionMap.put(
CommandLineOptionConstants.WSDL2JavaConstants.FLATTEN_FILES_OPTION,
new CommandLineOption(
CommandLineOptionConstants.WSDL2JavaConstants.FLATTEN_FILES_OPTION,
new String[0]));
}
if (skipMessageReceiver) {
optionMap.put(
CommandLineOptionConstants.WSDL2JavaConstants.NO_MESSAGE_RECEIVER_OPTION_LONG,
new CommandLineOption(
CommandLineOptionConstants.WSDL2JavaConstants.NO_MESSAGE_RECEIVER_OPTION_LONG,
new String[0]));
}
if (skipBuildXML) {
optionMap.put(
CommandLineOptionConstants.WSDL2JavaConstants.NO_BUILD_XML_OPTION_LONG,
new CommandLineOption(
CommandLineOptionConstants.WSDL2JavaConstants.NO_BUILD_XML_OPTION_LONG,
new String[0]));
}
if (skipWSDL) {
optionMap.put(
CommandLineOptionConstants.WSDL2JavaConstants.NO_WSDLS_OPTION_LONG,
new CommandLineOption(
CommandLineOptionConstants.WSDL2JavaConstants.NO_WSDLS_OPTION_LONG,
new String[0]));
}
if (overWrite) {
optionMap.put(
CommandLineOptionConstants.WSDL2JavaConstants.OVERRIDE_OPTION,
new CommandLineOption(
CommandLineOptionConstants.WSDL2JavaConstants.OVERRIDE_OPTION,
new String[0]));
}
if (suppressPrefixes) {
optionMap.put(
CommandLineOptionConstants.WSDL2JavaConstants.SUPPRESS_PREFIXES_OPTION,
new CommandLineOption(
CommandLineOptionConstants.WSDL2JavaConstants.SUPPRESS_PREFIXES_OPTION,
new String[0]));
}
Iterator iterator = props.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry entry = (Map.Entry) iterator.next();
String key = CommandLineOptionConstants.WSDL2JavaConstants.EXTRA_OPTIONTYPE_PREFIX + entry.getKey();
optionMap.put(
key,
new CommandLineOption(
key,
new String[]{(String) entry.getValue()}));
}
optionMap.put(
CommandLineOptionConstants.WSDL2JavaConstants.SERVICE_NAME_OPTION,
new CommandLineOption(
CommandLineOptionConstants.WSDL2JavaConstants.SERVICE_NAME_OPTION,
new String[] { serviceName }));
optionMap.put(
CommandLineOptionConstants.WSDL2JavaConstants.PORT_NAME_OPTION,
new CommandLineOption(
CommandLineOptionConstants.WSDL2JavaConstants.PORT_NAME_OPTION,
new String[] { portName }));
// set the namespaces
optionMap.put(
CommandLineOptionConstants.WSDL2JavaConstants.NAME_SPACE_TO_PACKAGE_OPTION,
new CommandLineOption(
CommandLineOptionConstants.WSDL2JavaConstants.NAME_SPACE_TO_PACKAGE_OPTION,
new String[] { namespaceToPackages }));
return optionMap;
}
/**
* Utility method to convert a string into a single item string[]
*
* @param value
* @return Returns String[].
*/
private String[] getStringArray(String value) {
String[] values = new String[1];
values[0] = value;
return values;
}
public void execute() throws BuildException {
try {
/*
* This needs the ClassLoader we use to load the task
* have all the dependancies set, hope that
* is ok for now
*/
AntClassLoader cl = new AntClassLoader(
getClass().getClassLoader(),
getProject(),
classpath == null ? createClasspath() : classpath,
false);
Thread.currentThread().setContextClassLoader(cl);
Map commandLineOptions = this.fillOptionMap();
CommandLineOptionParser parser =
new CommandLineOptionParser(commandLineOptions);
new CodeGenerationEngine(parser).generate();
} catch (Throwable e) {
throw new BuildException(e);
}
}
public void setPortName(String portName) {
this.portName = portName;
}
public void setServiceName(String serviceName) {
this.serviceName = serviceName;
}
public void setGenerateAllClasses(boolean generateAllClasses) {
this.generateAllClasses = generateAllClasses;
}
public void setUnpackClasses(boolean unpackClasses) {
this.unpackClasses = unpackClasses;
}
public void setWsdlFileName(String wsdlFileName) {
this.wsdlFileName = wsdlFileName;
}
public void setOutput(String output) {
this.output = output;
}
public void setPackageName(String packageName) {
this.packageName = packageName;
}
public void setLanguage(String language) {
this.language = language;
}
public void setAsyncOnly(boolean asyncOnly) {
this.asyncOnly = asyncOnly;
}
public void setSyncOnly(boolean syncOnly) {
this.syncOnly = syncOnly;
}
public void setServerSide(boolean serverSide) {
this.serverSide = serverSide;
}
public void setTestcase(boolean testcase) {
this.testcase = testcase;
}
public void setGenerateServiceXml(boolean generateServiceXml) {
this.generateServiceXml = generateServiceXml;
}
public void setRepositoryPath(String repositoryPath) {
this.repositoryPath = repositoryPath;
}
public void setExternalMapping(String externalMapping) {
this.externalMapping = externalMapping;
}
public void setWsdlVersion(String wsdlVersion) {
this.wsdlVersion = wsdlVersion;
}
public void setTargetSourceFolderLocation(String targetSourceFolderLocation) {
this.targetSourceFolderLocation = targetSourceFolderLocation;
}
public void setTargetResourcesFolderLocation(String targetResourcesFolderLocation) {
this.targetResourcesFolderLocation = targetResourcesFolderLocation;
}
public void setUnwrap(boolean unwrap) {
this.unwrap = unwrap;
}
/** @return Returns Path. */
public Path getClasspath() {
return classpath;
}
/** @param path */
public void setClasspath(Path path) {
classpath = path;
}
public String getDatabindingName() {
return databindingName;
}
public void setDatabindingName(String databindingName) {
this.databindingName = databindingName;
}
public String getNamespaceToPackages() {
return namespaceToPackages;
}
public void setNamespaceToPackages(String namespaceToPackages) {
this.namespaceToPackages = namespaceToPackages;
}
public void addConfiguredParameter(Parameter prop) {
props.setProperty(prop.getName(), prop.getValue());
}
public void setSuppressPrefixes(boolean suppressPrefixes) {
this.suppressPrefixes = suppressPrefixes;
}
public void setOverWrite(boolean overWrite) {
this.overWrite = overWrite;
}
public void setSkipWSDL(boolean skipWSDL) {
this.skipWSDL = skipWSDL;
}
public void setSkipBuildXML(boolean skipBuildXML) {
this.skipBuildXML = skipBuildXML;
}
public void setSkipMessageReceiver(boolean skipMessageReceiver) {
this.skipMessageReceiver = skipMessageReceiver;
}
public void setFlattenFiles(boolean flattenFiles) {
this.flattenFiles = flattenFiles;
}
public void setBackwardCompatible(boolean backwardCompatible) {
this.backwardCompatible = backwardCompatible;
}
public void setAllPorts(boolean allPorts) {
this.allPorts = allPorts;
}
}