Package org.ow2.easybeans.naming.url

Source Code of org.ow2.easybeans.naming.url.URLFactory

/**
* EasyBeans
* Copyright (C) 2007 Bull S.A.S.
* Contact: easybeans@ow2.org
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307
* USA
*
* --------------------------------------------------------------------------
* $Id: URLFactory.java 5369 2010-02-24 14:58:19Z benoitf $
* --------------------------------------------------------------------------
*/

package org.ow2.easybeans.naming.url;

import java.net.MalformedURLException;
import java.net.URL;
import java.util.Hashtable;

import javax.naming.Context;
import javax.naming.Name;
import javax.naming.NamingException;
import javax.naming.Reference;
import javax.naming.spi.ObjectFactory;

/**
* Allow to lookup java.net.URL object.
* @author Florent BENOIT
*/
public class URLFactory implements ObjectFactory {

    /**
     * The Java type for which this factory knows how to create objects.
     */
    protected static final String FACTORY_TYPE = "java.net.URL";

    /**
     * Creates a java.net.URL object using the location or reference information
     * specified.
     * @param obj the possibly null object containing location or reference
     *        information that can be used in creating an object.
     * @param name the name of this object relative to nameCtx, or null if no
     *        name is specified.
     * @param nameCtx the context relative to which the name parameter is
     *        specified, or null if name is relative to the default initial
     *        context.
     * @param environment the possibly null environment that is used in creating
     *        the object.
     * @return a newly created java.net.URL object with the specific
     *         configuration; null if an object cannot be created.
     * @throws NamingException if this object factory encountered an exception while
     *         attempting to create an object, and no other object factories are
     *         to be tried.
     */
    public Object getObjectInstance(final Object obj, final Name name, final Context nameCtx, final Hashtable<?, ?> environment)
            throws NamingException {

        // Get the reference
        Reference ref = (Reference) obj;

        // Get the class name
        String clname = ref.getClassName();

        // Check the class name
        if (!ref.getClassName().equals(FACTORY_TYPE)) {
            throw new NamingException("Cannot create object : required type is '" + FACTORY_TYPE + "', but found type is '"
                    + clname + "'.");
        }

        URL url = null;
        String urlString = (String) ref.get("url").getContent();

        if (urlString != null) {
            try {
                url = new URL(urlString);
            } catch (MalformedURLException e) {
                NamingException ne = new NamingException("Cannot build an URL with the given string '" + urlString + "'");
                ne.initCause(e);
                throw ne;
            }
        } else {
            throw new NamingException("Can not build an object as no URL was given.");
        }

        return url;
    }

}
TOP

Related Classes of org.ow2.easybeans.naming.url.URLFactory

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.