Package org.apache.ws.java2wsdl.jaxws

Source Code of org.apache.ws.java2wsdl.jaxws.JAXWS2WSDLCodegenEngine

/*
* 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.axiom.om.util.LogOutputStream;
import org.apache.axis2.description.java2wsdl.Java2WSDLConstants;
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 {
        LogOutputStream logOutputStream = new LogOutputStream(log,
                Integer.MAX_VALUE);
        WsgenTool genTool = new WsgenTool(logOutputStream);

        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";

}
TOP

Related Classes of org.apache.ws.java2wsdl.jaxws.JAXWS2WSDLCodegenEngine

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.