Author: veithen Date: Sun Dec 7 10:39:58 2008 New Revision: 724167 URL: http://svn.apache.org/viewvc?rev=724167&view=rev Log: OMAbstractFactory: * Modified the behavior of getSOAP(11|12)Factory to make it consistent with getOMFactory, namely to ignore SecurityExceptions thrown by System.getProperty (WSCOMMONS-233). * Completed the Javadoc of this class.
Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/OMAbstractFactory.java Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/OMAbstractFactory.java URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/OMAbstractFactory.java?rev=724167&r1=724166&r2=724167&view=diff ============================================================================== --- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/OMAbstractFactory.java (original) +++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/OMAbstractFactory.java Sun Dec 7 10:39:58 2008 @@ -21,6 +21,46 @@ import org.apache.axiom.soap.SOAPFactory; +/** + * Provides default instances for plain XML, SOAP 1.1 and SOAP 1.2 object model factories. + * + * <p>The implementation class for each object model type is determined by a specific + * system property. If the system property is not set, a default implementation class + * is chosen. The following table summarizes the system properties and default implementation + * used:</p> + * <table border="1"> + * <tr> + * <th>Object model</th> + * <th>Method</th> + * <th>System property</th> + * <th>Default implementation</th> + * </tr> + * <tr> + * <td>Plain XML</td> + * <td>[EMAIL PROTECTED] #getOMFactory()}</td> + * <td><tt>om.factory</tt></td> + * <td>[EMAIL PROTECTED] org.apache.axiom.om.impl.llom.factory.OMLinkedListImplFactory}</td> + * </tr> + * <tr> + * <td>SOAP 1.1</td> + * <td>[EMAIL PROTECTED] #getSOAP11Factory()}</td> + * <td><tt>soap11.factory</tt></td> + * <td>[EMAIL PROTECTED] org.apache.axiom.soap.impl.llom.soap11.SOAP11Factory}</td> + * </tr> + * <tr> + * <td>SOAP 1.2</td> + * <td>[EMAIL PROTECTED] #getSOAP12Factory()}</td> + * <td><tt>soap12.factory</tt></td> + * <td>[EMAIL PROTECTED] org.apache.axiom.soap.impl.llom.soap12.SOAP12Factory}</td> + * </tr> + * </table> + * <p>Since [EMAIL PROTECTED] OMFactory} instances are supposed to be stateless, each method in this class + * returns the same instance on every invocation, i.e. the factory for each OM type is instantiated + * only once.</p> + * <p>Each method in this class uses [EMAIL PROTECTED] System#getProperty(String)} to determine the value of + * the relevant system property. A [EMAIL PROTECTED] SecurityException} thrown by this method is simply ignored + * and the default factory implementation is used.</p> + */ public class OMAbstractFactory { public static final String OM_FACTORY_NAME_PROPERTY = "om.factory"; public static final String SOAP11_FACTORY_NAME_PROPERTY = "soap11.factory"; @@ -37,6 +77,15 @@ private static SOAPFactory defaultSOAP11OMFactory = null; private static SOAPFactory defaultSOAP12OMFactory = null; + private OMAbstractFactory() {} + + /** + * Get the default OM factory instance. + * + * @return the default OM factory instance + * @throws OMException if the factory's implementation class can't be found + * or if the class can't be instantiated + */ public static OMFactory getOMFactory() { if (defaultOMFactory != null) { return defaultOMFactory; @@ -65,19 +114,27 @@ /** - * Gets the default factory implementation from the classpath. + * Get the default SOAP 1.1 OM factory instance. * - * @return Returns SOAPFactory. + * @return the default SOAP 1.1 OM factory instance + * @throws OMException if the factory's implementation class can't be found + * or if the class can't be instantiated */ public static SOAPFactory getSOAP11Factory() { if (defaultSOAP11OMFactory != null) { return defaultSOAP11OMFactory; } + String omFactory; try { - String omFactory = System.getProperty(SOAP11_FACTORY_NAME_PROPERTY); + omFactory = System.getProperty(SOAP11_FACTORY_NAME_PROPERTY); if (omFactory == null || "".equals(omFactory)) { omFactory = DEFAULT_SOAP11_FACTORY_CLASS_NAME; } + } catch (SecurityException e) { + omFactory = DEFAULT_SOAP11_FACTORY_CLASS_NAME; + } + + try { defaultSOAP11OMFactory = (SOAPFactory) Class.forName(omFactory).newInstance(); } catch (InstantiationException e) { throw new OMException(e); @@ -91,19 +148,27 @@ /** - * Gets the default factory implementation from the classpath. + * Get the default SOAP 1.2 OM factory instance. * - * @return Returns SOAPFactory. + * @return the default SOAP 1.2 OM factory instance + * @throws OMException if the factory's implementation class can't be found + * or if the class can't be instantiated */ public static SOAPFactory getSOAP12Factory() { if (defaultSOAP12OMFactory != null) { return defaultSOAP12OMFactory; } + String omFactory; try { - String omFactory = System.getProperty(SOAP12_FACTORY_NAME_PROPERTY); + omFactory = System.getProperty(SOAP12_FACTORY_NAME_PROPERTY); if (omFactory == null || "".equals(omFactory)) { omFactory = DEFAULT_SOAP12_FACTORY_CLASS_NAME; } + } catch (SecurityException e) { + omFactory = DEFAULT_SOAP12_FACTORY_CLASS_NAME; + } + + try { defaultSOAP12OMFactory = (SOAPFactory) Class.forName(omFactory).newInstance(); } catch (InstantiationException e) { throw new OMException(e);