<HTML>
<BODY BGCOLOR="white">
<PRE>
<FONT color="green">001</FONT>    /*<a name="line.1"></a>
<FONT color="green">002</FONT>     * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
<FONT color="green">003</FONT>     * or more contributor license agreements. See the NOTICE file<a name="line.3"></a>
<FONT color="green">004</FONT>     * distributed with this work for additional information<a name="line.4"></a>
<FONT color="green">005</FONT>     * regarding copyright ownership. The ASF licenses this file<a name="line.5"></a>
<FONT color="green">006</FONT>     * to you under the Apache License, Version 2.0 (the  "License");<a name="line.6"></a>
<FONT color="green">007</FONT>     * you may not use this file except in compliance with the License.<a name="line.7"></a>
<FONT color="green">008</FONT>     * You may obtain a copy of the License at<a name="line.8"></a>
<FONT color="green">009</FONT>     *<a name="line.9"></a>
<FONT color="green">010</FONT>     *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
<FONT color="green">011</FONT>     *<a name="line.11"></a>
<FONT color="green">012</FONT>     * Unless required by applicable law or agreed to in writing, software<a name="line.12"></a>
<FONT color="green">013</FONT>     * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.13"></a>
<FONT color="green">014</FONT>     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.14"></a>
<FONT color="green">015</FONT>     * See the License for the specific language governing permissions and<a name="line.15"></a>
<FONT color="green">016</FONT>     * limitations under the License.<a name="line.16"></a>
<FONT color="green">017</FONT>     */<a name="line.17"></a>
<FONT color="green">018</FONT>    /*<a name="line.18"></a>
<FONT color="green">019</FONT>     * $Id: SerializerFactory.java 468654 2006-10-28 07:09:23Z minchau $<a name="line.19"></a>
<FONT color="green">020</FONT>     */<a name="line.20"></a>
<FONT color="green">021</FONT>    package org.apache.xml.serializer;<a name="line.21"></a>
<FONT color="green">022</FONT>    <a name="line.22"></a>
<FONT color="green">023</FONT>    import java.util.Hashtable;<a name="line.23"></a>
<FONT color="green">024</FONT>    import java.util.Properties;<a name="line.24"></a>
<FONT color="green">025</FONT>    <a name="line.25"></a>
<FONT color="green">026</FONT>    import javax.xml.transform.OutputKeys;<a name="line.26"></a>
<FONT color="green">027</FONT>    <a name="line.27"></a>
<FONT color="green">028</FONT>    import org.apache.xml.serializer.utils.MsgKey;<a name="line.28"></a>
<FONT color="green">029</FONT>    import org.apache.xml.serializer.utils.Utils;<a name="line.29"></a>
<FONT color="green">030</FONT>    import org.xml.sax.ContentHandler;<a name="line.30"></a>
<FONT color="green">031</FONT>    <a name="line.31"></a>
<FONT color="green">032</FONT>    /**<a name="line.32"></a>
<FONT color="green">033</FONT>     * This class is a public API, it is a factory for creating serializers.<a name="line.33"></a>
<FONT color="green">034</FONT>       * <a name="line.34"></a>
<FONT color="green">035</FONT>       * The properties object passed to the getSerializer() method should be created by<a name="line.35"></a>
<FONT color="green">036</FONT>       * the OutputPropertiesFactory. Although the properties object<a name="line.36"></a>
<FONT color="green">037</FONT>       * used to create a serializer does not need to be obtained <a name="line.37"></a>
<FONT color="green">038</FONT>       * from OutputPropertiesFactory,<a name="line.38"></a>
<FONT color="green">039</FONT>       * using this factory ensures that the default key/value properties<a name="line.39"></a>
<FONT color="green">040</FONT>       * are set for the given output "method".<a name="line.40"></a>
<FONT color="green">041</FONT>       * <a name="line.41"></a>
<FONT color="green">042</FONT>       * &lt;p&gt;<a name="line.42"></a>
<FONT color="green">043</FONT>       * The standard property keys supported are: "method", "version", "encoding",<a name="line.43"></a>
<FONT color="green">044</FONT>       * "omit-xml-declaration", "standalone", doctype-public",<a name="line.44"></a>
<FONT color="green">045</FONT>       * "doctype-system", "cdata-section-elements", "indent", "media-type". <a name="line.45"></a>
<FONT color="green">046</FONT>       * These property keys and their values are described in the XSLT recommendation,<a name="line.46"></a>
<FONT color="green">047</FONT>       * see {@link &lt;a href="http://www.w3.org/TR/1999/REC-xslt-19991116"&gt; XSLT 1.0 recommendation&lt;/a&gt;}<a name="line.47"></a>
<FONT color="green">048</FONT>       * <a name="line.48"></a>
<FONT color="green">049</FONT>       * &lt;p&gt;<a name="line.49"></a>
<FONT color="green">050</FONT>       * The value of the "cdata-section-elements" property key is a whitespace<a name="line.50"></a>
<FONT color="green">051</FONT>       * separated list of elements. If the element is in a namespace then <a name="line.51"></a>
<FONT color="green">052</FONT>       * value is passed in this format: {uri}localName <a name="line.52"></a>
<FONT color="green">053</FONT>       *<a name="line.53"></a>
<FONT color="green">054</FONT>       * &lt;p&gt;<a name="line.54"></a>
<FONT color="green">055</FONT>       * The non-standard property keys supported are defined in {@link OutputPropertiesFactory}.<a name="line.55"></a>
<FONT color="green">056</FONT>       *<a name="line.56"></a>
<FONT color="green">057</FONT>       * @see OutputPropertiesFactory<a name="line.57"></a>
<FONT color="green">058</FONT>       * @see Method<a name="line.58"></a>
<FONT color="green">059</FONT>       * @see Serializer<a name="line.59"></a>
<FONT color="green">060</FONT>       */<a name="line.60"></a>
<FONT color="green">061</FONT>    public final class SerializerFactory<a name="line.61"></a>
<FONT color="green">062</FONT>    {<a name="line.62"></a>
<FONT color="green">063</FONT>      /**<a name="line.63"></a>
<FONT color="green">064</FONT>       * This constructor is private just to prevent the creation of such an object.<a name="line.64"></a>
<FONT color="green">065</FONT>       */<a name="line.65"></a>
<FONT color="green">066</FONT>    <a name="line.66"></a>
<FONT color="green">067</FONT>      private SerializerFactory() {<a name="line.67"></a>
<FONT color="green">068</FONT>     <a name="line.68"></a>
<FONT color="green">069</FONT>      }<a name="line.69"></a>
<FONT color="green">070</FONT>      /**<a name="line.70"></a>
<FONT color="green">071</FONT>       * Associates output methods to default output formats.<a name="line.71"></a>
<FONT color="green">072</FONT>       */<a name="line.72"></a>
<FONT color="green">073</FONT>      private static Hashtable m_formats = new Hashtable();<a name="line.73"></a>
<FONT color="green">074</FONT>    <a name="line.74"></a>
<FONT color="green">075</FONT>      /**<a name="line.75"></a>
<FONT color="green">076</FONT>       * Returns a serializer for the specified output method. The output method<a name="line.76"></a>
<FONT color="green">077</FONT>       * is specified by the value of the property associated with the "method" key.<a name="line.77"></a>
<FONT color="green">078</FONT>       * If no implementation exists that supports the specified output method<a name="line.78"></a>
<FONT color="green">079</FONT>       * an exception of some type will be thrown.<a name="line.79"></a>
<FONT color="green">080</FONT>       * For a list of the output "method" key values see {@link Method}.<a name="line.80"></a>
<FONT color="green">081</FONT>       *<a name="line.81"></a>
<FONT color="green">082</FONT>       * @param format The output format, minimally the "method" property must be set.<a name="line.82"></a>
<FONT color="green">083</FONT>       * @return A suitable serializer.<a name="line.83"></a>
<FONT color="green">084</FONT>       * @throws IllegalArgumentException if method is<a name="line.84"></a>
<FONT color="green">085</FONT>       * null or an appropriate serializer can't be found<a name="line.85"></a>
<FONT color="green">086</FONT>       * @throws Exception if the class for the serializer is found but does not<a name="line.86"></a>
<FONT color="green">087</FONT>       * implement ContentHandler.<a name="line.87"></a>
<FONT color="green">088</FONT>       * @throws WrappedRuntimeException if an exception is thrown while trying to find serializer<a name="line.88"></a>
<FONT color="green">089</FONT>       */<a name="line.89"></a>
<FONT color="green">090</FONT>      public static Serializer getSerializer(Properties format)<a name="line.90"></a>
<FONT color="green">091</FONT>      {<a name="line.91"></a>
<FONT color="green">092</FONT>          Serializer ser;<a name="line.92"></a>
<FONT color="green">093</FONT>    <a name="line.93"></a>
<FONT color="green">094</FONT>          try<a name="line.94"></a>
<FONT color="green">095</FONT>          {<a name="line.95"></a>
<FONT color="green">096</FONT>            String method = format.getProperty(OutputKeys.METHOD);<a name="line.96"></a>
<FONT color="green">097</FONT>    <a name="line.97"></a>
<FONT color="green">098</FONT>            if (method == null) {<a name="line.98"></a>
<FONT color="green">099</FONT>                String msg = Utils.messages.createMessage(<a name="line.99"></a>
<FONT color="green">100</FONT>                    MsgKey.ER_FACTORY_PROPERTY_MISSING,<a name="line.100"></a>
<FONT color="green">101</FONT>                    new Object[] { OutputKeys.METHOD});<a name="line.101"></a>
<FONT color="green">102</FONT>                throw new IllegalArgumentException(msg);<a name="line.102"></a>
<FONT color="green">103</FONT>            }<a name="line.103"></a>
<FONT color="green">104</FONT>    <a name="line.104"></a>
<FONT color="green">105</FONT>            String className =<a name="line.105"></a>
<FONT color="green">106</FONT>                format.getProperty(OutputPropertiesFactory.S_KEY_CONTENT_HANDLER);<a name="line.106"></a>
<FONT color="green">107</FONT>    <a name="line.107"></a>
<FONT color="green">108</FONT>    <a name="line.108"></a>
<FONT color="green">109</FONT>            if (null == className)<a name="line.109"></a>
<FONT color="green">110</FONT>            {<a name="line.110"></a>
<FONT color="green">111</FONT>                // Missing Content Handler property, load default using OutputPropertiesFactory<a name="line.111"></a>
<FONT color="green">112</FONT>                Properties methodDefaults =<a name="line.112"></a>
<FONT color="green">113</FONT>                    OutputPropertiesFactory.getDefaultMethodProperties(method);<a name="line.113"></a>
<FONT color="green">114</FONT>                className = <a name="line.114"></a>
<FONT color="green">115</FONT>                methodDefaults.getProperty(OutputPropertiesFactory.S_KEY_CONTENT_HANDLER);<a name="line.115"></a>
<FONT color="green">116</FONT>                if (null == className) {<a name="line.116"></a>
<FONT color="green">117</FONT>                    String msg = Utils.messages.createMessage(<a name="line.117"></a>
<FONT color="green">118</FONT>                        MsgKey.ER_FACTORY_PROPERTY_MISSING,<a name="line.118"></a>
<FONT color="green">119</FONT>                        new Object[] { OutputPropertiesFactory.S_KEY_CONTENT_HANDLER});<a name="line.119"></a>
<FONT color="green">120</FONT>                    throw new IllegalArgumentException(msg);<a name="line.120"></a>
<FONT color="green">121</FONT>                }<a name="line.121"></a>
<FONT color="green">122</FONT>    <a name="line.122"></a>
<FONT color="green">123</FONT>            }<a name="line.123"></a>
<FONT color="green">124</FONT>    <a name="line.124"></a>
<FONT color="green">125</FONT>    <a name="line.125"></a>
<FONT color="green">126</FONT>    <a name="line.126"></a>
<FONT color="green">127</FONT>            ClassLoader loader = ObjectFactory.findClassLoader();<a name="line.127"></a>
<FONT color="green">128</FONT>    <a name="line.128"></a>
<FONT color="green">129</FONT>            Class cls = ObjectFactory.findProviderClass(className, loader, true);<a name="line.129"></a>
<FONT color="green">130</FONT>    <a name="line.130"></a>
<FONT color="green">131</FONT>            // _serializers.put(method, cls);<a name="line.131"></a>
<FONT color="green">132</FONT>    <a name="line.132"></a>
<FONT color="green">133</FONT>            Object obj = cls.newInstance();<a name="line.133"></a>
<FONT color="green">134</FONT>    <a name="line.134"></a>
<FONT color="green">135</FONT>            if (obj instanceof SerializationHandler)<a name="line.135"></a>
<FONT color="green">136</FONT>            {<a name="line.136"></a>
<FONT color="green">137</FONT>                  // this is one of the supplied serializers<a name="line.137"></a>
<FONT color="green">138</FONT>                ser = (Serializer) cls.newInstance();<a name="line.138"></a>
<FONT color="green">139</FONT>                ser.setOutputFormat(format);<a name="line.139"></a>
<FONT color="green">140</FONT>            }<a name="line.140"></a>
<FONT color="green">141</FONT>            else<a name="line.141"></a>
<FONT color="green">142</FONT>            {<a name="line.142"></a>
<FONT color="green">143</FONT>                  /*<a name="line.143"></a>
<FONT color="green">144</FONT>                   *  This  must be a user defined Serializer.<a name="line.144"></a>
<FONT color="green">145</FONT>                   *  It had better implement ContentHandler.<a name="line.145"></a>
<FONT color="green">146</FONT>                   */<a name="line.146"></a>
<FONT color="green">147</FONT>                   if (obj instanceof ContentHandler)<a name="line.147"></a>
<FONT color="green">148</FONT>                   {<a name="line.148"></a>
<FONT color="green">149</FONT>    <a name="line.149"></a>
<FONT color="green">150</FONT>                      /*<a name="line.150"></a>
<FONT color="green">151</FONT>                       * The user defined serializer defines ContentHandler,<a name="line.151"></a>
<FONT color="green">152</FONT>                       * but we need to wrap it with ToXMLSAXHandler which<a name="line.152"></a>
<FONT color="green">153</FONT>                       * will collect SAX-like events and emit true<a name="line.153"></a>
<FONT color="green">154</FONT>                       * SAX ContentHandler events to the users handler.<a name="line.154"></a>
<FONT color="green">155</FONT>                       */<a name="line.155"></a>
<FONT color="green">156</FONT>                      className = SerializerConstants.DEFAULT_SAX_SERIALIZER;<a name="line.156"></a>
<FONT color="green">157</FONT>                      cls = ObjectFactory.findProviderClass(className, loader, true);<a name="line.157"></a>
<FONT color="green">158</FONT>                      SerializationHandler sh =<a name="line.158"></a>
<FONT color="green">159</FONT>                          (SerializationHandler) cls.newInstance();<a name="line.159"></a>
<FONT color="green">160</FONT>                      sh.setContentHandler( (ContentHandler) obj);<a name="line.160"></a>
<FONT color="green">161</FONT>                      sh.setOutputFormat(format);<a name="line.161"></a>
<FONT color="green">162</FONT>    <a name="line.162"></a>
<FONT color="green">163</FONT>                      ser = sh;<a name="line.163"></a>
<FONT color="green">164</FONT>                   }<a name="line.164"></a>
<FONT color="green">165</FONT>                   else<a name="line.165"></a>
<FONT color="green">166</FONT>                   {<a name="line.166"></a>
<FONT color="green">167</FONT>                      // user defined serializer does not implement<a name="line.167"></a>
<FONT color="green">168</FONT>                      // ContentHandler, ... very bad<a name="line.168"></a>
<FONT color="green">169</FONT>                       throw new Exception(<a name="line.169"></a>
<FONT color="green">170</FONT>                           Utils.messages.createMessage(<a name="line.170"></a>
<FONT color="green">171</FONT>                               MsgKey.ER_SERIALIZER_NOT_CONTENTHANDLER,<a name="line.171"></a>
<FONT color="green">172</FONT>                                   new Object[] { className}));<a name="line.172"></a>
<FONT color="green">173</FONT>                   }<a name="line.173"></a>
<FONT color="green">174</FONT>    <a name="line.174"></a>
<FONT color="green">175</FONT>            }<a name="line.175"></a>
<FONT color="green">176</FONT>          }<a name="line.176"></a>
<FONT color="green">177</FONT>          catch (Exception e)<a name="line.177"></a>
<FONT color="green">178</FONT>          {<a name="line.178"></a>
<FONT color="green">179</FONT>            throw new org.apache.xml.serializer.utils.WrappedRuntimeException(e);<a name="line.179"></a>
<FONT color="green">180</FONT>          }<a name="line.180"></a>
<FONT color="green">181</FONT>    <a name="line.181"></a>
<FONT color="green">182</FONT>          // If we make it to here ser is not null.<a name="line.182"></a>
<FONT color="green">183</FONT>          return ser;<a name="line.183"></a>
<FONT color="green">184</FONT>      }<a name="line.184"></a>
<FONT color="green">185</FONT>    }<a name="line.185"></a>




























































</PRE>
</BODY>
</HTML>
