0
|
1 /*
|
|
2 * (c) Copyright IBM Corp 2001, 2005
|
|
3 */
|
|
4
|
|
5 package javax.wadls.factory;
|
|
6
|
|
7 import java.io.*;
|
|
8 import java.util.*;
|
|
9
|
|
10 import javax.wadls.*;
|
|
11 import javax.wadls.xml.*;
|
|
12
|
|
13 /**
|
|
14 * This abstract class defines a factory API that enables applications
|
|
15 * to obtain a WSDLFactory capable of producing new Definitions, new
|
|
16 * WSDLReaders, and new WSDLWriters.
|
|
17 *
|
|
18 * Some ideas used here have been shamelessly copied from the
|
|
19 * wonderful JAXP and Xerces work.
|
|
20 *
|
|
21 * @author Matthew J. Duftler (duftler@us.ibm.com)
|
|
22 */
|
|
23 public abstract class WADLFactory
|
|
24 {
|
|
25 private static final String PROPERTY_NAME =
|
|
26 "javax.wadls.factory.WADLFactory";
|
|
27 private static final String PROPERTY_FILE_NAME =
|
|
28 "wadl.properties";
|
|
29 private static final String DEFAULT_FACTORY_IMPL_NAME =
|
|
30 "edu.uga.cs.lsdis.meteors.wadls.factory.WADLFactoryImpl";
|
|
31
|
|
32 private static String fullPropertyFileName = null;
|
|
33
|
|
34 /**
|
|
35 * Get a new instance of a WSDLFactory. This method
|
|
36 * follows (almost) the same basic sequence of steps that JAXP
|
|
37 * follows to determine the fully-qualified class name of the
|
|
38 * class which implements WSDLFactory. The steps (in order)
|
|
39 * are:
|
|
40 *<pre>
|
|
41 * Check the javax.wsdls.factory.WSDLFactory system property.
|
|
42 * Check the lib/wsdl.properties file in the JRE directory. The key
|
|
43 * will have the same name as the above system property.
|
|
44 * Use the default value.
|
|
45 *</pre>
|
|
46 * Once an instance of a WSDLFactory is obtained, invoke
|
|
47 * newDefinition(), newWSDLReader(), or newWSDLWriter(), to create
|
|
48 * the desired instances.
|
|
49 */
|
|
50 public static WADLFactory newInstance() throws WADLSException
|
|
51 {
|
|
52 String factoryImplName = findFactoryImplName();
|
|
53
|
|
54 return newInstance(factoryImplName);
|
|
55 }
|
|
56
|
|
57 /**
|
|
58 * Get a new instance of a WSDLFactory. This method
|
|
59 * returns an instance of the class factoryImplName.
|
|
60 * Once an instance of a WSDLFactory is obtained, invoke
|
|
61 * newDefinition(), newWSDLReader(), or newWSDLWriter(), to create
|
|
62 * the desired instances.
|
|
63 *
|
|
64 * @param factoryImplName the fully-qualified class name of the
|
|
65 * class which provides a concrete implementation of the abstract
|
|
66 * class WSDLFactory.
|
|
67 */
|
|
68 public static WADLFactory newInstance(String factoryImplName)
|
|
69 throws WADLSException
|
|
70 {
|
|
71 if (factoryImplName != null)
|
|
72 {
|
|
73 try
|
|
74 {
|
|
75 Class cl = Class.forName(factoryImplName);
|
|
76
|
|
77 return (WADLFactory)cl.newInstance();
|
|
78 }
|
|
79 catch (Exception e)
|
|
80 {
|
|
81 /*
|
|
82 Catches:
|
|
83 ClassNotFoundException
|
|
84 InstantiationException
|
|
85 IllegalAccessException
|
|
86 */
|
|
87 throw new WADLSException(WADLSException.CONFIGURATION_ERROR,
|
|
88 "Problem instantiating factory " +
|
|
89 "implementation.",
|
|
90 e);
|
|
91 }
|
|
92 }
|
|
93 else
|
|
94 {
|
|
95 throw new WADLSException(WADLSException.CONFIGURATION_ERROR,
|
|
96 "Unable to find name of factory " +
|
|
97 "implementation.");
|
|
98 }
|
|
99 }
|
|
100
|
|
101 /**
|
|
102 * Create a new instance of a Definition.
|
|
103 */
|
|
104 public abstract Application newApplication();
|
|
105
|
|
106 /**
|
|
107 * Create a new instance of a WSDLReader.
|
|
108 */
|
|
109 public abstract WADLReader newWADLReader();
|
|
110
|
|
111 /**
|
|
112 * Create a new instance of a WSDLWriter.
|
|
113 */
|
|
114 public abstract WADLWriter newWADLWriter();
|
|
115
|
|
116
|
|
117 private static String findFactoryImplName()
|
|
118 {
|
|
119 String factoryImplName = null;
|
|
120
|
|
121 // First, check the system property.
|
|
122 try
|
|
123 {
|
|
124 factoryImplName = System.getProperty(PROPERTY_NAME);
|
|
125
|
|
126 if (factoryImplName != null)
|
|
127 {
|
|
128 return factoryImplName;
|
|
129 }
|
|
130 }
|
|
131 catch (SecurityException e)
|
|
132 {
|
|
133 }
|
|
134
|
|
135 // Second, check the properties file.
|
|
136 String propFileName = getFullPropertyFileName();
|
|
137
|
|
138 if (propFileName != null)
|
|
139 {
|
|
140 try
|
|
141 {
|
|
142 Properties properties = new Properties();
|
|
143 File propFile = new File(propFileName);
|
|
144 FileInputStream fis = new FileInputStream(propFile);
|
|
145
|
|
146 properties.load(fis);
|
|
147 fis.close();
|
|
148
|
|
149 factoryImplName = properties.getProperty(PROPERTY_NAME);
|
|
150
|
|
151 if (factoryImplName != null)
|
|
152 {
|
|
153 return factoryImplName;
|
|
154 }
|
|
155 }
|
|
156 catch (IOException e)
|
|
157 {
|
|
158 }
|
|
159 }
|
|
160
|
|
161 // Third, return the default.
|
|
162 return DEFAULT_FACTORY_IMPL_NAME;
|
|
163 }
|
|
164
|
|
165 private static String getFullPropertyFileName()
|
|
166 {
|
|
167 if (fullPropertyFileName == null)
|
|
168 {
|
|
169 try
|
|
170 {
|
|
171 String javaHome = System.getProperty("java.home");
|
|
172
|
|
173 fullPropertyFileName = javaHome + File.separator + "lib" +
|
|
174 File.separator + PROPERTY_FILE_NAME;
|
|
175 }
|
|
176 catch (SecurityException e)
|
|
177 {
|
|
178 }
|
|
179 }
|
|
180
|
|
181 return fullPropertyFileName;
|
|
182 }
|
|
183 } |