Package org.apache.yoko.tools.common

Source Code of org.apache.yoko.tools.common.WSDLCorbaFactory

/**
* 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.yoko.tools.common;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;

import javax.wsdl.Definition;
import javax.wsdl.WSDLException;
import javax.wsdl.extensions.ExtensionRegistry;
import javax.wsdl.xml.WSDLReader;
import javax.wsdl.xml.WSDLWriter;

public abstract class WSDLCorbaFactory {
    private static final String PROPERTY_NAME = "javax.wsdl.factory.WSDLCorbaFactory";
    private static final String PROPERTY_FILE_NAME = "wsdl.properties";
    private static final String DEFAULT_FACTORY_IMPL_NAME =
        "org.apache.yoko.tools.processors.wsdl.WSDLCorbaFactoryImpl";

    private static String fullPropertyFileName;

    /**
     * Get a new instance of a WSDLFactory. This method
     * follows (almost) the same basic sequence of steps that JAXP
     * follows to determine the fully-qualified class name of the
     * class which implements WSDLFactory. The steps (in order)
     * are:
     *<pre>
     *  Check the javax.wsdl.factory.WSDLFactory system property.
     *  Check the lib/wsdl.properties file in the JRE directory. The key
     * will have the same name as the above system property.
     *  Use the default value.
     *</pre>
     * Once an instance of a WSDLFactory is obtained, invoke
     * newDefinition(), newWSDLReader(), or newWSDLWriter(), to create
     * the desired instances.
     */
    public static WSDLCorbaFactory newInstance() throws WSDLException {
        String factoryImplName = findFactoryImplName();

        return newInstance(factoryImplName);
    }

    /**
     * Get a new instance of a WSDLFactory. This method
     * returns an instance of the class factoryImplName.
     * Once an instance of a WSDLFactory is obtained, invoke
     * newDefinition(), newWSDLReader(), or newWSDLWriter(), to create
     * the desired instances.
     *
     * @param factoryImplName the fully-qualified class name of the
     * class which provides a concrete implementation of the abstract
     * class WSDLFactory.
     */
    public static WSDLCorbaFactory newInstance(String factoryImplName) throws WSDLException {
        if (factoryImplName != null) {
            try {
                // get the appropriate class for the loading.
                ClassLoader loader = Thread.currentThread().getContextClassLoader();
                Class cl = loader.loadClass(factoryImplName);

                return (WSDLCorbaFactory)cl.newInstance();
            } catch (Exception e) {
                /*
                 Catches:
                 ClassNotFoundException
                 InstantiationException
                 IllegalAccessException
                 */
                throw new WSDLException(WSDLException.CONFIGURATION_ERROR, "Problem instantiating factory "
                                                                           + "implementation.", e);
            }
        } else {
            throw new WSDLException(WSDLException.CONFIGURATION_ERROR, "Unable to find name of factory "
                                                                       + "implementation.");
        }
    }

    /**
     * Create a new instance of a Definition.
     */
    public abstract Definition newDefinition();

    /**
     * Create a new instance of a WSDLReader.
     */
    public abstract WSDLReader newWSDLReader();

    /**
     * Create a new instance of a WSDLWriter.
     */
    public abstract WSDLWriter newWSDLWriter();

    /**
     * Create a new instance of an ExtensionRegistry with pre-registered
     * serializers/deserializers for the SOAP, HTTP and MIME
     * extensions. Java extensionTypes are also mapped for all
     * the SOAP, HTTP and MIME extensions.
     */
    public abstract ExtensionRegistry newPopulatedExtensionRegistry();

    private static String findFactoryImplName() {
        String factoryImplName = null;

        // First, check the system property.
        try {
            factoryImplName = System.getProperty(PROPERTY_NAME);

            if (factoryImplName != null) {
                return factoryImplName;
            }
        } catch (SecurityException e) {
            e.printStackTrace();
        }

        // Second, check the properties file.
        String propFileName = getFullPropertyFileName();

        if (propFileName != null) {
            try {
                Properties properties = new Properties();
                File propFile = new File(propFileName);
                FileInputStream fis = new FileInputStream(propFile);

                properties.load(fis);
                fis.close();

                factoryImplName = properties.getProperty(PROPERTY_NAME);

                if (factoryImplName != null) {
                    return factoryImplName;
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        // Third, return the default.
        return DEFAULT_FACTORY_IMPL_NAME;
    }

    private static String getFullPropertyFileName() {
        if (fullPropertyFileName == null) {
            try {
                String javaHome = System.getProperty("java.home");

                fullPropertyFileName = javaHome + File.separator + "lib" + File.separator
                                       + PROPERTY_FILE_NAME;
            } catch (SecurityException e) {
                e.printStackTrace();
            }
        }

        return fullPropertyFileName;
    }
}
TOP

Related Classes of org.apache.yoko.tools.common.WSDLCorbaFactory

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.