blob: 471feac54a2be452c1a4a19142a55762d7fd0ce3 [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.ws.java2wsdl.jaxws;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.apache.axis2.description.java2wsdl.Java2WSDLConstants;
import org.apache.axis2.util.LogWriter;
import org.apache.commons.io.output.WriterOutputStream;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.ws.java2wsdl.utils.Java2WSDLCommandLineOption;
import com.sun.tools.ws.wscompile.WsgenTool;
/**
* The Class JAXWS2WSDLCodegenEngine.
*/
public class JAXWS2WSDLCodegenEngine {
/** The Constant log. */
private static final Log log = LogFactory
.getLog(JAXWS2WSDLCodegenEngine.class);
/** The options map. */
private Map<String, Java2WSDLCommandLineOption> optionsMap;
/** The original args. */
private String[] originalArgs;
/**
* Instantiates a new jAXW s2 wsdl codegen engine.
*
* @param optionsMap
* the options map
* @param originalArgs
* the original args
*/
public JAXWS2WSDLCodegenEngine(
Map<String, Java2WSDLCommandLineOption> optionsMap,
String[] originalArgs) {
this.optionsMap = optionsMap;
this.originalArgs = originalArgs;
}
/**
* Generate.
*
* @throws Exception
* the exception
*/
public void generate() throws Exception {
WsgenTool genTool = new WsgenTool(new WriterOutputStream(new LogWriter(log)));
List<String> args = new ArrayList<String>();
configurImportToolOptions(args);
mergeOriginalArgs(args);
boolean success = genTool.run(args.toArray(new String[args.size()]));
if (success) {
log.info("Code generation completed");
}
}
/**
* Configur import tool options.
*
* @param args
* the args
*/
private void configurImportToolOptions(List<String> args) {
// Set some default options
args.add(WS_GEN_EXTENSION);
args.add(WS_GEN_NO_COMPILE);
args.add(WS_GEN_KEEP_FILE);
args.add(WS_GEN_WSDL);
// Set some properties based on AXIS2 JAVA2WSDL options
String location = getOptionValue(optionsMap,
Java2WSDLConstants.OUTPUT_LOCATION_OPTION);
if (location == null) {
location = getOptionValue(optionsMap,
Java2WSDLConstants.OUTPUT_LOCATION_OPTION_LONG);
}
if (location != null) {
args.add(WS_GEN_FILE_OUTPUT_DIR);
args.add(location);
}
String classPath = getOptionValue(optionsMap,
Java2WSDLConstants.CLASSPATH_OPTION);
if (classPath == null) {
classPath = getOptionValue(optionsMap,
Java2WSDLConstants.CLASSPATH_OPTION_LONG);
}
if (classPath != null) {
args.add(WS_GEN_CLASSPATH);
args.add(classPath);
}
String className = getOptionValue(optionsMap,
Java2WSDLConstants.CLASSNAME_OPTION);
if (className == null) {
className = getOptionValue(optionsMap,
Java2WSDLConstants.CLASSNAME_OPTION_LONG);
}
if (className != null) {
args.add(className);
}
}
/**
* Merge original args.
*
* @param args
* the args
*/
private void mergeOriginalArgs(List<String> args) {
List<String> axisOptionList = new ArrayList<String>();
List<String> originalArgsOps = new ArrayList<String>(
Arrays.asList(originalArgs));
originalArgsOps.remove("-"
.concat(Java2WSDLConstants.JAX_WS_SERVICE_OPTION));
originalArgsOps.remove("-"
.concat(Java2WSDLConstants.JAX_WS_SERVICE_OPTION_LONG));
Field[] allFields = Java2WSDLConstants.class.getFields();
Iterator<String> mapItr = optionsMap.keySet().iterator();
for (Field field : allFields) {
if (String.class.equals(field.getType())) {
try {
axisOptionList.add((String) field
.get(Java2WSDLConstants.class));
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
while (mapItr.hasNext()) {
Java2WSDLCommandLineOption op = optionsMap.get(mapItr.next());
if (axisOptionList.contains(op.getOptionType())) {
if (op.getOptionType() != null) {
originalArgsOps.remove("-".concat(op.getOptionType()));
}
if (op.getOptionValue() != null) {
originalArgsOps.remove(op.getOptionValue());
}
}
}
args.addAll(originalArgsOps);
log.debug("Original WSImport options" + Arrays.asList(originalArgsOps));
log.debug("All WSImport options" + Arrays.asList(args));
}
/**
* Gets the option value.
*
* @param allOptions
* the all options
* @param optionName
* the option name
* @return the option value
*/
private static String getOptionValue(Map allOptions, String optionName) {
Java2WSDLCommandLineOption option = (Java2WSDLCommandLineOption) allOptions
.get(optionName);
if (option != null) {
return option.getOptionValue().toString();
}
return null;
}
public static final String WS_GEN_FILE_OUTPUT_DIR = "-d";
public static final String WS_GEN_CLASSPATH = "-cp";
public static final String WS_GEN_KEEP_FILE = "-keep";
public static final String WS_GEN_WSDL = "-wsdl";
public static final String WS_GEN_EXTENSION = "-extension";
public static final String WS_GEN_NO_COMPILE = "-Xnocompile";
}