Return-Path: Delivered-To: apmail-xml-xalan-dev-archive@www.apache.org Received: (qmail 71744 invoked from network); 20 Mar 2007 19:04:55 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 20 Mar 2007 19:04:55 -0000 Received: (qmail 24431 invoked by uid 500); 20 Mar 2007 18:59:02 -0000 Delivered-To: apmail-xml-xalan-dev-archive@xml.apache.org Received: (qmail 24388 invoked by uid 500); 20 Mar 2007 18:59:01 -0000 Mailing-List: contact xalan-dev-help@xml.apache.org; run by ezmlm Precedence: bulk list-help: list-unsubscribe: List-Post: Reply-To: xalan-dev@xml.apache.org List-Id: Delivered-To: mailing list xalan-dev@xml.apache.org Received: (qmail 24337 invoked by uid 99); 20 Mar 2007 18:59:01 -0000 Received: from herse.apache.org (HELO herse.apache.org) (140.211.11.133) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 20 Mar 2007 11:59:01 -0700 X-ASF-Spam-Status: No, hits=0.0 required=10.0 tests= X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO brutus.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 20 Mar 2007 11:58:52 -0700 Received: from brutus (localhost [127.0.0.1]) by brutus.apache.org (Postfix) with ESMTP id 6F05B714073 for ; Tue, 20 Mar 2007 11:58:32 -0700 (PDT) Message-ID: <9699959.1174417112451.JavaMail.jira@brutus> Date: Tue, 20 Mar 2007 11:58:32 -0700 (PDT) From: "Alex (JIRA)" To: xalan-dev@xml.apache.org Subject: [jira] Created: (XALANJ-2374) MethodResolver not handling CharSequence class conversion MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Virus-Checked: Checked by ClamAV on apache.org MethodResolver not handling CharSequence class conversion --------------------------------------------------------- Key: XALANJ-2374 URL: https://issues.apache.org/jira/browse/XALANJ-2374 Project: XalanJ2 Issue Type: Bug Environment: Windows Sun JRE 1.5.0.6 or higher HPUnix JRE 1.5.0 or higher Reporter: Alex When using Java extensions with StringBuffer class, the MethodResolver picks a method whose argument types are not converted properly. This was noticed in the new versions of JVM due to the order at which they return all methods available for a given class. Since the MethodResolver scores the methods, the one with the lowest score wins. However, the method chosen is different depending on the order in which JVM returns the available methods. In the later versions, the StringBuffer.append(String) operation will actually find the StringBuffer.append(CharSequence) instead. This is ok but the "convert" method in the MethodResolver does not handle this type and therefore generates a "Double" type. This causes an "Argument Type Mismatch" exception when the "append" method is called. I have fixed the code by adding another "elseif" statement in the "convert" function (see the CharSequence section): case XObject.CLASS_STRING: { if((javaClass == java.lang.String.class) || (javaClass == java.lang.Object.class)) return xobj.str(); else if(javaClass == java.lang.CharSequence.class) return xobj.str(); else if(javaClass == Character.TYPE) { String str = xobj.str(); if(str.length() > 0) return new Character(str.charAt(0)); else return null; // ?? } else if(javaClass == Boolean.TYPE) return new Boolean(xobj.bool()); else { return convertDoubleToNumber(xobj.num(), javaClass); } } The XSLT stylesheet that uses this code is the following: If the code change is not made, the following exception results (again, this is only in the newer JVM versions as the older ones return the StringBuffer.append(String) before the StringBuffer.append(CharSequence) and thus the correct method is found: javax.xml.transform.TransformerException: java.lang.IllegalArgumentException: argument type mismatch at org.apache.xalan.extensions.ExtensionHandlerJavaPackage.callFunction(ExtensionHandlerJavaPackage.java:403) at org.apache.xalan.extensions.ExtensionsTable.extFunction(ExtensionsTable.java:227) at org.apache.xalan.transformer.TransformerImpl.extFunction(TransformerImpl.java:460) at org.apache.xpath.functions.FuncExtFunction.execute(FuncExtFunction.java:196) at org.apache.xpath.XPath.execute(XPath.java:308) at org.apache.xalan.templates.ElemVariable.getValue(ElemVariable.java:323) at org.apache.xalan.templates.ElemVariable.execute(ElemVariable.java:291) at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2324) at org.apache.xalan.transformer.TransformerImpl.applyTemplateToNode(TransformerImpl.java:2147) at org.apache.xalan.transformer.TransformerImpl.transformNode(TransformerImpl.java:1203) at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:665) at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1119) at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1097) at com.exln.stylus.CXalanDriver.doProcessing(CXalanDriver.java:108) at com.exln.stylus.CProcessorDriver.process(CProcessorDriver.java:55) Caused by: java.lang.IllegalArgumentException: argument type mismatch at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.apache.xalan.extensions.ExtensionHandlerJavaPackage.callFunction(ExtensionHandlerJavaPackage.java:389) ... 14 more --------- java.lang.IllegalArgumentException: argument type mismatch at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.apache.xalan.extensions.ExtensionHandlerJavaPackage.callFunction(ExtensionHandlerJavaPackage.java:389) at org.apache.xalan.extensions.ExtensionsTable.extFunction(ExtensionsTable.java:227) at org.apache.xalan.transformer.TransformerImpl.extFunction(TransformerImpl.java:460) at org.apache.xpath.functions.FuncExtFunction.execute(FuncExtFunction.java:196) at org.apache.xpath.XPath.execute(XPath.java:308) at org.apache.xalan.templates.ElemVariable.getValue(ElemVariable.java:323) at org.apache.xalan.templates.ElemVariable.execute(ElemVariable.java:291) at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2324) at org.apache.xalan.transformer.TransformerImpl.applyTemplateToNode(TransformerImpl.java:2147) at org.apache.xalan.transformer.TransformerImpl.transformNode(TransformerImpl.java:1203) at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:665) at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1119) at org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1097) at com.exln.stylus.CXalanDriver.doProcessing(CXalanDriver.java:108) at com.exln.stylus.CProcessorDriver.process(CProcessorDriver.java:55) -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online. --------------------------------------------------------------------- To unsubscribe, e-mail: xalan-dev-unsubscribe@xml.apache.org For additional commands, e-mail: xalan-dev-help@xml.apache.org