KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > axis > i18n > RB


1 /*
2  * Copyright 2001-2004 The Apache Software Foundation.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */

16
17 package org.apache.axis.i18n;
18
19 import java.io.IOException JavaDoc;
20 import java.io.InputStream JavaDoc;
21 import java.text.MessageFormat JavaDoc;
22 import java.util.Enumeration JavaDoc;
23 import java.util.Hashtable JavaDoc;
24 import java.util.Locale JavaDoc;
25 import java.util.MissingResourceException JavaDoc;
26 import java.util.Properties JavaDoc;
27
28 /**
29  * CURRENTLY NOT USED
30  * KEEPING FOR REFERENCE 9/19/2002
31  *
32  * <p>Wrapper class for resource bundles. Property files are used to store
33  * resource strings, which are the only types of resources available.
34  * Property files can inherit properties from other files so that
35  * a base property file can be used and a small number of properties
36  * can be over-ridden by another property file. For example you may
37  * create an english version of a resource file named "resource.properties".
38  * You then decide that the British English version of all of the properties
39  * except one are the same, so there is no need to redefine all of the
40  * properties in "resource_en_GB", just the one that is different.</p>
41  * <p>The property file lookup searches for classes with various suffixes
42  * on the basis if the desired local and the current default local
43  * (as returned by Local.getDefault()). As property files are found the
44  * property values are merged so that inheritance is preserved.</p>
45  * <p>The order of searching is:</p>
46  * <dir>
47  * basename + "_" + langage + "_" + country + "_" + variant
48  * basename + "_" + langage + "_" + country
49  * basename + "_" + langage
50  * basename + "_" + defaultLanguage + "_" + defaultCountry + "_" + defaultVariant
51  * basename + "_" + defaultLanguage + "_" + defaultCountry
52  * basename + "_" + defaultLanguage
53  * basename
54  * </dir>
55  * <p>The basename is the name of the property file without the ".properties"
56  * extension.</p>
57  * <p>Properties will be cached for performance.<p>
58  * <p>Property values stored in the property files can also contain dynamic
59  * variables. Any dynamic variable defined in PropertiesUtil.getVariableValue()
60  * can be used (such as {date}), as well as arguments in the form {0}, {1}, etc.
61  * Argument values are specified in the various overloaded getString() methods.</p>
62  *
63  * @author Karl Moss (kmoss@macromedia.com)
64  * @author Glen Daniels (gdaniels@apache.org)
65  */

66 public class RB {
67     // The static cache of properties. The key is the basename + the local +
68
// the default local and the element is the Properties object containing
69
// the resources
70
static Hashtable JavaDoc propertyCache = new Hashtable JavaDoc();
71
72     // The default base name
73
public static final String JavaDoc BASE_NAME = "resource";
74
75     // The property file extension
76
public static final String JavaDoc PROPERTY_EXT = ".properties";
77
78     // The name of the current base property file (with extension)
79
protected String JavaDoc basePropertyFileName;
80
81     // The properties for the current resource bundle
82
protected Properties JavaDoc resourceProperties;
83
84     /**
85       * Construct a new RB
86       * @param name The name of the property file without the ".properties" extension
87       */

88     public RB(String JavaDoc name) throws MissingResourceException JavaDoc
89     {
90         this(null, name, null);
91     }
92
93     /**
94       * Construct a new RB
95       * @param caller The calling object. This is used to get the package name
96       * to further construct the basename as well as to get the proper ClassLoader
97       * @param name The name of the property file without the ".properties" extension
98       */

99     public RB(Object JavaDoc caller, String JavaDoc name) throws MissingResourceException JavaDoc
100     {
101         this(caller, name, null);
102     }
103
104     /**
105       * Construct a new RB
106       * @param caller The calling object. This is used to get the package name
107       * to further construct the basename as well as to get the proper ClassLoader
108       * @param name The name of the property file without the ".properties" extension
109       * @param local The local
110       */

111     public RB(Object JavaDoc caller, String JavaDoc name, Locale JavaDoc locale) throws MissingResourceException JavaDoc
112     {
113         ClassLoader JavaDoc cl = null;
114
115         if (caller != null) {
116
117             Class JavaDoc c;
118             if (caller instanceof Class JavaDoc) {
119                 c = (Class JavaDoc) caller;
120             }
121             else {
122                 c = caller.getClass();
123             }
124
125             // Get the appropriate class loader
126
cl = c.getClassLoader();
127
128             if (name.indexOf("/") == -1) {
129
130                 // Create the full basename only if not given
131
String JavaDoc fullName = c.getName();
132
133                 int pos = fullName.lastIndexOf(".");
134                 if (pos > 0) {
135                     name = fullName.substring(0, pos + 1).replace('.', '/') + name;
136                 }
137             }
138         } else {
139             // Try the shared default properties file...
140
if (name.indexOf("/") == -1) {
141                 name = "org/apache/axis/default-resource";
142             }
143         }
144
145         Locale JavaDoc defaultLocale = Locale.getDefault();
146
147         // If the locale given is the same as the default locale, ignore it
148
if (locale != null) {
149             if (locale.equals(defaultLocale)) {
150                 locale = null;
151             }
152         }
153
154         // Load the properties. If no property files exist then a
155
// MissingResourceException will be thrown
156
loadProperties(name, cl, locale, defaultLocale);
157     }
158
159     /**
160       * Gets a string message from the resource bundle for the given key
161       * @param key The resource key
162       * @return The message
163       */

164     public String JavaDoc getString(String JavaDoc key) throws MissingResourceException JavaDoc
165     {
166         return getString(key, (Object JavaDoc[]) null);
167     }
168
169     /**
170       * <p>Gets a string message from the resource bundle for the given key. The
171       * message may contain variables that will be substituted with the given
172       * arguments. Variables have the format:</p>
173       * <dir>
174       * This message has two variables: {0} and {1}
175       * </dir>
176       * @param key The resource key
177       * @param arg0 The argument to place in variable {0}
178       * @return The message
179       */

180     public String JavaDoc getString(String JavaDoc key, Object JavaDoc arg0) throws MissingResourceException JavaDoc
181     {
182         Object JavaDoc[] o = new Object JavaDoc[1];
183         o[0] = arg0;
184         return getString(key, o);
185     }
186
187     /**
188       * <p>Gets a string message from the resource bundle for the given key. The
189       * message may contain variables that will be substituted with the given
190       * arguments. Variables have the format:</p>
191       * <dir>
192       * This message has two variables: {0} and {1}
193       * </dir>
194       * @param key The resource key
195       * @param arg0 The argument to place in variable {0}
196       * @param arg1 The argument to place in variable {1}
197       * @return The message
198       */

199     public String JavaDoc getString(String JavaDoc key, Object JavaDoc arg0, Object JavaDoc arg1) throws MissingResourceException JavaDoc
200     {
201         Object JavaDoc[] o = new Object JavaDoc[2];
202         o[0] = arg0;
203         o[1] = arg1;
204         return getString(key, o);
205     }
206
207     /**
208       * <p>Gets a string message from the resource bundle for the given key. The
209       * message may contain variables that will be substituted with the given
210       * arguments. Variables have the format:</p>
211       * <dir>
212       * This message has two variables: {0} and {1}
213       * </dir>
214       * @param key The resource key
215       * @param arg0 The argument to place in variable {0}
216       * @param arg1 The argument to place in variable {1}
217       * @param arg2 The argument to place in variable {1}
218       * @return The message
219       */

220     public String JavaDoc getString(String JavaDoc key, Object JavaDoc arg0, Object JavaDoc arg1, Object JavaDoc arg2) throws MissingResourceException JavaDoc
221     {
222         Object JavaDoc[] o = new Object JavaDoc[3];
223         o[0] = arg0;
224         o[1] = arg1;
225         o[2] = arg2;
226         return getString(key, o);
227     }
228
229     /**
230       * <p>Gets a string message from the resource bundle for the given key. The
231       * message may contain variables that will be substituted with the given
232       * arguments. Variables have the format:</p>
233       * <dir>
234       * This message has two variables: {0} and {1}
235       * </dir>
236       * @param key The resource key
237       * @param array An array of objects to place in corresponding variables
238       * @return The message
239       */

240     public String JavaDoc getString(String JavaDoc key, Object JavaDoc[] array) throws MissingResourceException JavaDoc
241     {
242         String JavaDoc msg = null;
243         if (resourceProperties != null) {
244             msg = resourceProperties.getProperty(key);
245         }
246
247         if (msg == null) {
248             throw new MissingResourceException JavaDoc("Cannot find resource key \"" + key +
249                                                "\" in base name " + basePropertyFileName,
250                                                basePropertyFileName, key);
251         }
252
253         msg = MessageFormat.format(msg, array);
254         return msg;
255     }
256
257     protected void loadProperties(String JavaDoc basename, ClassLoader JavaDoc loader, Locale JavaDoc locale,
258                                   Locale JavaDoc defaultLocale)
259         throws MissingResourceException JavaDoc
260     {
261         // Check the cache first
262
String JavaDoc loaderName = "";
263         if (loader != null) {
264             loaderName = ":" + loader.hashCode();
265         }
266         String JavaDoc cacheKey = basename + ":" + locale + ":" + defaultLocale + loaderName;
267         Properties JavaDoc p = (Properties JavaDoc) propertyCache.get(cacheKey);
268         basePropertyFileName = basename + PROPERTY_EXT;
269
270         if (p == null) {
271             // The properties were not found in the cache. Search the given locale
272
// first
273
if (locale != null) {
274                 p = loadProperties(basename, loader, locale, p);
275             }
276
277             // Search the default locale
278
if (defaultLocale != null) {
279                 p = loadProperties(basename, loader, defaultLocale, p);
280             }
281
282             // Search for the basename
283
p = merge(p, loadProperties(basePropertyFileName, loader));
284
285             if (p == null) {
286                 throw new MissingResourceException JavaDoc("Cannot find resource for base name " +
287                                                    basePropertyFileName, basePropertyFileName, "");
288             }
289
290             // Cache the properties
291
propertyCache.put(cacheKey, p);
292
293         }
294
295         resourceProperties = p;
296     }
297
298     protected Properties JavaDoc loadProperties(String JavaDoc basename, ClassLoader JavaDoc loader, Locale JavaDoc locale,
299                                         Properties JavaDoc props)
300     {
301
302         String JavaDoc language = locale.getLanguage();
303         String JavaDoc country = locale.getCountry();
304         String JavaDoc variant = locale.getVariant();
305         if (variant != null) {
306             if (variant.trim().length() == 0) {
307                 variant = null;
308             }
309         }
310
311         if (language != null) {
312
313             if (country != null) {
314
315                 if (variant != null) {
316                     props = merge(props, loadProperties(basename + "_" + language +"_" + country + "_" + variant +
317                                                         PROPERTY_EXT, loader));
318                 }
319                 props = merge(props, loadProperties(basename + "_" + language +"_" + country +
320                                                     PROPERTY_EXT, loader));
321             }
322             props = merge(props, loadProperties(basename + "_" + language + PROPERTY_EXT, loader));
323         }
324         return props;
325     }
326
327     protected Properties JavaDoc loadProperties(String JavaDoc resname, ClassLoader JavaDoc loader)
328     {
329         Properties JavaDoc props = null;
330
331         // Attempt to open and load the properties
332
InputStream JavaDoc in = null;
333         try {
334             if (loader != null) {
335                 in = loader.getResourceAsStream(resname);
336             }
337
338             // Either we're using the system class loader or we didn't find the
339
// resource using the given class loader
340
if (in == null) {
341                 in = ClassLoader.getSystemResourceAsStream(resname);
342             }
343             if (in != null) {
344                 props = new Properties JavaDoc();
345                 try {
346                     props.load(in);
347                 }
348                 catch (IOException JavaDoc ex) {
349                     // On error, clear the props
350
props = null;
351                 }
352             }
353         }
354         finally {
355             if (in != null) {
356                 try {
357                     in.close();
358                 }
359                 catch (Exception JavaDoc ex) {
360                     // Ignore error on close
361
}
362             }
363         }
364         return props;
365     }
366
367     /**
368       * Merge two Properties objects
369       */

370     protected Properties JavaDoc merge(Properties JavaDoc p1, Properties JavaDoc p2)
371     {
372         if ((p1 == null) &&
373             (p2 == null)) {
374             return null;
375         }
376         else if (p1 == null) {
377             return p2;
378         }
379         else if (p2 == null) {
380             return p1;
381         }
382
383         // Now merge. p1 takes precedence
384
Enumeration JavaDoc enumeration = p2.keys();
385         while (enumeration.hasMoreElements()) {
386             String JavaDoc key = (String JavaDoc) enumeration.nextElement();
387             if (p1.getProperty(key) == null) {
388                 p1.put(key, p2.getProperty(key));
389             }
390         }
391
392         return p1;
393     }
394
395     /**
396       * Get the underlying properties
397       */

398     public Properties JavaDoc getProperties()
399     {
400         return resourceProperties;
401     }
402
403     // STATIC ACCESSORS
404

405     /**
406       * Get a message from resource.properties from the package of the given object.
407       * @param caller The calling object, used to get the package name and class loader
408       * @param key The resource key
409       * @return The formatted message
410       */

411     public static String JavaDoc getString(Object JavaDoc caller, String JavaDoc key)
412         throws MissingResourceException JavaDoc
413     {
414         return getMessage(caller, BASE_NAME, null, key, null);
415     }
416
417     /**
418       * Get a message from resource.properties from the package of the given object.
419       * @param caller The calling object, used to get the package name and class loader
420       * @param key The resource key
421       * @param arg0 The argument to place in variable {0}
422       * @return The formatted message
423       */

424     public static String JavaDoc getString(Object JavaDoc caller, String JavaDoc key, Object JavaDoc arg0)
425         throws MissingResourceException JavaDoc
426     {
427         Object JavaDoc[] o = new Object JavaDoc[1];
428         o[0] = arg0;
429         return getMessage(caller, BASE_NAME, null, key, o);
430     }
431
432     /**
433       * Get a message from resource.properties from the package of the given object.
434       * @param caller The calling object, used to get the package name and class loader
435       * @param key The resource key
436       * @param arg0 The argument to place in variable {0}
437       * @param arg1 The argument to place in variable {1}
438       * @return The formatted message
439       */

440     public static String JavaDoc getString(Object JavaDoc caller, String JavaDoc key, Object JavaDoc arg0, Object JavaDoc arg1)
441         throws MissingResourceException JavaDoc
442     {
443         Object JavaDoc[] o = new Object JavaDoc[2];
444         o[0] = arg0;
445         o[1] = arg1;
446         return getMessage(caller, BASE_NAME, null, key, o);
447     }
448
449     /**
450       * Get a message from resource.properties from the package of the given object.
451       * @param caller The calling object, used to get the package name and class loader
452       * @param key The resource key
453       * @param arg0 The argument to place in variable {0}
454       * @param arg1 The argument to place in variable {1}
455       * @param arg2 The argument to place in variable {2}
456       * @return The formatted message
457       */

458     public static String JavaDoc getString(Object JavaDoc caller, String JavaDoc key, Object JavaDoc arg0, Object JavaDoc arg1, Object JavaDoc arg2)
459         throws MissingResourceException JavaDoc
460     {
461         Object JavaDoc[] o = new Object JavaDoc[3];
462         o[0] = arg0;
463         o[1] = arg1;
464         o[2] = arg2;
465         return getMessage(caller, BASE_NAME, null, key, o);
466     }
467
468     /**
469       * Get a message from resource.properties from the package of the given object.
470       * @param caller The calling object, used to get the package name and class loader
471       * @param key The resource key
472       * @param arg0 The argument to place in variable {0}
473       * @param arg1 The argument to place in variable {1}
474       * @param arg2 The argument to place in variable {2}
475       * @param arg3 The argument to place in variable {3}
476       * @return The formatted message
477       */

478     public static String JavaDoc getString(Object JavaDoc caller, String JavaDoc key, Object JavaDoc arg0, Object JavaDoc arg1, Object JavaDoc arg2, Object JavaDoc arg3)
479         throws MissingResourceException JavaDoc
480     {
481         Object JavaDoc[] o = new Object JavaDoc[4];
482         o[0] = arg0;
483         o[1] = arg1;
484         o[2] = arg2;
485         o[3] = arg3;
486         return getMessage(caller, BASE_NAME, null, key, o);
487     }
488
489
490     /**
491       * Get a message from resource.properties from the package of the given object.
492       * @param caller The calling object, used to get the package name and class loader
493       * @param key The resource key
494       * @param arg0 The argument to place in variable {0}
495       * @param arg1 The argument to place in variable {1}
496       * @param arg2 The argument to place in variable {2}
497       * @param arg3 The argument to place in variable {3}
498       * @param arg4 The argument to place in variable {4}
499       * @return The formatted message
500       */

501     public static String JavaDoc getString(Object JavaDoc caller, String JavaDoc key, Object JavaDoc arg0, Object JavaDoc arg1, Object JavaDoc arg2, Object JavaDoc arg3, Object JavaDoc arg4)
502         throws MissingResourceException JavaDoc
503     {
504         Object JavaDoc[] o = new Object JavaDoc[5];
505         o[0] = arg0;
506         o[1] = arg1;
507         o[2] = arg2;
508         o[3] = arg3;
509         o[4] = arg4;
510         return getMessage(caller, BASE_NAME, null, key, o);
511     }
512
513
514     /**
515       * Get a message from resource.properties from the package of the given object.
516       * @param caller The calling object, used to get the package name and class loader
517       * @param key The resource key
518       * @param array An array of objects to place in corresponding variables
519       * @return The formatted message
520       */

521     public static String JavaDoc getString(Object JavaDoc caller, String JavaDoc key, Object JavaDoc[] args)
522         throws MissingResourceException JavaDoc
523     {
524         return getMessage(caller, BASE_NAME, null, key, args);
525     }
526
527
528     /**
529       * Get a message from resource.properties from the package of the given object.
530       * @param caller The calling object, used to get the package name and class loader
531       * @param locale The locale
532       * @param key The resource key
533       * @return The formatted message
534       */

535     public static String JavaDoc getString(Object JavaDoc caller, Locale JavaDoc locale, String JavaDoc key)
536         throws MissingResourceException JavaDoc
537     {
538         return getMessage(caller, BASE_NAME, locale, key, null);
539     }
540
541     /**
542       * Get a message from resource.properties from the package of the given object.
543       * @param caller The calling object, used to get the package name and class loader
544       * @param locale The locale
545       * @param key The resource key
546       * @param arg0 The argument to place in variable {0}
547       * @return The formatted message
548       */

549     public static String JavaDoc getString(Object JavaDoc caller, Locale JavaDoc locale, String JavaDoc key, Object JavaDoc arg0)
550         throws MissingResourceException JavaDoc
551     {
552         Object JavaDoc[] o = new Object JavaDoc[1];
553         o[0] = arg0;
554         return getMessage(caller, BASE_NAME, locale, key, o);
555     }
556
557     /**
558       * Get a message from resource.properties from the package of the given object.
559       * @param caller The calling object, used to get the package name and class loader
560       * @param locale The locale
561       * @param key The resource key
562       * @param arg0 The argument to place in variable {0}
563       * @param arg1 The argument to place in variable {1}
564       * @return The formatted message
565       */

566     public static String JavaDoc getString(Object JavaDoc caller, Locale JavaDoc locale, String JavaDoc key, Object JavaDoc arg0, Object JavaDoc arg1)
567         throws MissingResourceException JavaDoc
568     {
569         Object JavaDoc[] o = new Object JavaDoc[2];
570         o[0] = arg0;
571         o[1] = arg1;
572         return getMessage(caller, BASE_NAME, locale, key, o);
573     }
574
575     /**
576       * Get a message from resource.properties from the package of the given object.
577       * @param caller The calling object, used to get the package name and class loader
578       * @param locale The locale
579       * @param key The resource key
580       * @param arg0 The argument to place in variable {0}
581       * @param arg1 The argument to place in variable {1}
582       * @param arg2 The argument to place in variable {2}
583       * @return The formatted message
584       */

585     public static String JavaDoc getString(Object JavaDoc caller, Locale JavaDoc locale, String JavaDoc key, Object JavaDoc arg0, Object JavaDoc arg1, Object JavaDoc arg2)
586         throws MissingResourceException JavaDoc
587     {
588         Object JavaDoc[] o = new Object JavaDoc[3];
589         o[0] = arg0;
590         o[1] = arg1;
591         o[2] = arg2;
592         return getMessage(caller, BASE_NAME, locale, key, o);
593     }
594
595     /**
596       * Get a message from resource.properties from the package of the given object.
597       * @param caller The calling object, used to get the package name and class loader
598       * @param locale The locale
599       * @param key The resource key
600       * @param arg0 The argument to place in variable {0}
601       * @param arg1 The argument to place in variable {1}
602       * @param arg2 The argument to place in variable {2}
603       * @param arg3 The argument to place in variable {3}
604       * @return The formatted message
605       */

606     public static String JavaDoc getString(Object JavaDoc caller, Locale JavaDoc locale, String JavaDoc key, Object JavaDoc arg0, Object JavaDoc arg1, Object JavaDoc arg2, Object JavaDoc arg3)
607         throws MissingResourceException JavaDoc
608     {
609         Object JavaDoc[] o = new Object JavaDoc[4];
610         o[0] = arg0;
611         o[1] = arg1;
612         o[2] = arg2;
613         o[3] = arg3;
614         return getMessage(caller, BASE_NAME, locale, key, o);
615     }
616
617     /**
618       * Get a message from resource.properties from the package of the given object.
619       * @param caller The calling object, used to get the package name and class loader
620       * @param locale The locale
621       * @param key The resource key
622       * @param arg0 The argument to place in variable {0}
623       * @param arg1 The argument to place in variable {1}
624       * @param arg2 The argument to place in variable {2}
625       * @param arg3 The argument to place in variable {3}
626       * @return The formatted message
627       */

628     public static String JavaDoc getString(Object JavaDoc caller, Locale JavaDoc locale, String JavaDoc key, Object JavaDoc arg0, Object JavaDoc arg1, Object JavaDoc arg2, Object JavaDoc arg3, Object JavaDoc arg4)
629         throws MissingResourceException JavaDoc
630     {
631         Object JavaDoc[] o = new Object JavaDoc[5];
632         o[0] = arg0;
633         o[1] = arg1;
634         o[2] = arg2;
635         o[3] = arg3;
636         o[4] = arg4;
637         return getMessage(caller, BASE_NAME, locale, key, o);
638     }
639
640     /**
641       * Get a message from resource.properties from the package of the given object.
642       * @param caller The calling object, used to get the package name and class loader
643       * @param locale The locale
644       * @param key The resource key
645       * @param array An array of objects to place in corresponding variables
646       * @return The formatted message
647       */

648     public static String JavaDoc getString(Object JavaDoc caller, Locale JavaDoc locale, String JavaDoc key, Object JavaDoc[] args)
649         throws MissingResourceException JavaDoc
650     {
651         return getMessage(caller, BASE_NAME, locale, key, args);
652     }
653
654     // Workhorse that does the resource loading and key lookup
655
public static String JavaDoc getMessage(Object JavaDoc caller, String JavaDoc basename, Locale JavaDoc locale, String JavaDoc key,
656                                        Object JavaDoc[] args)
657         throws MissingResourceException JavaDoc
658     {
659         String JavaDoc msg = null;
660         MissingResourceException JavaDoc firstEx = null;
661         String JavaDoc fullName = null;
662         Class JavaDoc curClass = null;
663         boolean didNull = false;
664         
665         if (caller != null) {
666             if(caller instanceof Class JavaDoc)
667                 curClass = (Class JavaDoc) caller;
668             else
669                 curClass = caller.getClass();
670         }
671
672         while (msg == null) {
673
674             // Get the full name of the resource
675
if (curClass != null) {
676
677                 // Create the full basename
678
String JavaDoc pkgName = curClass.getName();
679
680                 int pos = pkgName.lastIndexOf(".");
681                 if (pos > 0) {
682                     fullName = pkgName.substring(0, pos + 1).replace('.', '/') + basename;
683                 }
684                 else {
685                     fullName = basename;
686                 }
687             }
688             else {
689                 fullName = basename;
690             }
691
692             try {
693                 RB rb = new RB(caller, fullName, locale);
694                 msg = rb.getString(key, args);
695             }
696             catch (MissingResourceException JavaDoc ex) {
697                 if (curClass == null) {
698                     throw ex;
699                 }
700
701                 // Save the first exception
702
if (firstEx == null) {
703                     firstEx = ex;
704                 }
705
706                 // Get the superclass
707
curClass = curClass.getSuperclass();
708                 if (curClass == null) {
709                     if (didNull)
710                         throw firstEx;
711                     didNull = true;
712                     caller = null;
713                 } else {
714                     String JavaDoc cname = curClass.getName();
715                     if (cname.startsWith("java.") ||
716                         cname.startsWith("javax.")) {
717                         if (didNull)
718                             throw firstEx;
719                         didNull = true;
720                         caller = null;
721                         curClass = null;
722                     }
723                 }
724             }
725
726         }
727         return msg;
728     }
729
730     /**
731       * Clears the internal cache
732       */

733     public static void clearCache()
734     {
735         propertyCache.clear();
736     }
737 }
738
Popular Tags