<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: MethodResolver.java 1225263 2011-12-28 18:36:36Z mrglavas $<a name="line.19"></a>
<FONT color="green">020</FONT>     */<a name="line.20"></a>
<FONT color="green">021</FONT>    package org.apache.xalan.extensions;<a name="line.21"></a>
<FONT color="green">022</FONT>    <a name="line.22"></a>
<FONT color="green">023</FONT>    import java.lang.reflect.Constructor;<a name="line.23"></a>
<FONT color="green">024</FONT>    import java.lang.reflect.Method;<a name="line.24"></a>
<FONT color="green">025</FONT>    import java.lang.reflect.Modifier;<a name="line.25"></a>
<FONT color="green">026</FONT>    <a name="line.26"></a>
<FONT color="green">027</FONT>    import javax.xml.transform.TransformerException;<a name="line.27"></a>
<FONT color="green">028</FONT>    <a name="line.28"></a>
<FONT color="green">029</FONT>    import org.apache.xalan.res.XSLMessages;<a name="line.29"></a>
<FONT color="green">030</FONT>    import org.apache.xalan.res.XSLTErrorResources;<a name="line.30"></a>
<FONT color="green">031</FONT>    import org.apache.xml.dtm.DTM;<a name="line.31"></a>
<FONT color="green">032</FONT>    import org.apache.xml.dtm.DTMIterator;<a name="line.32"></a>
<FONT color="green">033</FONT>    import org.apache.xml.dtm.ref.DTMNodeIterator;<a name="line.33"></a>
<FONT color="green">034</FONT>    import org.apache.xpath.objects.XObject;<a name="line.34"></a>
<FONT color="green">035</FONT>    import org.apache.xpath.objects.XRTreeFrag;<a name="line.35"></a>
<FONT color="green">036</FONT>    import org.apache.xpath.objects.XString;<a name="line.36"></a>
<FONT color="green">037</FONT>    import org.w3c.dom.Node;<a name="line.37"></a>
<FONT color="green">038</FONT>    import org.w3c.dom.NodeList;<a name="line.38"></a>
<FONT color="green">039</FONT>    import org.w3c.dom.traversal.NodeIterator;<a name="line.39"></a>
<FONT color="green">040</FONT>    <a name="line.40"></a>
<FONT color="green">041</FONT>    /**<a name="line.41"></a>
<FONT color="green">042</FONT>     * Utility class to help resolve method overloading with Xalan XSLT <a name="line.42"></a>
<FONT color="green">043</FONT>     * argument types.<a name="line.43"></a>
<FONT color="green">044</FONT>     */<a name="line.44"></a>
<FONT color="green">045</FONT>    public class MethodResolver<a name="line.45"></a>
<FONT color="green">046</FONT>    {<a name="line.46"></a>
<FONT color="green">047</FONT>    <a name="line.47"></a>
<FONT color="green">048</FONT>      /**<a name="line.48"></a>
<FONT color="green">049</FONT>       * Specifies a search for static methods only.<a name="line.49"></a>
<FONT color="green">050</FONT>       */<a name="line.50"></a>
<FONT color="green">051</FONT>      public static final int STATIC_ONLY         = 1;<a name="line.51"></a>
<FONT color="green">052</FONT>    <a name="line.52"></a>
<FONT color="green">053</FONT>      /**<a name="line.53"></a>
<FONT color="green">054</FONT>       * Specifies a search for instance methods only.<a name="line.54"></a>
<FONT color="green">055</FONT>       */<a name="line.55"></a>
<FONT color="green">056</FONT>      public static final int INSTANCE_ONLY       = 2;<a name="line.56"></a>
<FONT color="green">057</FONT>    <a name="line.57"></a>
<FONT color="green">058</FONT>      /**<a name="line.58"></a>
<FONT color="green">059</FONT>       * Specifies a search for both static and instance methods.<a name="line.59"></a>
<FONT color="green">060</FONT>       */<a name="line.60"></a>
<FONT color="green">061</FONT>      public static final int STATIC_AND_INSTANCE = 3;<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>       * Specifies a Dynamic method search.  If the method being<a name="line.64"></a>
<FONT color="green">065</FONT>       * evaluated is a static method, all arguments are used.<a name="line.65"></a>
<FONT color="green">066</FONT>       * Otherwise, it is an instance method and only arguments<a name="line.66"></a>
<FONT color="green">067</FONT>       * beginning with the second argument are used.<a name="line.67"></a>
<FONT color="green">068</FONT>       */<a name="line.68"></a>
<FONT color="green">069</FONT>      public static final int DYNAMIC             = 4;<a name="line.69"></a>
<FONT color="green">070</FONT>    <a name="line.70"></a>
<FONT color="green">071</FONT>      /**<a name="line.71"></a>
<FONT color="green">072</FONT>       * Given a class, figure out the resolution of <a name="line.72"></a>
<FONT color="green">073</FONT>       * the Java Constructor from the XSLT argument types, and perform the <a name="line.73"></a>
<FONT color="green">074</FONT>       * conversion of the arguments.<a name="line.74"></a>
<FONT color="green">075</FONT>       * @param classObj the Class of the object to be constructed.<a name="line.75"></a>
<FONT color="green">076</FONT>       * @param argsIn An array of XSLT/XPath arguments.<a name="line.76"></a>
<FONT color="green">077</FONT>       * @param argsOut An array of the exact size as argsIn, which will be <a name="line.77"></a>
<FONT color="green">078</FONT>       * populated with converted arguments if a suitable method is found.<a name="line.78"></a>
<FONT color="green">079</FONT>       * @return A constructor that will work with the argsOut array.<a name="line.79"></a>
<FONT color="green">080</FONT>       * @throws TransformerException may be thrown for Xalan conversion<a name="line.80"></a>
<FONT color="green">081</FONT>       * exceptions.<a name="line.81"></a>
<FONT color="green">082</FONT>       */<a name="line.82"></a>
<FONT color="green">083</FONT>      public static Constructor getConstructor(Class classObj, <a name="line.83"></a>
<FONT color="green">084</FONT>                                               Object[] argsIn, <a name="line.84"></a>
<FONT color="green">085</FONT>                                               Object[][] argsOut,<a name="line.85"></a>
<FONT color="green">086</FONT>                                               ExpressionContext exprContext)<a name="line.86"></a>
<FONT color="green">087</FONT>        throws NoSuchMethodException,<a name="line.87"></a>
<FONT color="green">088</FONT>               SecurityException,<a name="line.88"></a>
<FONT color="green">089</FONT>               TransformerException<a name="line.89"></a>
<FONT color="green">090</FONT>      {<a name="line.90"></a>
<FONT color="green">091</FONT>        Constructor bestConstructor = null;<a name="line.91"></a>
<FONT color="green">092</FONT>        Class[] bestParamTypes = null;<a name="line.92"></a>
<FONT color="green">093</FONT>        Constructor[] constructors = classObj.getConstructors();<a name="line.93"></a>
<FONT color="green">094</FONT>        int nMethods = constructors.length;<a name="line.94"></a>
<FONT color="green">095</FONT>        int bestScore = Integer.MAX_VALUE;<a name="line.95"></a>
<FONT color="green">096</FONT>        int bestScoreCount = 0;<a name="line.96"></a>
<FONT color="green">097</FONT>        for(int i = 0; i &lt; nMethods; i++)<a name="line.97"></a>
<FONT color="green">098</FONT>        {<a name="line.98"></a>
<FONT color="green">099</FONT>          Constructor ctor = constructors[i];<a name="line.99"></a>
<FONT color="green">100</FONT>          Class[] paramTypes = ctor.getParameterTypes();<a name="line.100"></a>
<FONT color="green">101</FONT>          int numberMethodParams = paramTypes.length;<a name="line.101"></a>
<FONT color="green">102</FONT>          int paramStart = 0;<a name="line.102"></a>
<FONT color="green">103</FONT>          boolean isFirstExpressionContext = false;<a name="line.103"></a>
<FONT color="green">104</FONT>          int scoreStart;<a name="line.104"></a>
<FONT color="green">105</FONT>          // System.out.println("numberMethodParams: "+numberMethodParams);<a name="line.105"></a>
<FONT color="green">106</FONT>          // System.out.println("argsIn.length: "+argsIn.length);<a name="line.106"></a>
<FONT color="green">107</FONT>          // System.out.println("exprContext: "+exprContext);<a name="line.107"></a>
<FONT color="green">108</FONT>          if(numberMethodParams == (argsIn.length+1))<a name="line.108"></a>
<FONT color="green">109</FONT>          {<a name="line.109"></a>
<FONT color="green">110</FONT>            Class javaClass = paramTypes[0];<a name="line.110"></a>
<FONT color="green">111</FONT>            // System.out.println("first javaClass: "+javaClass.getName());<a name="line.111"></a>
<FONT color="green">112</FONT>            if(ExpressionContext.class.isAssignableFrom(javaClass))<a name="line.112"></a>
<FONT color="green">113</FONT>            {<a name="line.113"></a>
<FONT color="green">114</FONT>              isFirstExpressionContext = true;<a name="line.114"></a>
<FONT color="green">115</FONT>              scoreStart = 0;<a name="line.115"></a>
<FONT color="green">116</FONT>              paramStart++;<a name="line.116"></a>
<FONT color="green">117</FONT>              // System.out.println("Incrementing paramStart: "+paramStart);<a name="line.117"></a>
<FONT color="green">118</FONT>            }<a name="line.118"></a>
<FONT color="green">119</FONT>            else<a name="line.119"></a>
<FONT color="green">120</FONT>              continue;<a name="line.120"></a>
<FONT color="green">121</FONT>          }<a name="line.121"></a>
<FONT color="green">122</FONT>          else<a name="line.122"></a>
<FONT color="green">123</FONT>              scoreStart = 1000;<a name="line.123"></a>
<FONT color="green">124</FONT>          <a name="line.124"></a>
<FONT color="green">125</FONT>          if(argsIn.length == (numberMethodParams - paramStart))<a name="line.125"></a>
<FONT color="green">126</FONT>          {<a name="line.126"></a>
<FONT color="green">127</FONT>            // then we have our candidate.<a name="line.127"></a>
<FONT color="green">128</FONT>            int score = scoreMatch(paramTypes, paramStart, argsIn, scoreStart);<a name="line.128"></a>
<FONT color="green">129</FONT>            // System.out.println("score: "+score);<a name="line.129"></a>
<FONT color="green">130</FONT>            if(-1 == score) <a name="line.130"></a>
<FONT color="green">131</FONT>              continue;<a name="line.131"></a>
<FONT color="green">132</FONT>            if(score &lt; bestScore)<a name="line.132"></a>
<FONT color="green">133</FONT>            {<a name="line.133"></a>
<FONT color="green">134</FONT>              // System.out.println("Assigning best ctor: "+ctor);<a name="line.134"></a>
<FONT color="green">135</FONT>              bestConstructor = ctor;<a name="line.135"></a>
<FONT color="green">136</FONT>              bestParamTypes = paramTypes;<a name="line.136"></a>
<FONT color="green">137</FONT>              bestScore = score;<a name="line.137"></a>
<FONT color="green">138</FONT>              bestScoreCount = 1;<a name="line.138"></a>
<FONT color="green">139</FONT>            }<a name="line.139"></a>
<FONT color="green">140</FONT>            else if (score == bestScore)<a name="line.140"></a>
<FONT color="green">141</FONT>              bestScoreCount++;<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>    <a name="line.144"></a>
<FONT color="green">145</FONT>        if(null == bestConstructor)<a name="line.145"></a>
<FONT color="green">146</FONT>        {<a name="line.146"></a>
<FONT color="green">147</FONT>          throw new NoSuchMethodException(errString("function", "constructor", classObj,<a name="line.147"></a>
<FONT color="green">148</FONT>                                                                            "", 0, argsIn));<a name="line.148"></a>
<FONT color="green">149</FONT>        }<a name="line.149"></a>
<FONT color="green">150</FONT>        /*** This is commented out until we can do a better object -&gt; object scoring <a name="line.150"></a>
<FONT color="green">151</FONT>        else if (bestScoreCount &gt; 1)<a name="line.151"></a>
<FONT color="green">152</FONT>          throw new TransformerException(XSLMessages.createMessage(XSLTErrorResources.ER_MORE_MATCH_CONSTRUCTOR, new Object[]{classObj.getName()})); //"More than one best match for constructor for "<a name="line.152"></a>
<FONT color="green">153</FONT>                                                                       + classObj.getName());<a name="line.153"></a>
<FONT color="green">154</FONT>        ***/<a name="line.154"></a>
<FONT color="green">155</FONT>        else<a name="line.155"></a>
<FONT color="green">156</FONT>          convertParams(argsIn, argsOut, bestParamTypes, exprContext);<a name="line.156"></a>
<FONT color="green">157</FONT>        <a name="line.157"></a>
<FONT color="green">158</FONT>        return bestConstructor;<a name="line.158"></a>
<FONT color="green">159</FONT>      }<a name="line.159"></a>
<FONT color="green">160</FONT>    <a name="line.160"></a>
<FONT color="green">161</FONT>      <a name="line.161"></a>
<FONT color="green">162</FONT>      /**<a name="line.162"></a>
<FONT color="green">163</FONT>       * Given the name of a method, figure out the resolution of <a name="line.163"></a>
<FONT color="green">164</FONT>       * the Java Method from the XSLT argument types, and perform the <a name="line.164"></a>
<FONT color="green">165</FONT>       * conversion of the arguments.<a name="line.165"></a>
<FONT color="green">166</FONT>       * @param classObj The Class of the object that should have the method.<a name="line.166"></a>
<FONT color="green">167</FONT>       * @param name The name of the method to be invoked.<a name="line.167"></a>
<FONT color="green">168</FONT>       * @param argsIn An array of XSLT/XPath arguments.<a name="line.168"></a>
<FONT color="green">169</FONT>       * @param argsOut An array of the exact size as argsIn, which will be <a name="line.169"></a>
<FONT color="green">170</FONT>       * populated with converted arguments if a suitable method is found.<a name="line.170"></a>
<FONT color="green">171</FONT>       * @return A method that will work with the argsOut array.<a name="line.171"></a>
<FONT color="green">172</FONT>       * @throws TransformerException may be thrown for Xalan conversion<a name="line.172"></a>
<FONT color="green">173</FONT>       * exceptions.<a name="line.173"></a>
<FONT color="green">174</FONT>       */<a name="line.174"></a>
<FONT color="green">175</FONT>      public static Method getMethod(Class classObj,<a name="line.175"></a>
<FONT color="green">176</FONT>                                     String name, <a name="line.176"></a>
<FONT color="green">177</FONT>                                     Object[] argsIn, <a name="line.177"></a>
<FONT color="green">178</FONT>                                     Object[][] argsOut,<a name="line.178"></a>
<FONT color="green">179</FONT>                                     ExpressionContext exprContext,<a name="line.179"></a>
<FONT color="green">180</FONT>                                     int searchMethod)<a name="line.180"></a>
<FONT color="green">181</FONT>        throws NoSuchMethodException,<a name="line.181"></a>
<FONT color="green">182</FONT>               SecurityException,<a name="line.182"></a>
<FONT color="green">183</FONT>               TransformerException<a name="line.183"></a>
<FONT color="green">184</FONT>      {<a name="line.184"></a>
<FONT color="green">185</FONT>        // System.out.println("---&gt; Looking for method: "+name);<a name="line.185"></a>
<FONT color="green">186</FONT>        // System.out.println("---&gt; classObj: "+classObj);<a name="line.186"></a>
<FONT color="green">187</FONT>        if (name.indexOf("-")&gt;0)<a name="line.187"></a>
<FONT color="green">188</FONT>          name = replaceDash(name);<a name="line.188"></a>
<FONT color="green">189</FONT>        Method bestMethod = null;<a name="line.189"></a>
<FONT color="green">190</FONT>        Class[] bestParamTypes = null;<a name="line.190"></a>
<FONT color="green">191</FONT>        Method[] methods = classObj.getMethods();<a name="line.191"></a>
<FONT color="green">192</FONT>        int nMethods = methods.length;<a name="line.192"></a>
<FONT color="green">193</FONT>        int bestScore = Integer.MAX_VALUE;<a name="line.193"></a>
<FONT color="green">194</FONT>        int bestScoreCount = 0;<a name="line.194"></a>
<FONT color="green">195</FONT>        boolean isStatic;<a name="line.195"></a>
<FONT color="green">196</FONT>        for(int i = 0; i &lt; nMethods; i++)<a name="line.196"></a>
<FONT color="green">197</FONT>        {<a name="line.197"></a>
<FONT color="green">198</FONT>          Method method = methods[i];<a name="line.198"></a>
<FONT color="green">199</FONT>          // System.out.println("looking at method: "+method);<a name="line.199"></a>
<FONT color="green">200</FONT>          int xsltParamStart = 0;<a name="line.200"></a>
<FONT color="green">201</FONT>          if(method.getName().equals(name))<a name="line.201"></a>
<FONT color="green">202</FONT>          {<a name="line.202"></a>
<FONT color="green">203</FONT>            isStatic = Modifier.isStatic(method.getModifiers());<a name="line.203"></a>
<FONT color="green">204</FONT>            switch(searchMethod)<a name="line.204"></a>
<FONT color="green">205</FONT>            {<a name="line.205"></a>
<FONT color="green">206</FONT>              case STATIC_ONLY:<a name="line.206"></a>
<FONT color="green">207</FONT>                if (!isStatic)<a name="line.207"></a>
<FONT color="green">208</FONT>                {<a name="line.208"></a>
<FONT color="green">209</FONT>                  continue;<a name="line.209"></a>
<FONT color="green">210</FONT>                }<a name="line.210"></a>
<FONT color="green">211</FONT>                break;<a name="line.211"></a>
<FONT color="green">212</FONT>    <a name="line.212"></a>
<FONT color="green">213</FONT>              case INSTANCE_ONLY:<a name="line.213"></a>
<FONT color="green">214</FONT>                if (isStatic)<a name="line.214"></a>
<FONT color="green">215</FONT>                {<a name="line.215"></a>
<FONT color="green">216</FONT>                  continue;<a name="line.216"></a>
<FONT color="green">217</FONT>                }<a name="line.217"></a>
<FONT color="green">218</FONT>                break;<a name="line.218"></a>
<FONT color="green">219</FONT>    <a name="line.219"></a>
<FONT color="green">220</FONT>              case STATIC_AND_INSTANCE:<a name="line.220"></a>
<FONT color="green">221</FONT>                break;<a name="line.221"></a>
<FONT color="green">222</FONT>    <a name="line.222"></a>
<FONT color="green">223</FONT>              case DYNAMIC:<a name="line.223"></a>
<FONT color="green">224</FONT>                if (!isStatic)<a name="line.224"></a>
<FONT color="green">225</FONT>                  xsltParamStart = 1;<a name="line.225"></a>
<FONT color="green">226</FONT>            }<a name="line.226"></a>
<FONT color="green">227</FONT>            int javaParamStart = 0;<a name="line.227"></a>
<FONT color="green">228</FONT>            Class[] paramTypes = method.getParameterTypes();<a name="line.228"></a>
<FONT color="green">229</FONT>            int numberMethodParams = paramTypes.length;<a name="line.229"></a>
<FONT color="green">230</FONT>            boolean isFirstExpressionContext = false;<a name="line.230"></a>
<FONT color="green">231</FONT>            int scoreStart;<a name="line.231"></a>
<FONT color="green">232</FONT>            // System.out.println("numberMethodParams: "+numberMethodParams);<a name="line.232"></a>
<FONT color="green">233</FONT>            // System.out.println("argsIn.length: "+argsIn.length);<a name="line.233"></a>
<FONT color="green">234</FONT>            // System.out.println("exprContext: "+exprContext);<a name="line.234"></a>
<FONT color="green">235</FONT>            int argsLen = (null != argsIn) ? argsIn.length : 0;<a name="line.235"></a>
<FONT color="green">236</FONT>            if(numberMethodParams == (argsLen-xsltParamStart+1))<a name="line.236"></a>
<FONT color="green">237</FONT>            {<a name="line.237"></a>
<FONT color="green">238</FONT>              Class javaClass = paramTypes[0];<a name="line.238"></a>
<FONT color="green">239</FONT>              if(ExpressionContext.class.isAssignableFrom(javaClass))<a name="line.239"></a>
<FONT color="green">240</FONT>              {<a name="line.240"></a>
<FONT color="green">241</FONT>                isFirstExpressionContext = true;<a name="line.241"></a>
<FONT color="green">242</FONT>                scoreStart = 0;<a name="line.242"></a>
<FONT color="green">243</FONT>                javaParamStart++;<a name="line.243"></a>
<FONT color="green">244</FONT>              }<a name="line.244"></a>
<FONT color="green">245</FONT>              else<a name="line.245"></a>
<FONT color="green">246</FONT>              {<a name="line.246"></a>
<FONT color="green">247</FONT>                continue;<a name="line.247"></a>
<FONT color="green">248</FONT>              }<a name="line.248"></a>
<FONT color="green">249</FONT>            }<a name="line.249"></a>
<FONT color="green">250</FONT>            else<a name="line.250"></a>
<FONT color="green">251</FONT>                scoreStart = 1000;<a name="line.251"></a>
<FONT color="green">252</FONT>            <a name="line.252"></a>
<FONT color="green">253</FONT>            if((argsLen - xsltParamStart) == (numberMethodParams - javaParamStart))<a name="line.253"></a>
<FONT color="green">254</FONT>            {<a name="line.254"></a>
<FONT color="green">255</FONT>              // then we have our candidate.<a name="line.255"></a>
<FONT color="green">256</FONT>              int score = scoreMatch(paramTypes, javaParamStart, argsIn, scoreStart);<a name="line.256"></a>
<FONT color="green">257</FONT>              // System.out.println("score: "+score);<a name="line.257"></a>
<FONT color="green">258</FONT>              if(-1 == score)<a name="line.258"></a>
<FONT color="green">259</FONT>                continue;<a name="line.259"></a>
<FONT color="green">260</FONT>              if(score &lt; bestScore)<a name="line.260"></a>
<FONT color="green">261</FONT>              {<a name="line.261"></a>
<FONT color="green">262</FONT>                // System.out.println("Assigning best method: "+method);<a name="line.262"></a>
<FONT color="green">263</FONT>                bestMethod = method;<a name="line.263"></a>
<FONT color="green">264</FONT>                bestParamTypes = paramTypes;<a name="line.264"></a>
<FONT color="green">265</FONT>                bestScore = score;<a name="line.265"></a>
<FONT color="green">266</FONT>                bestScoreCount = 1;<a name="line.266"></a>
<FONT color="green">267</FONT>              }<a name="line.267"></a>
<FONT color="green">268</FONT>              else if (score == bestScore)<a name="line.268"></a>
<FONT color="green">269</FONT>                bestScoreCount++;<a name="line.269"></a>
<FONT color="green">270</FONT>            }<a name="line.270"></a>
<FONT color="green">271</FONT>          }<a name="line.271"></a>
<FONT color="green">272</FONT>        }<a name="line.272"></a>
<FONT color="green">273</FONT>        <a name="line.273"></a>
<FONT color="green">274</FONT>        if (null == bestMethod)<a name="line.274"></a>
<FONT color="green">275</FONT>        {<a name="line.275"></a>
<FONT color="green">276</FONT>          throw new NoSuchMethodException(errString("function", "method", classObj,<a name="line.276"></a>
<FONT color="green">277</FONT>                                                                    name, searchMethod, argsIn));<a name="line.277"></a>
<FONT color="green">278</FONT>        }<a name="line.278"></a>
<FONT color="green">279</FONT>        /*** This is commented out until we can do a better object -&gt; object scoring <a name="line.279"></a>
<FONT color="green">280</FONT>        else if (bestScoreCount &gt; 1)<a name="line.280"></a>
<FONT color="green">281</FONT>          throw new TransformerException(XSLMessages.createMessage(XSLTErrorResources.ER_MORE_MATCH_METHOD, new Object[]{name})); //"More than one best match for method " + name);<a name="line.281"></a>
<FONT color="green">282</FONT>        ***/<a name="line.282"></a>
<FONT color="green">283</FONT>        else<a name="line.283"></a>
<FONT color="green">284</FONT>          convertParams(argsIn, argsOut, bestParamTypes, exprContext);<a name="line.284"></a>
<FONT color="green">285</FONT>        <a name="line.285"></a>
<FONT color="green">286</FONT>        return bestMethod;<a name="line.286"></a>
<FONT color="green">287</FONT>      }<a name="line.287"></a>
<FONT color="green">288</FONT>      <a name="line.288"></a>
<FONT color="green">289</FONT>      /**<a name="line.289"></a>
<FONT color="green">290</FONT>       * To support EXSLT extensions, convert names with dash to allowable Java names: <a name="line.290"></a>
<FONT color="green">291</FONT>       * e.g., convert abc-xyz to abcXyz.<a name="line.291"></a>
<FONT color="green">292</FONT>       * Note: dashes only appear in middle of an EXSLT function or element name.<a name="line.292"></a>
<FONT color="green">293</FONT>       */<a name="line.293"></a>
<FONT color="green">294</FONT>      private static String replaceDash(String name)<a name="line.294"></a>
<FONT color="green">295</FONT>      {<a name="line.295"></a>
<FONT color="green">296</FONT>        char dash = '-';<a name="line.296"></a>
<FONT color="green">297</FONT>        StringBuffer buff = new StringBuffer("");<a name="line.297"></a>
<FONT color="green">298</FONT>        for (int i=0; i&lt;name.length(); i++)<a name="line.298"></a>
<FONT color="green">299</FONT>        {<a name="line.299"></a>
<FONT color="green">300</FONT>          if (name.charAt(i) == dash)<a name="line.300"></a>
<FONT color="green">301</FONT>          {}<a name="line.301"></a>
<FONT color="green">302</FONT>          else if (i &gt; 0 &amp;&amp; name.charAt(i-1) == dash)<a name="line.302"></a>
<FONT color="green">303</FONT>            buff.append(Character.toUpperCase(name.charAt(i)));<a name="line.303"></a>
<FONT color="green">304</FONT>          else<a name="line.304"></a>
<FONT color="green">305</FONT>            buff.append(name.charAt(i));<a name="line.305"></a>
<FONT color="green">306</FONT>        }<a name="line.306"></a>
<FONT color="green">307</FONT>        return buff.toString();<a name="line.307"></a>
<FONT color="green">308</FONT>      }<a name="line.308"></a>
<FONT color="green">309</FONT>      <a name="line.309"></a>
<FONT color="green">310</FONT>      /**<a name="line.310"></a>
<FONT color="green">311</FONT>       * Given the name of a method, figure out the resolution of <a name="line.311"></a>
<FONT color="green">312</FONT>       * the Java Method<a name="line.312"></a>
<FONT color="green">313</FONT>       * @param classObj The Class of the object that should have the method.<a name="line.313"></a>
<FONT color="green">314</FONT>       * @param name The name of the method to be invoked.<a name="line.314"></a>
<FONT color="green">315</FONT>       * @return A method that will work to be called as an element.<a name="line.315"></a>
<FONT color="green">316</FONT>       * @throws TransformerException may be thrown for Xalan conversion<a name="line.316"></a>
<FONT color="green">317</FONT>       * exceptions.<a name="line.317"></a>
<FONT color="green">318</FONT>       */<a name="line.318"></a>
<FONT color="green">319</FONT>      public static Method getElementMethod(Class classObj,<a name="line.319"></a>
<FONT color="green">320</FONT>                                            String name)<a name="line.320"></a>
<FONT color="green">321</FONT>        throws NoSuchMethodException,<a name="line.321"></a>
<FONT color="green">322</FONT>               SecurityException,<a name="line.322"></a>
<FONT color="green">323</FONT>               TransformerException<a name="line.323"></a>
<FONT color="green">324</FONT>      {<a name="line.324"></a>
<FONT color="green">325</FONT>        // System.out.println("---&gt; Looking for element method: "+name);<a name="line.325"></a>
<FONT color="green">326</FONT>        // System.out.println("---&gt; classObj: "+classObj);<a name="line.326"></a>
<FONT color="green">327</FONT>        Method bestMethod = null;<a name="line.327"></a>
<FONT color="green">328</FONT>        Method[] methods = classObj.getMethods();<a name="line.328"></a>
<FONT color="green">329</FONT>        int nMethods = methods.length;<a name="line.329"></a>
<FONT color="green">330</FONT>        int bestScoreCount = 0;<a name="line.330"></a>
<FONT color="green">331</FONT>        for(int i = 0; i &lt; nMethods; i++)<a name="line.331"></a>
<FONT color="green">332</FONT>        {<a name="line.332"></a>
<FONT color="green">333</FONT>          Method method = methods[i];<a name="line.333"></a>
<FONT color="green">334</FONT>          // System.out.println("looking at method: "+method);<a name="line.334"></a>
<FONT color="green">335</FONT>          if(method.getName().equals(name))<a name="line.335"></a>
<FONT color="green">336</FONT>          {<a name="line.336"></a>
<FONT color="green">337</FONT>            Class[] paramTypes = method.getParameterTypes();<a name="line.337"></a>
<FONT color="green">338</FONT>            if ( (paramTypes.length == 2)<a name="line.338"></a>
<FONT color="green">339</FONT>               &amp;&amp; paramTypes[1].isAssignableFrom(org.apache.xalan.templates.ElemExtensionCall.class)<a name="line.339"></a>
<FONT color="green">340</FONT>                                             &amp;&amp; paramTypes[0].isAssignableFrom(org.apache.xalan.extensions.XSLProcessorContext.class) )<a name="line.340"></a>
<FONT color="green">341</FONT>            {<a name="line.341"></a>
<FONT color="green">342</FONT>              if ( ++bestScoreCount == 1 )<a name="line.342"></a>
<FONT color="green">343</FONT>                bestMethod = method;<a name="line.343"></a>
<FONT color="green">344</FONT>              else<a name="line.344"></a>
<FONT color="green">345</FONT>                break;<a name="line.345"></a>
<FONT color="green">346</FONT>            }<a name="line.346"></a>
<FONT color="green">347</FONT>          }<a name="line.347"></a>
<FONT color="green">348</FONT>        }<a name="line.348"></a>
<FONT color="green">349</FONT>        <a name="line.349"></a>
<FONT color="green">350</FONT>        if (null == bestMethod)<a name="line.350"></a>
<FONT color="green">351</FONT>        {<a name="line.351"></a>
<FONT color="green">352</FONT>          throw new NoSuchMethodException(errString("element", "method", classObj,<a name="line.352"></a>
<FONT color="green">353</FONT>                                                                            name, 0, null));<a name="line.353"></a>
<FONT color="green">354</FONT>        }<a name="line.354"></a>
<FONT color="green">355</FONT>        else if (bestScoreCount &gt; 1)<a name="line.355"></a>
<FONT color="green">356</FONT>          throw new TransformerException(XSLMessages.createMessage(XSLTErrorResources.ER_MORE_MATCH_ELEMENT, new Object[]{name})); //"More than one best match for element method " + name);<a name="line.356"></a>
<FONT color="green">357</FONT>        <a name="line.357"></a>
<FONT color="green">358</FONT>        return bestMethod;<a name="line.358"></a>
<FONT color="green">359</FONT>      }<a name="line.359"></a>
<FONT color="green">360</FONT>      <a name="line.360"></a>
<FONT color="green">361</FONT>    <a name="line.361"></a>
<FONT color="green">362</FONT>      /**<a name="line.362"></a>
<FONT color="green">363</FONT>       * Convert a set of parameters based on a set of paramTypes.<a name="line.363"></a>
<FONT color="green">364</FONT>       * @param argsIn An array of XSLT/XPath arguments.<a name="line.364"></a>
<FONT color="green">365</FONT>       * @param argsOut An array of the exact size as argsIn, which will be <a name="line.365"></a>
<FONT color="green">366</FONT>       * populated with converted arguments.<a name="line.366"></a>
<FONT color="green">367</FONT>       * @param paramTypes An array of class objects, of the exact same <a name="line.367"></a>
<FONT color="green">368</FONT>       * size as argsIn and argsOut.<a name="line.368"></a>
<FONT color="green">369</FONT>       * @throws TransformerException may be thrown for Xalan conversion<a name="line.369"></a>
<FONT color="green">370</FONT>       * exceptions.<a name="line.370"></a>
<FONT color="green">371</FONT>       */<a name="line.371"></a>
<FONT color="green">372</FONT>      public static void convertParams(Object[] argsIn, <a name="line.372"></a>
<FONT color="green">373</FONT>                                       Object[][] argsOut, Class[] paramTypes,<a name="line.373"></a>
<FONT color="green">374</FONT>                                       ExpressionContext exprContext)<a name="line.374"></a>
<FONT color="green">375</FONT>        throws javax.xml.transform.TransformerException<a name="line.375"></a>
<FONT color="green">376</FONT>      {<a name="line.376"></a>
<FONT color="green">377</FONT>        // System.out.println("In convertParams");<a name="line.377"></a>
<FONT color="green">378</FONT>        if (paramTypes == null)<a name="line.378"></a>
<FONT color="green">379</FONT>          argsOut[0] = null;<a name="line.379"></a>
<FONT color="green">380</FONT>        else<a name="line.380"></a>
<FONT color="green">381</FONT>        {<a name="line.381"></a>
<FONT color="green">382</FONT>          int nParams = paramTypes.length;<a name="line.382"></a>
<FONT color="green">383</FONT>          argsOut[0] = new Object[nParams];<a name="line.383"></a>
<FONT color="green">384</FONT>          int paramIndex = 0;<a name="line.384"></a>
<FONT color="green">385</FONT>          if((nParams &gt; 0) <a name="line.385"></a>
<FONT color="green">386</FONT>             &amp;&amp; ExpressionContext.class.isAssignableFrom(paramTypes[0]))<a name="line.386"></a>
<FONT color="green">387</FONT>          {<a name="line.387"></a>
<FONT color="green">388</FONT>            argsOut[0][0] = exprContext;<a name="line.388"></a>
<FONT color="green">389</FONT>            // System.out.println("Incrementing paramIndex in convertParams: "+paramIndex);<a name="line.389"></a>
<FONT color="green">390</FONT>            paramIndex++;<a name="line.390"></a>
<FONT color="green">391</FONT>          }<a name="line.391"></a>
<FONT color="green">392</FONT>    <a name="line.392"></a>
<FONT color="green">393</FONT>          if (argsIn != null)<a name="line.393"></a>
<FONT color="green">394</FONT>          {<a name="line.394"></a>
<FONT color="green">395</FONT>            for(int i = argsIn.length - nParams + paramIndex ; paramIndex &lt; nParams; i++, paramIndex++)<a name="line.395"></a>
<FONT color="green">396</FONT>            {<a name="line.396"></a>
<FONT color="green">397</FONT>              // System.out.println("paramTypes[i]: "+paramTypes[i]);<a name="line.397"></a>
<FONT color="green">398</FONT>              argsOut[0][paramIndex] = convert(argsIn[i], paramTypes[paramIndex]);<a name="line.398"></a>
<FONT color="green">399</FONT>            }<a name="line.399"></a>
<FONT color="green">400</FONT>          }<a name="line.400"></a>
<FONT color="green">401</FONT>        }<a name="line.401"></a>
<FONT color="green">402</FONT>      }<a name="line.402"></a>
<FONT color="green">403</FONT>      <a name="line.403"></a>
<FONT color="green">404</FONT>      /**<a name="line.404"></a>
<FONT color="green">405</FONT>       * Simple class to hold information about allowed conversions <a name="line.405"></a>
<FONT color="green">406</FONT>       * and their relative scores, for use by the table below.<a name="line.406"></a>
<FONT color="green">407</FONT>       */<a name="line.407"></a>
<FONT color="green">408</FONT>      static class ConversionInfo<a name="line.408"></a>
<FONT color="green">409</FONT>      {<a name="line.409"></a>
<FONT color="green">410</FONT>        ConversionInfo(Class cl, int score)<a name="line.410"></a>
<FONT color="green">411</FONT>        {<a name="line.411"></a>
<FONT color="green">412</FONT>          m_class = cl;<a name="line.412"></a>
<FONT color="green">413</FONT>          m_score = score;<a name="line.413"></a>
<FONT color="green">414</FONT>        }<a name="line.414"></a>
<FONT color="green">415</FONT>        <a name="line.415"></a>
<FONT color="green">416</FONT>        Class m_class;  // Java class to convert to.<a name="line.416"></a>
<FONT color="green">417</FONT>        int m_score; // Match score, closer to zero is more matched.<a name="line.417"></a>
<FONT color="green">418</FONT>      }<a name="line.418"></a>
<FONT color="green">419</FONT>      <a name="line.419"></a>
<FONT color="green">420</FONT>      private static final int SCOREBASE=1;<a name="line.420"></a>
<FONT color="green">421</FONT>      <a name="line.421"></a>
<FONT color="green">422</FONT>      /**<a name="line.422"></a>
<FONT color="green">423</FONT>       * Specification of conversions from XSLT type CLASS_UNKNOWN<a name="line.423"></a>
<FONT color="green">424</FONT>       * (i.e. some unknown Java object) to allowed Java types.<a name="line.424"></a>
<FONT color="green">425</FONT>       */<a name="line.425"></a>
<FONT color="green">426</FONT>      private final static ConversionInfo[] m_javaObjConversions = {<a name="line.426"></a>
<FONT color="green">427</FONT>        new ConversionInfo(Double.TYPE, 11),<a name="line.427"></a>
<FONT color="green">428</FONT>        new ConversionInfo(Float.TYPE, 12),<a name="line.428"></a>
<FONT color="green">429</FONT>        new ConversionInfo(Long.TYPE, 13),<a name="line.429"></a>
<FONT color="green">430</FONT>        new ConversionInfo(Integer.TYPE, 14),<a name="line.430"></a>
<FONT color="green">431</FONT>        new ConversionInfo(Short.TYPE, 15),<a name="line.431"></a>
<FONT color="green">432</FONT>        new ConversionInfo(Character.TYPE, 16),<a name="line.432"></a>
<FONT color="green">433</FONT>        new ConversionInfo(Byte.TYPE, 17),<a name="line.433"></a>
<FONT color="green">434</FONT>        new ConversionInfo(java.lang.String.class, 18)<a name="line.434"></a>
<FONT color="green">435</FONT>      };<a name="line.435"></a>
<FONT color="green">436</FONT>      <a name="line.436"></a>
<FONT color="green">437</FONT>      /**<a name="line.437"></a>
<FONT color="green">438</FONT>       * Specification of conversions from XSLT type CLASS_BOOLEAN<a name="line.438"></a>
<FONT color="green">439</FONT>       * to allowed Java types.<a name="line.439"></a>
<FONT color="green">440</FONT>       */<a name="line.440"></a>
<FONT color="green">441</FONT>      private final static ConversionInfo[] m_booleanConversions = {<a name="line.441"></a>
<FONT color="green">442</FONT>        new ConversionInfo(Boolean.TYPE, 0),<a name="line.442"></a>
<FONT color="green">443</FONT>        new ConversionInfo(java.lang.Boolean.class, 1),<a name="line.443"></a>
<FONT color="green">444</FONT>        new ConversionInfo(java.lang.Object.class, 2),<a name="line.444"></a>
<FONT color="green">445</FONT>        new ConversionInfo(java.lang.String.class, 3)<a name="line.445"></a>
<FONT color="green">446</FONT>      };<a name="line.446"></a>
<FONT color="green">447</FONT>    <a name="line.447"></a>
<FONT color="green">448</FONT>      /**<a name="line.448"></a>
<FONT color="green">449</FONT>       * Specification of conversions from XSLT type CLASS_NUMBER<a name="line.449"></a>
<FONT color="green">450</FONT>       * to allowed Java types.<a name="line.450"></a>
<FONT color="green">451</FONT>       */<a name="line.451"></a>
<FONT color="green">452</FONT>      private final static ConversionInfo[] m_numberConversions = {<a name="line.452"></a>
<FONT color="green">453</FONT>        new ConversionInfo(Double.TYPE, 0),<a name="line.453"></a>
<FONT color="green">454</FONT>        new ConversionInfo(java.lang.Double.class, 1),<a name="line.454"></a>
<FONT color="green">455</FONT>        new ConversionInfo(Float.TYPE, 3),<a name="line.455"></a>
<FONT color="green">456</FONT>        new ConversionInfo(Long.TYPE, 4),<a name="line.456"></a>
<FONT color="green">457</FONT>        new ConversionInfo(Integer.TYPE, 5),<a name="line.457"></a>
<FONT color="green">458</FONT>        new ConversionInfo(Short.TYPE, 6),<a name="line.458"></a>
<FONT color="green">459</FONT>        new ConversionInfo(Character.TYPE, 7),<a name="line.459"></a>
<FONT color="green">460</FONT>        new ConversionInfo(Byte.TYPE, 8),<a name="line.460"></a>
<FONT color="green">461</FONT>        new ConversionInfo(Boolean.TYPE, 9),<a name="line.461"></a>
<FONT color="green">462</FONT>        new ConversionInfo(java.lang.String.class, 10),<a name="line.462"></a>
<FONT color="green">463</FONT>        new ConversionInfo(java.lang.Object.class, 11)<a name="line.463"></a>
<FONT color="green">464</FONT>      };<a name="line.464"></a>
<FONT color="green">465</FONT>    <a name="line.465"></a>
<FONT color="green">466</FONT>      /**<a name="line.466"></a>
<FONT color="green">467</FONT>       * Specification of conversions from XSLT type CLASS_STRING<a name="line.467"></a>
<FONT color="green">468</FONT>       * to allowed Java types.<a name="line.468"></a>
<FONT color="green">469</FONT>       */<a name="line.469"></a>
<FONT color="green">470</FONT>      private final static ConversionInfo[] m_stringConversions = {<a name="line.470"></a>
<FONT color="green">471</FONT>        new ConversionInfo(java.lang.String.class, 0),<a name="line.471"></a>
<FONT color="green">472</FONT>        new ConversionInfo(java.lang.Object.class, 1),<a name="line.472"></a>
<FONT color="green">473</FONT>        new ConversionInfo(Character.TYPE, 2),<a name="line.473"></a>
<FONT color="green">474</FONT>        new ConversionInfo(Double.TYPE, 3),<a name="line.474"></a>
<FONT color="green">475</FONT>        new ConversionInfo(Float.TYPE, 3),<a name="line.475"></a>
<FONT color="green">476</FONT>        new ConversionInfo(Long.TYPE, 3),<a name="line.476"></a>
<FONT color="green">477</FONT>        new ConversionInfo(Integer.TYPE, 3),<a name="line.477"></a>
<FONT color="green">478</FONT>        new ConversionInfo(Short.TYPE, 3),<a name="line.478"></a>
<FONT color="green">479</FONT>        new ConversionInfo(Byte.TYPE, 3),<a name="line.479"></a>
<FONT color="green">480</FONT>        new ConversionInfo(Boolean.TYPE, 4)<a name="line.480"></a>
<FONT color="green">481</FONT>      };<a name="line.481"></a>
<FONT color="green">482</FONT>    <a name="line.482"></a>
<FONT color="green">483</FONT>      /**<a name="line.483"></a>
<FONT color="green">484</FONT>       * Specification of conversions from XSLT type CLASS_RTREEFRAG<a name="line.484"></a>
<FONT color="green">485</FONT>       * to allowed Java types.<a name="line.485"></a>
<FONT color="green">486</FONT>       */<a name="line.486"></a>
<FONT color="green">487</FONT>      private final static ConversionInfo[] m_rtfConversions = {<a name="line.487"></a>
<FONT color="green">488</FONT>        new ConversionInfo(org.w3c.dom.traversal.NodeIterator.class, 0),<a name="line.488"></a>
<FONT color="green">489</FONT>        new ConversionInfo(org.w3c.dom.NodeList.class, 1),<a name="line.489"></a>
<FONT color="green">490</FONT>        new ConversionInfo(org.w3c.dom.Node.class, 2),<a name="line.490"></a>
<FONT color="green">491</FONT>        new ConversionInfo(java.lang.String.class, 3),<a name="line.491"></a>
<FONT color="green">492</FONT>        new ConversionInfo(java.lang.Object.class, 5),<a name="line.492"></a>
<FONT color="green">493</FONT>        new ConversionInfo(Character.TYPE, 6),<a name="line.493"></a>
<FONT color="green">494</FONT>        new ConversionInfo(Double.TYPE, 7),<a name="line.494"></a>
<FONT color="green">495</FONT>        new ConversionInfo(Float.TYPE, 7),<a name="line.495"></a>
<FONT color="green">496</FONT>        new ConversionInfo(Long.TYPE, 7),<a name="line.496"></a>
<FONT color="green">497</FONT>        new ConversionInfo(Integer.TYPE, 7),<a name="line.497"></a>
<FONT color="green">498</FONT>        new ConversionInfo(Short.TYPE, 7),<a name="line.498"></a>
<FONT color="green">499</FONT>        new ConversionInfo(Byte.TYPE, 7),<a name="line.499"></a>
<FONT color="green">500</FONT>        new ConversionInfo(Boolean.TYPE, 8)<a name="line.500"></a>
<FONT color="green">501</FONT>      };<a name="line.501"></a>
<FONT color="green">502</FONT>      <a name="line.502"></a>
<FONT color="green">503</FONT>      /**<a name="line.503"></a>
<FONT color="green">504</FONT>       * Specification of conversions from XSLT type CLASS_NODESET<a name="line.504"></a>
<FONT color="green">505</FONT>       * to allowed Java types.  (This is the same as for CLASS_RTREEFRAG)<a name="line.505"></a>
<FONT color="green">506</FONT>       */<a name="line.506"></a>
<FONT color="green">507</FONT>      private final static ConversionInfo[] m_nodesetConversions = {<a name="line.507"></a>
<FONT color="green">508</FONT>        new ConversionInfo(org.w3c.dom.traversal.NodeIterator.class, 0),<a name="line.508"></a>
<FONT color="green">509</FONT>        new ConversionInfo(org.w3c.dom.NodeList.class, 1),<a name="line.509"></a>
<FONT color="green">510</FONT>        new ConversionInfo(org.w3c.dom.Node.class, 2),<a name="line.510"></a>
<FONT color="green">511</FONT>        new ConversionInfo(java.lang.String.class, 3),<a name="line.511"></a>
<FONT color="green">512</FONT>        new ConversionInfo(java.lang.Object.class, 5),<a name="line.512"></a>
<FONT color="green">513</FONT>        new ConversionInfo(Character.TYPE, 6),<a name="line.513"></a>
<FONT color="green">514</FONT>        new ConversionInfo(Double.TYPE, 7),<a name="line.514"></a>
<FONT color="green">515</FONT>        new ConversionInfo(Float.TYPE, 7),<a name="line.515"></a>
<FONT color="green">516</FONT>        new ConversionInfo(Long.TYPE, 7),<a name="line.516"></a>
<FONT color="green">517</FONT>        new ConversionInfo(Integer.TYPE, 7),<a name="line.517"></a>
<FONT color="green">518</FONT>        new ConversionInfo(Short.TYPE, 7),<a name="line.518"></a>
<FONT color="green">519</FONT>        new ConversionInfo(Byte.TYPE, 7),<a name="line.519"></a>
<FONT color="green">520</FONT>        new ConversionInfo(Boolean.TYPE, 8)<a name="line.520"></a>
<FONT color="green">521</FONT>      };<a name="line.521"></a>
<FONT color="green">522</FONT>      <a name="line.522"></a>
<FONT color="green">523</FONT>      /**<a name="line.523"></a>
<FONT color="green">524</FONT>       * Order is significant in the list below, based on <a name="line.524"></a>
<FONT color="green">525</FONT>       * XObject.CLASS_XXX values.<a name="line.525"></a>
<FONT color="green">526</FONT>       */<a name="line.526"></a>
<FONT color="green">527</FONT>      private final static ConversionInfo[][] m_conversions = <a name="line.527"></a>
<FONT color="green">528</FONT>      {<a name="line.528"></a>
<FONT color="green">529</FONT>        m_javaObjConversions, // CLASS_UNKNOWN = 0;<a name="line.529"></a>
<FONT color="green">530</FONT>        m_booleanConversions, // CLASS_BOOLEAN = 1;<a name="line.530"></a>
<FONT color="green">531</FONT>        m_numberConversions,  // CLASS_NUMBER = 2;<a name="line.531"></a>
<FONT color="green">532</FONT>        m_stringConversions,  // CLASS_STRING = 3;<a name="line.532"></a>
<FONT color="green">533</FONT>        m_nodesetConversions, // CLASS_NODESET = 4;<a name="line.533"></a>
<FONT color="green">534</FONT>        m_rtfConversions      // CLASS_RTREEFRAG = 5;<a name="line.534"></a>
<FONT color="green">535</FONT>      };<a name="line.535"></a>
<FONT color="green">536</FONT>      <a name="line.536"></a>
<FONT color="green">537</FONT>      /**<a name="line.537"></a>
<FONT color="green">538</FONT>       * Score the conversion of a set of XSLT arguments to a <a name="line.538"></a>
<FONT color="green">539</FONT>       * given set of Java parameters.<a name="line.539"></a>
<FONT color="green">540</FONT>       * If any invocations of this function for a method with <a name="line.540"></a>
<FONT color="green">541</FONT>       * the same name return the same positive value, then a conflict <a name="line.541"></a>
<FONT color="green">542</FONT>       * has occured, and an error should be signaled.<a name="line.542"></a>
<FONT color="green">543</FONT>       * @param javaParamTypes Must be filled with valid class names, and <a name="line.543"></a>
<FONT color="green">544</FONT>       * of the same length as xsltArgs.<a name="line.544"></a>
<FONT color="green">545</FONT>       * @param xsltArgs Must be filled with valid object instances, and <a name="line.545"></a>
<FONT color="green">546</FONT>       * of the same length as javeParamTypes.<a name="line.546"></a>
<FONT color="green">547</FONT>       * @return -1 for no allowed conversion, or a positive score <a name="line.547"></a>
<FONT color="green">548</FONT>       * that is closer to zero for more preferred, or further from <a name="line.548"></a>
<FONT color="green">549</FONT>       * zero for less preferred.<a name="line.549"></a>
<FONT color="green">550</FONT>       */<a name="line.550"></a>
<FONT color="green">551</FONT>      public static int scoreMatch(Class[] javaParamTypes, int javaParamsStart,<a name="line.551"></a>
<FONT color="green">552</FONT>                                   Object[] xsltArgs, int score)<a name="line.552"></a>
<FONT color="green">553</FONT>      {<a name="line.553"></a>
<FONT color="green">554</FONT>        if ((xsltArgs == null) || (javaParamTypes == null))<a name="line.554"></a>
<FONT color="green">555</FONT>          return score;<a name="line.555"></a>
<FONT color="green">556</FONT>        int nParams = xsltArgs.length;<a name="line.556"></a>
<FONT color="green">557</FONT>        for(int i = nParams - javaParamTypes.length + javaParamsStart, javaParamTypesIndex = javaParamsStart; <a name="line.557"></a>
<FONT color="green">558</FONT>            i &lt; nParams; <a name="line.558"></a>
<FONT color="green">559</FONT>            i++, javaParamTypesIndex++)<a name="line.559"></a>
<FONT color="green">560</FONT>        {<a name="line.560"></a>
<FONT color="green">561</FONT>          Object xsltObj = xsltArgs[i];<a name="line.561"></a>
<FONT color="green">562</FONT>          int xsltClassType = (xsltObj instanceof XObject) <a name="line.562"></a>
<FONT color="green">563</FONT>                              ? ((XObject)xsltObj).getType() <a name="line.563"></a>
<FONT color="green">564</FONT>                                : XObject.CLASS_UNKNOWN;<a name="line.564"></a>
<FONT color="green">565</FONT>          Class javaClass = javaParamTypes[javaParamTypesIndex];<a name="line.565"></a>
<FONT color="green">566</FONT>          <a name="line.566"></a>
<FONT color="green">567</FONT>          // System.out.println("Checking xslt: "+xsltObj.getClass().getName()+<a name="line.567"></a>
<FONT color="green">568</FONT>          //                   " against java: "+javaClass.getName());<a name="line.568"></a>
<FONT color="green">569</FONT>          <a name="line.569"></a>
<FONT color="green">570</FONT>          if(xsltClassType == XObject.CLASS_NULL)<a name="line.570"></a>
<FONT color="green">571</FONT>          {<a name="line.571"></a>
<FONT color="green">572</FONT>            // In Xalan I have objects of CLASS_NULL, though I'm not <a name="line.572"></a>
<FONT color="green">573</FONT>            // sure they're used any more.  For now, do something funky.<a name="line.573"></a>
<FONT color="green">574</FONT>            if(!javaClass.isPrimitive())<a name="line.574"></a>
<FONT color="green">575</FONT>            {<a name="line.575"></a>
<FONT color="green">576</FONT>              // Then assume that a null can be used, but give it a low score.<a name="line.576"></a>
<FONT color="green">577</FONT>              score += 10;<a name="line.577"></a>
<FONT color="green">578</FONT>              continue;<a name="line.578"></a>
<FONT color="green">579</FONT>            }<a name="line.579"></a>
<FONT color="green">580</FONT>            else<a name="line.580"></a>
<FONT color="green">581</FONT>              return -1;  // no match.<a name="line.581"></a>
<FONT color="green">582</FONT>          }<a name="line.582"></a>
<FONT color="green">583</FONT>          <a name="line.583"></a>
<FONT color="green">584</FONT>          ConversionInfo[] convInfo = m_conversions[xsltClassType];<a name="line.584"></a>
<FONT color="green">585</FONT>          int nConversions = convInfo.length;<a name="line.585"></a>
<FONT color="green">586</FONT>          int k;<a name="line.586"></a>
<FONT color="green">587</FONT>          for(k = 0; k &lt; nConversions; k++)<a name="line.587"></a>
<FONT color="green">588</FONT>          {<a name="line.588"></a>
<FONT color="green">589</FONT>            ConversionInfo cinfo = convInfo[k];<a name="line.589"></a>
<FONT color="green">590</FONT>            if(javaClass.isAssignableFrom(cinfo.m_class))<a name="line.590"></a>
<FONT color="green">591</FONT>            {<a name="line.591"></a>
<FONT color="green">592</FONT>              score += cinfo.m_score;<a name="line.592"></a>
<FONT color="green">593</FONT>              break; // from k loop<a name="line.593"></a>
<FONT color="green">594</FONT>            }<a name="line.594"></a>
<FONT color="green">595</FONT>          }<a name="line.595"></a>
<FONT color="green">596</FONT>    <a name="line.596"></a>
<FONT color="green">597</FONT>          if (k == nConversions)<a name="line.597"></a>
<FONT color="green">598</FONT>          {<a name="line.598"></a>
<FONT color="green">599</FONT>            // If we get here, we haven't made a match on this parameter using <a name="line.599"></a>
<FONT color="green">600</FONT>            // the ConversionInfo array.  We now try to handle the object -&gt; object<a name="line.600"></a>
<FONT color="green">601</FONT>            // mapping which we can't handle through the array mechanism.  To do this,<a name="line.601"></a>
<FONT color="green">602</FONT>            // we must determine the class of the argument passed from the stylesheet.<a name="line.602"></a>
<FONT color="green">603</FONT>    <a name="line.603"></a>
<FONT color="green">604</FONT>            // If we were passed a subclass of XObject, representing one of the actual<a name="line.604"></a>
<FONT color="green">605</FONT>            // XSLT types, and we are here, we reject this extension method as a candidate<a name="line.605"></a>
<FONT color="green">606</FONT>            // because a match should have been made using the ConversionInfo array.  If we <a name="line.606"></a>
<FONT color="green">607</FONT>            // were passed an XObject that encapsulates a non-XSLT type or we<a name="line.607"></a>
<FONT color="green">608</FONT>            // were passed a non-XSLT type directly, we continue.<a name="line.608"></a>
<FONT color="green">609</FONT>    <a name="line.609"></a>
<FONT color="green">610</FONT>            // The current implementation (contributed by Kelly Campbell &lt;camk@channelpoint.com&gt;)<a name="line.610"></a>
<FONT color="green">611</FONT>            // checks to see if we were passed an XObject from the XSLT stylesheet.  If not,<a name="line.611"></a>
<FONT color="green">612</FONT>            // we use the class of the object that was passed and make sure that it will<a name="line.612"></a>
<FONT color="green">613</FONT>            // map to the class type of the parameter in the extension function.<a name="line.613"></a>
<FONT color="green">614</FONT>            // If we were passed an XObject, we attempt to get the class of the actual<a name="line.614"></a>
<FONT color="green">615</FONT>            // object encapsulated inside the XObject.  If the encapsulated object is null,<a name="line.615"></a>
<FONT color="green">616</FONT>            // we judge this method as a match but give it a low score.  <a name="line.616"></a>
<FONT color="green">617</FONT>            // If the encapsulated object is not null, we use its type to determine<a name="line.617"></a>
<FONT color="green">618</FONT>            // whether this java method is a valid match for this extension function call.<a name="line.618"></a>
<FONT color="green">619</FONT>            // This approach eliminates the NullPointerException in the earlier implementation<a name="line.619"></a>
<FONT color="green">620</FONT>            // that resulted from passing an XObject encapsulating the null java object.<a name="line.620"></a>
<FONT color="green">621</FONT>                                    <a name="line.621"></a>
<FONT color="green">622</FONT>            // TODO:  This needs to be improved to assign relative scores to subclasses,<a name="line.622"></a>
<FONT color="green">623</FONT>            // etc. <a name="line.623"></a>
<FONT color="green">624</FONT>    <a name="line.624"></a>
<FONT color="green">625</FONT>            if (XObject.CLASS_UNKNOWN == xsltClassType)<a name="line.625"></a>
<FONT color="green">626</FONT>            {<a name="line.626"></a>
<FONT color="green">627</FONT>              Class realClass = null;<a name="line.627"></a>
<FONT color="green">628</FONT>    <a name="line.628"></a>
<FONT color="green">629</FONT>              if (xsltObj instanceof XObject)<a name="line.629"></a>
<FONT color="green">630</FONT>              {<a name="line.630"></a>
<FONT color="green">631</FONT>                Object realObj = ((XObject) xsltObj).object();<a name="line.631"></a>
<FONT color="green">632</FONT>                if (null != realObj)<a name="line.632"></a>
<FONT color="green">633</FONT>                {<a name="line.633"></a>
<FONT color="green">634</FONT>                  realClass = realObj.getClass();<a name="line.634"></a>
<FONT color="green">635</FONT>                }<a name="line.635"></a>
<FONT color="green">636</FONT>                else<a name="line.636"></a>
<FONT color="green">637</FONT>                {<a name="line.637"></a>
<FONT color="green">638</FONT>                  // do the same as if we were passed XObject.CLASS_NULL<a name="line.638"></a>
<FONT color="green">639</FONT>                  score += 10;<a name="line.639"></a>
<FONT color="green">640</FONT>                  continue;<a name="line.640"></a>
<FONT color="green">641</FONT>                }<a name="line.641"></a>
<FONT color="green">642</FONT>              }<a name="line.642"></a>
<FONT color="green">643</FONT>              else<a name="line.643"></a>
<FONT color="green">644</FONT>              {<a name="line.644"></a>
<FONT color="green">645</FONT>                realClass = xsltObj.getClass();<a name="line.645"></a>
<FONT color="green">646</FONT>              }<a name="line.646"></a>
<FONT color="green">647</FONT>    <a name="line.647"></a>
<FONT color="green">648</FONT>              if (javaClass.isAssignableFrom(realClass))<a name="line.648"></a>
<FONT color="green">649</FONT>              {<a name="line.649"></a>
<FONT color="green">650</FONT>                score += 0;         // TODO: To be assigned based on subclass "distance"<a name="line.650"></a>
<FONT color="green">651</FONT>              }<a name="line.651"></a>
<FONT color="green">652</FONT>              else<a name="line.652"></a>
<FONT color="green">653</FONT>                return -1;<a name="line.653"></a>
<FONT color="green">654</FONT>            }<a name="line.654"></a>
<FONT color="green">655</FONT>            else<a name="line.655"></a>
<FONT color="green">656</FONT>              return -1;<a name="line.656"></a>
<FONT color="green">657</FONT>          }<a name="line.657"></a>
<FONT color="green">658</FONT>        }<a name="line.658"></a>
<FONT color="green">659</FONT>        return score;<a name="line.659"></a>
<FONT color="green">660</FONT>      }<a name="line.660"></a>
<FONT color="green">661</FONT>      <a name="line.661"></a>
<FONT color="green">662</FONT>      /**<a name="line.662"></a>
<FONT color="green">663</FONT>       * Convert the given XSLT object to an object of <a name="line.663"></a>
<FONT color="green">664</FONT>       * the given class.<a name="line.664"></a>
<FONT color="green">665</FONT>       * @param xsltObj The XSLT object that needs conversion.<a name="line.665"></a>
<FONT color="green">666</FONT>       * @param javaClass The type of object to convert to.<a name="line.666"></a>
<FONT color="green">667</FONT>       * @returns An object suitable for passing to the Method.invoke <a name="line.667"></a>
<FONT color="green">668</FONT>       * function in the args array, which may be null in some cases.<a name="line.668"></a>
<FONT color="green">669</FONT>       * @throws TransformerException may be thrown for Xalan conversion<a name="line.669"></a>
<FONT color="green">670</FONT>       * exceptions.<a name="line.670"></a>
<FONT color="green">671</FONT>       */<a name="line.671"></a>
<FONT color="green">672</FONT>      static Object convert(Object xsltObj, Class javaClass)<a name="line.672"></a>
<FONT color="green">673</FONT>        throws javax.xml.transform.TransformerException<a name="line.673"></a>
<FONT color="green">674</FONT>      {<a name="line.674"></a>
<FONT color="green">675</FONT>        if(xsltObj instanceof XObject)<a name="line.675"></a>
<FONT color="green">676</FONT>        {<a name="line.676"></a>
<FONT color="green">677</FONT>          XObject xobj = ((XObject)xsltObj);<a name="line.677"></a>
<FONT color="green">678</FONT>          int xsltClassType = xobj.getType();<a name="line.678"></a>
<FONT color="green">679</FONT>    <a name="line.679"></a>
<FONT color="green">680</FONT>          switch(xsltClassType)<a name="line.680"></a>
<FONT color="green">681</FONT>          {<a name="line.681"></a>
<FONT color="green">682</FONT>          case XObject.CLASS_NULL:<a name="line.682"></a>
<FONT color="green">683</FONT>            return null;<a name="line.683"></a>
<FONT color="green">684</FONT>            <a name="line.684"></a>
<FONT color="green">685</FONT>          case XObject.CLASS_BOOLEAN:<a name="line.685"></a>
<FONT color="green">686</FONT>            {<a name="line.686"></a>
<FONT color="green">687</FONT>              if(javaClass == java.lang.String.class)<a name="line.687"></a>
<FONT color="green">688</FONT>                return xobj.str();<a name="line.688"></a>
<FONT color="green">689</FONT>              else<a name="line.689"></a>
<FONT color="green">690</FONT>                return xobj.bool() ? Boolean.TRUE : Boolean.FALSE;<a name="line.690"></a>
<FONT color="green">691</FONT>            }<a name="line.691"></a>
<FONT color="green">692</FONT>            // break; Unreachable<a name="line.692"></a>
<FONT color="green">693</FONT>          case XObject.CLASS_NUMBER:<a name="line.693"></a>
<FONT color="green">694</FONT>            {<a name="line.694"></a>
<FONT color="green">695</FONT>              if(javaClass == java.lang.String.class)<a name="line.695"></a>
<FONT color="green">696</FONT>                return xobj.str();<a name="line.696"></a>
<FONT color="green">697</FONT>              else if(javaClass == Boolean.TYPE)<a name="line.697"></a>
<FONT color="green">698</FONT>                return xobj.bool() ? Boolean.TRUE : Boolean.FALSE;<a name="line.698"></a>
<FONT color="green">699</FONT>              else <a name="line.699"></a>
<FONT color="green">700</FONT>              {<a name="line.700"></a>
<FONT color="green">701</FONT>                return convertDoubleToNumber(xobj.num(), javaClass);<a name="line.701"></a>
<FONT color="green">702</FONT>              }<a name="line.702"></a>
<FONT color="green">703</FONT>            }<a name="line.703"></a>
<FONT color="green">704</FONT>            // break; Unreachable<a name="line.704"></a>
<FONT color="green">705</FONT>            <a name="line.705"></a>
<FONT color="green">706</FONT>          case XObject.CLASS_STRING:<a name="line.706"></a>
<FONT color="green">707</FONT>            {<a name="line.707"></a>
<FONT color="green">708</FONT>              if((javaClass == java.lang.String.class) ||<a name="line.708"></a>
<FONT color="green">709</FONT>                 (javaClass == java.lang.Object.class))<a name="line.709"></a>
<FONT color="green">710</FONT>                return xobj.str();<a name="line.710"></a>
<FONT color="green">711</FONT>              else if(javaClass == Character.TYPE)<a name="line.711"></a>
<FONT color="green">712</FONT>              {<a name="line.712"></a>
<FONT color="green">713</FONT>                String str = xobj.str();<a name="line.713"></a>
<FONT color="green">714</FONT>                if(str.length() &gt; 0)<a name="line.714"></a>
<FONT color="green">715</FONT>                  return new Character(str.charAt(0));<a name="line.715"></a>
<FONT color="green">716</FONT>                else<a name="line.716"></a>
<FONT color="green">717</FONT>                  return null; // ??<a name="line.717"></a>
<FONT color="green">718</FONT>              }<a name="line.718"></a>
<FONT color="green">719</FONT>              else if(javaClass == Boolean.TYPE)<a name="line.719"></a>
<FONT color="green">720</FONT>                return xobj.bool() ? Boolean.TRUE : Boolean.FALSE;<a name="line.720"></a>
<FONT color="green">721</FONT>              else <a name="line.721"></a>
<FONT color="green">722</FONT>              {<a name="line.722"></a>
<FONT color="green">723</FONT>                return convertDoubleToNumber(xobj.num(), javaClass);<a name="line.723"></a>
<FONT color="green">724</FONT>              }<a name="line.724"></a>
<FONT color="green">725</FONT>            }<a name="line.725"></a>
<FONT color="green">726</FONT>            // break; Unreachable<a name="line.726"></a>
<FONT color="green">727</FONT>            <a name="line.727"></a>
<FONT color="green">728</FONT>          case XObject.CLASS_RTREEFRAG:<a name="line.728"></a>
<FONT color="green">729</FONT>            {<a name="line.729"></a>
<FONT color="green">730</FONT>              // GLP:  I don't see the reason for the isAssignableFrom call<a name="line.730"></a>
<FONT color="green">731</FONT>              //       instead of an == test as is used everywhere else.<a name="line.731"></a>
<FONT color="green">732</FONT>              //       Besides, if the javaClass is a subclass of NodeIterator<a name="line.732"></a>
<FONT color="green">733</FONT>              //       the condition will be true and we'll create a NodeIterator<a name="line.733"></a>
<FONT color="green">734</FONT>              //       which may not match the javaClass, causing a RuntimeException.<a name="line.734"></a>
<FONT color="green">735</FONT>              // if((NodeIterator.class.isAssignableFrom(javaClass)) ||<a name="line.735"></a>
<FONT color="green">736</FONT>              if ( (javaClass == NodeIterator.class) ||<a name="line.736"></a>
<FONT color="green">737</FONT>                   (javaClass == java.lang.Object.class) )<a name="line.737"></a>
<FONT color="green">738</FONT>              {<a name="line.738"></a>
<FONT color="green">739</FONT>                DTMIterator dtmIter = ((XRTreeFrag) xobj).asNodeIterator();<a name="line.739"></a>
<FONT color="green">740</FONT>                return new DTMNodeIterator(dtmIter);<a name="line.740"></a>
<FONT color="green">741</FONT>              }<a name="line.741"></a>
<FONT color="green">742</FONT>              else if (javaClass == NodeList.class)<a name="line.742"></a>
<FONT color="green">743</FONT>              {<a name="line.743"></a>
<FONT color="green">744</FONT>                return ((XRTreeFrag) xobj).convertToNodeset();<a name="line.744"></a>
<FONT color="green">745</FONT>              }<a name="line.745"></a>
<FONT color="green">746</FONT>              // Same comment as above<a name="line.746"></a>
<FONT color="green">747</FONT>              // else if(Node.class.isAssignableFrom(javaClass))<a name="line.747"></a>
<FONT color="green">748</FONT>              else if(javaClass == Node.class)<a name="line.748"></a>
<FONT color="green">749</FONT>              {<a name="line.749"></a>
<FONT color="green">750</FONT>                DTMIterator iter = ((XRTreeFrag) xobj).asNodeIterator();<a name="line.750"></a>
<FONT color="green">751</FONT>                int rootHandle = iter.nextNode();<a name="line.751"></a>
<FONT color="green">752</FONT>                DTM dtm = iter.getDTM(rootHandle);<a name="line.752"></a>
<FONT color="green">753</FONT>                return dtm.getNode(dtm.getFirstChild(rootHandle));<a name="line.753"></a>
<FONT color="green">754</FONT>              }<a name="line.754"></a>
<FONT color="green">755</FONT>              else if(javaClass == java.lang.String.class)<a name="line.755"></a>
<FONT color="green">756</FONT>              {<a name="line.756"></a>
<FONT color="green">757</FONT>                return xobj.str();<a name="line.757"></a>
<FONT color="green">758</FONT>              }<a name="line.758"></a>
<FONT color="green">759</FONT>              else if(javaClass == Boolean.TYPE)<a name="line.759"></a>
<FONT color="green">760</FONT>              {<a name="line.760"></a>
<FONT color="green">761</FONT>                return xobj.bool() ? Boolean.TRUE : Boolean.FALSE;<a name="line.761"></a>
<FONT color="green">762</FONT>              }<a name="line.762"></a>
<FONT color="green">763</FONT>              else if(javaClass.isPrimitive())<a name="line.763"></a>
<FONT color="green">764</FONT>              {<a name="line.764"></a>
<FONT color="green">765</FONT>                return convertDoubleToNumber(xobj.num(), javaClass);<a name="line.765"></a>
<FONT color="green">766</FONT>              }<a name="line.766"></a>
<FONT color="green">767</FONT>              else<a name="line.767"></a>
<FONT color="green">768</FONT>              {<a name="line.768"></a>
<FONT color="green">769</FONT>                DTMIterator iter = ((XRTreeFrag) xobj).asNodeIterator();<a name="line.769"></a>
<FONT color="green">770</FONT>                int rootHandle = iter.nextNode();<a name="line.770"></a>
<FONT color="green">771</FONT>                DTM dtm = iter.getDTM(rootHandle);<a name="line.771"></a>
<FONT color="green">772</FONT>                Node child = dtm.getNode(dtm.getFirstChild(rootHandle));<a name="line.772"></a>
<FONT color="green">773</FONT>    <a name="line.773"></a>
<FONT color="green">774</FONT>                if(javaClass.isAssignableFrom(child.getClass()))<a name="line.774"></a>
<FONT color="green">775</FONT>                  return child;<a name="line.775"></a>
<FONT color="green">776</FONT>                else<a name="line.776"></a>
<FONT color="green">777</FONT>                  return null;<a name="line.777"></a>
<FONT color="green">778</FONT>              }<a name="line.778"></a>
<FONT color="green">779</FONT>            }<a name="line.779"></a>
<FONT color="green">780</FONT>            // break; Unreachable<a name="line.780"></a>
<FONT color="green">781</FONT>            <a name="line.781"></a>
<FONT color="green">782</FONT>          case XObject.CLASS_NODESET:<a name="line.782"></a>
<FONT color="green">783</FONT>            {<a name="line.783"></a>
<FONT color="green">784</FONT>              // GLP:  I don't see the reason for the isAssignableFrom call<a name="line.784"></a>
<FONT color="green">785</FONT>              //       instead of an == test as is used everywhere else.<a name="line.785"></a>
<FONT color="green">786</FONT>              //       Besides, if the javaClass is a subclass of NodeIterator<a name="line.786"></a>
<FONT color="green">787</FONT>              //       the condition will be true and we'll create a NodeIterator<a name="line.787"></a>
<FONT color="green">788</FONT>              //       which may not match the javaClass, causing a RuntimeException.<a name="line.788"></a>
<FONT color="green">789</FONT>              // if((NodeIterator.class.isAssignableFrom(javaClass)) ||<a name="line.789"></a>
<FONT color="green">790</FONT>              if ( (javaClass == NodeIterator.class) ||<a name="line.790"></a>
<FONT color="green">791</FONT>                   (javaClass == java.lang.Object.class) )<a name="line.791"></a>
<FONT color="green">792</FONT>              {<a name="line.792"></a>
<FONT color="green">793</FONT>                return xobj.nodeset();<a name="line.793"></a>
<FONT color="green">794</FONT>              }<a name="line.794"></a>
<FONT color="green">795</FONT>              // Same comment as above<a name="line.795"></a>
<FONT color="green">796</FONT>              // else if(NodeList.class.isAssignableFrom(javaClass))<a name="line.796"></a>
<FONT color="green">797</FONT>              else if(javaClass == NodeList.class)<a name="line.797"></a>
<FONT color="green">798</FONT>              {<a name="line.798"></a>
<FONT color="green">799</FONT>                return xobj.nodelist();<a name="line.799"></a>
<FONT color="green">800</FONT>              }<a name="line.800"></a>
<FONT color="green">801</FONT>              // Same comment as above<a name="line.801"></a>
<FONT color="green">802</FONT>              // else if(Node.class.isAssignableFrom(javaClass))<a name="line.802"></a>
<FONT color="green">803</FONT>              else if(javaClass == Node.class)<a name="line.803"></a>
<FONT color="green">804</FONT>              {<a name="line.804"></a>
<FONT color="green">805</FONT>                // Xalan ensures that iter() always returns an<a name="line.805"></a>
<FONT color="green">806</FONT>                // iterator positioned at the beginning.<a name="line.806"></a>
<FONT color="green">807</FONT>                DTMIterator ni = xobj.iter();<a name="line.807"></a>
<FONT color="green">808</FONT>                int handle = ni.nextNode();<a name="line.808"></a>
<FONT color="green">809</FONT>                if (handle != DTM.NULL)<a name="line.809"></a>
<FONT color="green">810</FONT>                  return ni.getDTM(handle).getNode(handle); // may be null.<a name="line.810"></a>
<FONT color="green">811</FONT>                else<a name="line.811"></a>
<FONT color="green">812</FONT>                  return null;<a name="line.812"></a>
<FONT color="green">813</FONT>              }<a name="line.813"></a>
<FONT color="green">814</FONT>              else if(javaClass == java.lang.String.class)<a name="line.814"></a>
<FONT color="green">815</FONT>              {<a name="line.815"></a>
<FONT color="green">816</FONT>                return xobj.str();<a name="line.816"></a>
<FONT color="green">817</FONT>              }<a name="line.817"></a>
<FONT color="green">818</FONT>              else if(javaClass == Boolean.TYPE)<a name="line.818"></a>
<FONT color="green">819</FONT>              {<a name="line.819"></a>
<FONT color="green">820</FONT>                return xobj.bool() ? Boolean.TRUE : Boolean.FALSE;<a name="line.820"></a>
<FONT color="green">821</FONT>              }<a name="line.821"></a>
<FONT color="green">822</FONT>              else if(javaClass.isPrimitive())<a name="line.822"></a>
<FONT color="green">823</FONT>              {<a name="line.823"></a>
<FONT color="green">824</FONT>                return convertDoubleToNumber(xobj.num(), javaClass);<a name="line.824"></a>
<FONT color="green">825</FONT>              }<a name="line.825"></a>
<FONT color="green">826</FONT>              else<a name="line.826"></a>
<FONT color="green">827</FONT>              {<a name="line.827"></a>
<FONT color="green">828</FONT>                DTMIterator iter = xobj.iter();<a name="line.828"></a>
<FONT color="green">829</FONT>                int childHandle = iter.nextNode();<a name="line.829"></a>
<FONT color="green">830</FONT>                DTM dtm = iter.getDTM(childHandle);<a name="line.830"></a>
<FONT color="green">831</FONT>                Node child = dtm.getNode(childHandle);<a name="line.831"></a>
<FONT color="green">832</FONT>                if(javaClass.isAssignableFrom(child.getClass()))<a name="line.832"></a>
<FONT color="green">833</FONT>                  return child;<a name="line.833"></a>
<FONT color="green">834</FONT>                else<a name="line.834"></a>
<FONT color="green">835</FONT>                  return null;<a name="line.835"></a>
<FONT color="green">836</FONT>              }<a name="line.836"></a>
<FONT color="green">837</FONT>            }<a name="line.837"></a>
<FONT color="green">838</FONT>            // break; Unreachable<a name="line.838"></a>
<FONT color="green">839</FONT>            <a name="line.839"></a>
<FONT color="green">840</FONT>            // No default:, fall-through on purpose<a name="line.840"></a>
<FONT color="green">841</FONT>          } // end switch<a name="line.841"></a>
<FONT color="green">842</FONT>          xsltObj = xobj.object();<a name="line.842"></a>
<FONT color="green">843</FONT>          <a name="line.843"></a>
<FONT color="green">844</FONT>        } // end if if(xsltObj instanceof XObject)<a name="line.844"></a>
<FONT color="green">845</FONT>        <a name="line.845"></a>
<FONT color="green">846</FONT>        // At this point, we have a raw java object, not an XObject.<a name="line.846"></a>
<FONT color="green">847</FONT>        if (null != xsltObj)<a name="line.847"></a>
<FONT color="green">848</FONT>        {<a name="line.848"></a>
<FONT color="green">849</FONT>          if(javaClass == java.lang.String.class)<a name="line.849"></a>
<FONT color="green">850</FONT>          {<a name="line.850"></a>
<FONT color="green">851</FONT>            return xsltObj.toString();<a name="line.851"></a>
<FONT color="green">852</FONT>          }<a name="line.852"></a>
<FONT color="green">853</FONT>          else if(javaClass.isPrimitive())<a name="line.853"></a>
<FONT color="green">854</FONT>          {<a name="line.854"></a>
<FONT color="green">855</FONT>            // Assume a number conversion<a name="line.855"></a>
<FONT color="green">856</FONT>            XString xstr = new XString(xsltObj.toString());<a name="line.856"></a>
<FONT color="green">857</FONT>            double num = xstr.num();<a name="line.857"></a>
<FONT color="green">858</FONT>            return convertDoubleToNumber(num, javaClass);<a name="line.858"></a>
<FONT color="green">859</FONT>          }<a name="line.859"></a>
<FONT color="green">860</FONT>          else if(javaClass == java.lang.Class.class)<a name="line.860"></a>
<FONT color="green">861</FONT>          {<a name="line.861"></a>
<FONT color="green">862</FONT>            return xsltObj.getClass();<a name="line.862"></a>
<FONT color="green">863</FONT>          }<a name="line.863"></a>
<FONT color="green">864</FONT>          else<a name="line.864"></a>
<FONT color="green">865</FONT>          {<a name="line.865"></a>
<FONT color="green">866</FONT>            // Just pass the object directly, and hope for the best.<a name="line.866"></a>
<FONT color="green">867</FONT>            return xsltObj;<a name="line.867"></a>
<FONT color="green">868</FONT>          }<a name="line.868"></a>
<FONT color="green">869</FONT>                    }<a name="line.869"></a>
<FONT color="green">870</FONT>        else<a name="line.870"></a>
<FONT color="green">871</FONT>        {<a name="line.871"></a>
<FONT color="green">872</FONT>          // Just pass the object directly, and hope for the best.<a name="line.872"></a>
<FONT color="green">873</FONT>          return xsltObj;<a name="line.873"></a>
<FONT color="green">874</FONT>        }<a name="line.874"></a>
<FONT color="green">875</FONT>      }<a name="line.875"></a>
<FONT color="green">876</FONT>      <a name="line.876"></a>
<FONT color="green">877</FONT>      /**<a name="line.877"></a>
<FONT color="green">878</FONT>       * Do a standard conversion of a double to the specified type.<a name="line.878"></a>
<FONT color="green">879</FONT>       * @param num The number to be converted.<a name="line.879"></a>
<FONT color="green">880</FONT>       * @param javaClass The class type to be converted to.<a name="line.880"></a>
<FONT color="green">881</FONT>       * @return An object specified by javaClass, or a Double instance.<a name="line.881"></a>
<FONT color="green">882</FONT>       */<a name="line.882"></a>
<FONT color="green">883</FONT>      static Object convertDoubleToNumber(double num, Class javaClass)<a name="line.883"></a>
<FONT color="green">884</FONT>      {<a name="line.884"></a>
<FONT color="green">885</FONT>        // In the code below, I don't check for NaN, etc., instead <a name="line.885"></a>
<FONT color="green">886</FONT>        // using the standard Java conversion, as I think we should <a name="line.886"></a>
<FONT color="green">887</FONT>        // specify.  See issue-runtime-errors.<a name="line.887"></a>
<FONT color="green">888</FONT>        if((javaClass == Double.TYPE) ||<a name="line.888"></a>
<FONT color="green">889</FONT>           (javaClass == java.lang.Double.class))<a name="line.889"></a>
<FONT color="green">890</FONT>          return new Double(num);<a name="line.890"></a>
<FONT color="green">891</FONT>        else if(javaClass == Float.TYPE)<a name="line.891"></a>
<FONT color="green">892</FONT>          return new Float(num);<a name="line.892"></a>
<FONT color="green">893</FONT>        else if(javaClass == Long.TYPE)<a name="line.893"></a>
<FONT color="green">894</FONT>        {<a name="line.894"></a>
<FONT color="green">895</FONT>          // Use standard Java Narrowing Primitive Conversion<a name="line.895"></a>
<FONT color="green">896</FONT>          // See http://java.sun.com/docs/books/jls/html/5.doc.html#175672<a name="line.896"></a>
<FONT color="green">897</FONT>          return new Long((long)num);<a name="line.897"></a>
<FONT color="green">898</FONT>        }<a name="line.898"></a>
<FONT color="green">899</FONT>        else if(javaClass == Integer.TYPE)<a name="line.899"></a>
<FONT color="green">900</FONT>        {<a name="line.900"></a>
<FONT color="green">901</FONT>          // Use standard Java Narrowing Primitive Conversion<a name="line.901"></a>
<FONT color="green">902</FONT>          // See http://java.sun.com/docs/books/jls/html/5.doc.html#175672<a name="line.902"></a>
<FONT color="green">903</FONT>          return new Integer((int)num);<a name="line.903"></a>
<FONT color="green">904</FONT>        }<a name="line.904"></a>
<FONT color="green">905</FONT>        else if(javaClass == Short.TYPE)<a name="line.905"></a>
<FONT color="green">906</FONT>        {<a name="line.906"></a>
<FONT color="green">907</FONT>          // Use standard Java Narrowing Primitive Conversion<a name="line.907"></a>
<FONT color="green">908</FONT>          // See http://java.sun.com/docs/books/jls/html/5.doc.html#175672<a name="line.908"></a>
<FONT color="green">909</FONT>          return new Short((short)num);<a name="line.909"></a>
<FONT color="green">910</FONT>        }<a name="line.910"></a>
<FONT color="green">911</FONT>        else if(javaClass == Character.TYPE)<a name="line.911"></a>
<FONT color="green">912</FONT>        {<a name="line.912"></a>
<FONT color="green">913</FONT>          // Use standard Java Narrowing Primitive Conversion<a name="line.913"></a>
<FONT color="green">914</FONT>          // See http://java.sun.com/docs/books/jls/html/5.doc.html#175672<a name="line.914"></a>
<FONT color="green">915</FONT>          return new Character((char)num);<a name="line.915"></a>
<FONT color="green">916</FONT>        }<a name="line.916"></a>
<FONT color="green">917</FONT>        else if(javaClass == Byte.TYPE)<a name="line.917"></a>
<FONT color="green">918</FONT>        {<a name="line.918"></a>
<FONT color="green">919</FONT>          // Use standard Java Narrowing Primitive Conversion<a name="line.919"></a>
<FONT color="green">920</FONT>          // See http://java.sun.com/docs/books/jls/html/5.doc.html#175672<a name="line.920"></a>
<FONT color="green">921</FONT>          return new Byte((byte)num);<a name="line.921"></a>
<FONT color="green">922</FONT>        }<a name="line.922"></a>
<FONT color="green">923</FONT>        else     // Some other type of object<a name="line.923"></a>
<FONT color="green">924</FONT>        {<a name="line.924"></a>
<FONT color="green">925</FONT>          return new Double(num);<a name="line.925"></a>
<FONT color="green">926</FONT>        }<a name="line.926"></a>
<FONT color="green">927</FONT>      }<a name="line.927"></a>
<FONT color="green">928</FONT>    <a name="line.928"></a>
<FONT color="green">929</FONT>    <a name="line.929"></a>
<FONT color="green">930</FONT>      /**<a name="line.930"></a>
<FONT color="green">931</FONT>       * Format the message for the NoSuchMethodException containing <a name="line.931"></a>
<FONT color="green">932</FONT>       * all the information about the method we're looking for.<a name="line.932"></a>
<FONT color="green">933</FONT>       */<a name="line.933"></a>
<FONT color="green">934</FONT>      private static String errString(String callType,    // "function" or "element"<a name="line.934"></a>
<FONT color="green">935</FONT>                                      String searchType,  // "method" or "constructor"<a name="line.935"></a>
<FONT color="green">936</FONT>                                      Class classObj,<a name="line.936"></a>
<FONT color="green">937</FONT>                                      String funcName,<a name="line.937"></a>
<FONT color="green">938</FONT>                                      int searchMethod,<a name="line.938"></a>
<FONT color="green">939</FONT>                                      Object[] xsltArgs)<a name="line.939"></a>
<FONT color="green">940</FONT>      {<a name="line.940"></a>
<FONT color="green">941</FONT>        String resultString = "For extension " + callType<a name="line.941"></a>
<FONT color="green">942</FONT>                                                  + ", could not find " + searchType + " ";<a name="line.942"></a>
<FONT color="green">943</FONT>        switch (searchMethod)<a name="line.943"></a>
<FONT color="green">944</FONT>        {<a name="line.944"></a>
<FONT color="green">945</FONT>          case STATIC_ONLY:<a name="line.945"></a>
<FONT color="green">946</FONT>            return resultString + "static " + classObj.getName() + "." <a name="line.946"></a>
<FONT color="green">947</FONT>                                + funcName + "([ExpressionContext,] " + errArgs(xsltArgs, 0) + ").";<a name="line.947"></a>
<FONT color="green">948</FONT>    <a name="line.948"></a>
<FONT color="green">949</FONT>          case INSTANCE_ONLY:<a name="line.949"></a>
<FONT color="green">950</FONT>            return resultString + classObj.getName() + "."<a name="line.950"></a>
<FONT color="green">951</FONT>                                + funcName + "([ExpressionContext,] " + errArgs(xsltArgs, 0) + ").";<a name="line.951"></a>
<FONT color="green">952</FONT>    <a name="line.952"></a>
<FONT color="green">953</FONT>          case STATIC_AND_INSTANCE:<a name="line.953"></a>
<FONT color="green">954</FONT>            return resultString + classObj.getName() + "." + funcName + "([ExpressionContext,] " + errArgs(xsltArgs, 0) + ").\n"<a name="line.954"></a>
<FONT color="green">955</FONT>                                + "Checked both static and instance methods.";<a name="line.955"></a>
<FONT color="green">956</FONT>    <a name="line.956"></a>
<FONT color="green">957</FONT>          case DYNAMIC:<a name="line.957"></a>
<FONT color="green">958</FONT>            return resultString + "static " + classObj.getName() + "." + funcName<a name="line.958"></a>
<FONT color="green">959</FONT>                                + "([ExpressionContext, ]" + errArgs(xsltArgs, 0) + ") nor\n"<a name="line.959"></a>
<FONT color="green">960</FONT>                                + classObj + "." + funcName + "([ExpressionContext,] " + errArgs(xsltArgs, 1) + ").";<a name="line.960"></a>
<FONT color="green">961</FONT>    <a name="line.961"></a>
<FONT color="green">962</FONT>          default:<a name="line.962"></a>
<FONT color="green">963</FONT>            if (callType.equals("function"))      // must be a constructor<a name="line.963"></a>
<FONT color="green">964</FONT>            {<a name="line.964"></a>
<FONT color="green">965</FONT>              return resultString + classObj.getName()<a name="line.965"></a>
<FONT color="green">966</FONT>                                      + "([ExpressionContext,] " + errArgs(xsltArgs, 0) + ").";<a name="line.966"></a>
<FONT color="green">967</FONT>            }<a name="line.967"></a>
<FONT color="green">968</FONT>            else                                  // must be an element call<a name="line.968"></a>
<FONT color="green">969</FONT>            {<a name="line.969"></a>
<FONT color="green">970</FONT>              return resultString + classObj.getName() + "." + funcName<a name="line.970"></a>
<FONT color="green">971</FONT>                        + "(org.apache.xalan.extensions.XSLProcessorContext, "<a name="line.971"></a>
<FONT color="green">972</FONT>                        + "org.apache.xalan.templates.ElemExtensionCall).";<a name="line.972"></a>
<FONT color="green">973</FONT>            }<a name="line.973"></a>
<FONT color="green">974</FONT>        }<a name="line.974"></a>
<FONT color="green">975</FONT>        <a name="line.975"></a>
<FONT color="green">976</FONT>      }<a name="line.976"></a>
<FONT color="green">977</FONT>    <a name="line.977"></a>
<FONT color="green">978</FONT>    <a name="line.978"></a>
<FONT color="green">979</FONT>      private static String errArgs(Object[] xsltArgs, int startingArg)<a name="line.979"></a>
<FONT color="green">980</FONT>      {<a name="line.980"></a>
<FONT color="green">981</FONT>        StringBuffer returnArgs = new StringBuffer();<a name="line.981"></a>
<FONT color="green">982</FONT>        for (int i = startingArg; i &lt; xsltArgs.length; i++)<a name="line.982"></a>
<FONT color="green">983</FONT>        {<a name="line.983"></a>
<FONT color="green">984</FONT>          if (i != startingArg)<a name="line.984"></a>
<FONT color="green">985</FONT>            returnArgs.append(", ");<a name="line.985"></a>
<FONT color="green">986</FONT>          if (xsltArgs[i] instanceof XObject)<a name="line.986"></a>
<FONT color="green">987</FONT>            returnArgs.append(((XObject) xsltArgs[i]).getTypeString());      <a name="line.987"></a>
<FONT color="green">988</FONT>          else<a name="line.988"></a>
<FONT color="green">989</FONT>            returnArgs.append(xsltArgs[i].getClass().getName());<a name="line.989"></a>
<FONT color="green">990</FONT>        }<a name="line.990"></a>
<FONT color="green">991</FONT>        return returnArgs.toString();<a name="line.991"></a>
<FONT color="green">992</FONT>      }<a name="line.992"></a>
<FONT color="green">993</FONT>    <a name="line.993"></a>
<FONT color="green">994</FONT>    }<a name="line.994"></a>




























































</PRE>
</BODY>
</HTML>
