1 // ======================================================================== 2 // $Id: javaURLContextFactory.java 231 2006-02-19 15:09:58Z janb $ 3 // Copyright 1999-2006 Mort Bay Consulting Pty. Ltd. 4 // ------------------------------------------------------------------------ 5 // Licensed under the Apache License, Version 2.0 (the "License"); 6 // you may not use this file except in compliance with the License. 7 // You may obtain a copy of the License at 8 // http://www.apache.org/licenses/LICENSE-2.0 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 // ======================================================================== 15 16 package org.mortbay.naming.java; 17 18 import java.util.Hashtable; 19 20 import javax.naming.Context; 21 import javax.naming.Name; 22 import javax.naming.NamingException; 23 import javax.naming.spi.ObjectFactory; 24 25 import org.mortbay.log.Log; 26 27 28 /** javaURLContextFactory 29 * <p>This is the URL context factory for the java: URL. 30 * 31 * <p><h4>Notes</h4> 32 * <p> 33 * 34 * <p><h4>Usage</h4> 35 * <pre> 36 */ 37 /* 38 * </pre> 39 * 40 * @see 41 * 42 * @author <a href="mailto:janb@mortbay.com">Jan Bartel</a> 43 * @version 1.0 44 */ 45 public class javaURLContextFactory implements ObjectFactory 46 { 47 48 /** 49 * Either return a new context or the resolution of a url. 50 * 51 * @param url an <code>Object</code> value 52 * @param name a <code>Name</code> value 53 * @param ctx a <code>Context</code> value 54 * @param env a <code>Hashtable</code> value 55 * @return a new context or the resolved object for the url 56 * @exception Exception if an error occurs 57 */ 58 public Object getObjectInstance(Object url, Name name, Context ctx, Hashtable env) 59 throws Exception 60 { 61 // null object means return a root context for doing resolutions 62 if (url == null) 63 { 64 if(Log.isDebugEnabled())Log.debug(">>> new root context requested "); 65 return new javaRootURLContext(env); 66 } 67 68 // return the resolution of the url 69 if (url instanceof String) 70 { 71 if(Log.isDebugEnabled())Log.debug(">>> resolution of url "+url+" requested"); 72 Context rootctx = new javaRootURLContext (env); 73 return rootctx.lookup ((String)url); 74 } 75 76 // return the resolution of at least one of the urls 77 if (url instanceof String[]) 78 { 79 if(Log.isDebugEnabled())Log.debug(">>> resolution of array of urls requested"); 80 String[] urls = (String[])url; 81 Context rootctx = new javaRootURLContext (env); 82 Object object = null; 83 NamingException e = null; 84 for (int i=0;(i< urls.length) && (object == null); i++) 85 { 86 try 87 { 88 object = rootctx.lookup (urls[i]); 89 } 90 catch (NamingException x) 91 { 92 e = x; 93 } 94 } 95 96 if (object == null) 97 throw e; 98 else 99 return object; 100 } 101 102 if(Log.isDebugEnabled())Log.debug(">>> No idea what to do, so return a new root context anyway"); 103 return new javaRootURLContext (env); 104 } 105 };