blob: a84017b2639324adfbb50d21d494ca4d525c996f [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.description.java2wsdl.Java2WSDLConstants;
import org.apache.tools.ant.AntClassLoader;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Task;
import org.apache.tools.ant.types.Path;
import org.apache.tools.ant.types.Reference;
import org.apache.ws.java2wsdl.Java2WSDLCodegenEngine;
import org.apache.ws.java2wsdl.MappingSet;
import org.apache.ws.java2wsdl.NamespaceMapping;
import org.apache.ws.java2wsdl.utils.Java2WSDLCommandLineOption;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
public class Java2WSDLTask extends Task implements Java2WSDLConstants {
public static final String OPEN_BRACKET = "[";
public static final String CLOSE_BRACKET = "]";
public static final String COMMA = ",";
private String className = null;
private String outputLocation = null;
private String targetNamespace = null;
private String targetNamespacePrefix = null;
private String schemaTargetNamespace = null;
private String schemaTargetNamespacePrefix = null;
private String serviceName = null;
private String outputFileName = null;
private Path classpath = null;
private String style = Java2WSDLConstants.DOCUMENT;
private String use = Java2WSDLConstants.LITERAL;
private String locationUri;
private String attrFormDefault = null;
private String elementFormDefault = null;
private String wsdlVersion = null;
private String docLitBare = null;
//names of java types not used in the service defn. directly, but for which schema must be generated
private String[] extraClasses;
//namespace generator classname
private String nsGenClassName = null;
//package to namespace map
private HashMap namespaceMap = new HashMap();
//names of java types not used in the service defn. directly, but for which schema must be generated
private ArrayList pkg2nsMappings = new ArrayList();
private MappingSet mappings = new MappingSet();
private String schemaGenClassName = null;
public String getLocationUri() {
return locationUri;
}
public void setLocationUri(String locationUri) {
this.locationUri = locationUri;
}
public String getStyle() {
return style;
}
public void setStyle(String style) {
this.style = style;
}
public String getUse() {
return use;
}
public void setUse(String use) {
this.use = use;
}
/**
*
*/
public Java2WSDLTask() {
super();
}
/**
* Fills the option map. This map is passed onto
* the code generation API to generate the code.
*/
private Map fillOptionMap() {
Map optionMap = new HashMap();
// Check that critical options exist
if (className == null) {
throw new BuildException(
"You must specify a classname");
}
////////////////////////////////////////////////////////////////
// Classname
addToOptionMap(optionMap,
Java2WSDLConstants.CLASSNAME_OPTION,
className);
// Output location
addToOptionMap(optionMap,
Java2WSDLConstants.OUTPUT_LOCATION_OPTION,
outputLocation);
// Target namespace
addToOptionMap(optionMap,
Java2WSDLConstants.TARGET_NAMESPACE_OPTION,
targetNamespace);
// Target namespace prefix
addToOptionMap(optionMap,
Java2WSDLConstants.TARGET_NAMESPACE_PREFIX_OPTION,
targetNamespacePrefix);
// Schema target namespace
addToOptionMap(optionMap,
Java2WSDLConstants.SCHEMA_TARGET_NAMESPACE_OPTION,
schemaTargetNamespace);
// Schema target namespace prefix
addToOptionMap(optionMap,
Java2WSDLConstants.SCHEMA_TARGET_NAMESPACE_PREFIX_OPTION,
schemaTargetNamespacePrefix);
// Service name
addToOptionMap(optionMap,
Java2WSDLConstants.SERVICE_NAME_OPTION,
serviceName);
// Output file name
addToOptionMap(optionMap,
Java2WSDLConstants.OUTPUT_FILENAME_OPTION,
outputFileName);
addToOptionMap(optionMap,
Java2WSDLConstants.STYLE_OPTION,
getStyle());
addToOptionMap(optionMap,
Java2WSDLConstants.USE_OPTION,
getUse());
addToOptionMap(optionMap,
Java2WSDLConstants.LOCATION_OPTION,
getLocationUri());
addToOptionMap(optionMap,
Java2WSDLConstants.ATTR_FORM_DEFAULT_OPTION,
getAttrFormDefault());
addToOptionMap(optionMap,
Java2WSDLConstants.ELEMENT_FORM_DEFAULT_OPTION,
getElementFormDefault());
addToOptionMap(optionMap,
Java2WSDLConstants.EXTRA_CLASSES_DEFAULT_OPTION,
getExtraClasses());
addToOptionMap(optionMap,
Java2WSDLConstants.NAMESPACE_GENERATOR_OPTION,
getNsGenClassName());
addToOptionMap(optionMap,
Java2WSDLConstants.SCHEMA_GENERATOR_OPTION,
getSchemaGenClassName());
addToOptionMap(optionMap,
Java2WSDLConstants.WSDL_VERSION_OPTION,
getWSDLVersion());
addToOptionMap(optionMap,
Java2WSDLConstants.DOC_LIT_BARE,
getDocLitBare());
loadPkg2NsMap();
addToOptionMap(optionMap,
Java2WSDLConstants.JAVA_PKG_2_NSMAP_OPTION,
getPkg2nsMappings());
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;
}
/**
* Function to put arguments in the option map.
* This functions skips adding of options that have a null value.
*
* @param map The option map into which the option is to be added
* @param option The option name
* @param value The value of the option
*/
private void addToOptionMap(Map map, String option, String value) {
if (value != null) {
map.put(option,
new Java2WSDLCommandLineOption(option, getStringArray(value)));
}
}
private void addToOptionMap(Map map, String option, String[] values) {
if (values != null && values.length > 0) {
map.put(option,
new Java2WSDLCommandLineOption(option, values));
}
}
private void addToOptionMap(Map map, String option, ArrayList values) {
if (values != null && !values.isEmpty()) {
map.put(option,
new Java2WSDLCommandLineOption(option, values));
}
}
public void execute() throws BuildException {
try {
Map commandLineOptions = this.fillOptionMap();
ClassLoader conextClassLoader = Thread.currentThread().getContextClassLoader();
AntClassLoader cl = new AntClassLoader(getClass().getClassLoader(),
getProject(),
classpath == null ? createClasspath() : classpath,
false);
commandLineOptions.put(Java2WSDLConstants.CLASSPATH_OPTION, new Java2WSDLCommandLineOption(Java2WSDLConstants.CLASSPATH_OPTION, classpath.list()));
Thread.currentThread().setContextClassLoader(cl);
if (outputLocation != null) cl.addPathElement(outputLocation);
new Java2WSDLCodegenEngine(commandLineOptions).generate();
Thread.currentThread().setContextClassLoader(conextClassLoader);
} catch (Throwable e) {
throw new BuildException(e);
}
}
public void setClassName(String className) {
this.className = className;
}
public void setOutputLocation(String outputLocation) {
this.outputLocation = outputLocation;
}
public void setTargetNamespace(String targetNamespace) {
this.targetNamespace = targetNamespace;
}
public void setTargetNamespacePrefix(String targetNamespacePrefix) {
this.targetNamespacePrefix = targetNamespacePrefix;
}
public void setSchemaTargetNamespace(String schemaTargetNamespace) {
this.schemaTargetNamespace = schemaTargetNamespace;
}
public void setSchemaTargetNamespacePrefix(String schemaTargetNamespacePrefix) {
this.schemaTargetNamespacePrefix = schemaTargetNamespacePrefix;
}
public void setServiceName(String serviceName) {
this.serviceName = serviceName;
}
public void setOutputFileName(String outputFileName) {
this.outputFileName = outputFileName;
}
/**
* Set the optional classpath
*
* @param classpath the classpath to use when loading class
*/
public void setClasspath(Path classpath) {
createClasspath().append(classpath);
}
/**
* Set the optional classpath
*
* @return a path instance to be configured by the Ant core.
*/
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);
}
public String getAttrFormDefault() {
return attrFormDefault;
}
public void setAttrFormDefault(String attrFormDefault) {
this.attrFormDefault = attrFormDefault;
}
public String getElementFormDefault() {
return elementFormDefault;
}
public void setElementFormDefault(String elementFormDefault) {
this.elementFormDefault = elementFormDefault;
}
public String[] getExtraClasses() {
return extraClasses;
}
public void setExtraClasses(String[] extraClasses) {
this.extraClasses = extraClasses;
}
public String getNsGenClassName() {
return nsGenClassName;
}
public void setNsGenClassName(String nsGenClassName) {
this.nsGenClassName = nsGenClassName;
}
public String getSchemaGenClassName() {
return schemaGenClassName;
}
public void setSchemaGenClassName(String schemaGenClassName) {
this.schemaGenClassName = schemaGenClassName;
}
public void loadPkg2NsMap() {
mappings.execute(namespaceMap, true);
Iterator packageNames = namespaceMap.keySet().iterator();
String packageName = null;
while (packageNames.hasNext()) {
packageName = (String) packageNames.next();
pkg2nsMappings.add(OPEN_BRACKET +
packageName +
COMMA +
namespaceMap.get(packageName) +
CLOSE_BRACKET);
}
}
public ArrayList getPkg2nsMappings() {
return pkg2nsMappings;
}
public void setPkg2nsMappings(ArrayList pkg2nsMappings) {
this.pkg2nsMappings = pkg2nsMappings;
}
/**
* add a mapping of namespaces to packages
*/
public void addMapping(NamespaceMapping mapping) {
mappings.addMapping(mapping);
}
/**
* add a mapping of namespaces to packages
*/
public void addMappingSet(MappingSet mappingset) {
mappings.addMappingSet(mappingset);
}
public String getDocLitBare() {
return docLitBare;
}
public void setDocLitBare(String docLitBare) {
this.docLitBare = docLitBare;
}
public String getWSDLVersion() {
return wsdlVersion;
}
public void setWSDLVersion(String wsdlVersion) {
this.wsdlVersion = wsdlVersion;
}
}