Author: mbenson Date: Wed Jan 10 15:15:33 2007 New Revision: 495033 URL: http://svn.apache.org/viewvc?view=rev&rev=495033 Log: [JXPATH-10] Provide 1.1 backward-compatibility workaround with 1.3
Added: jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/util/JXPath11CompatibleTypeConverter.java (with props) Modified: jakarta/commons/proper/jxpath/trunk/src/test/org/apache/commons/jxpath/ri/compiler/ExtensionFunctionTest.java jakarta/commons/proper/jxpath/trunk/src/test/org/apache/commons/jxpath/ri/compiler/TestFunctions.java Added: jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/util/JXPath11CompatibleTypeConverter.java URL: http://svn.apache.org/viewvc/jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/util/JXPath11CompatibleTypeConverter.java?view=auto&rev=495033 ============================================================================== --- jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/util/JXPath11CompatibleTypeConverter.java (added) +++ jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/util/JXPath11CompatibleTypeConverter.java Wed Jan 10 15:15:33 2007 @@ -0,0 +1,42 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.commons.jxpath.util; + +import org.apache.commons.jxpath.NodeSet; + +/** + * TypeConverter implementation to circumvent automagic NodeSet decoding. Suggested by JIRA issue JXPATH-10. + * + * @since JXPath 1.3 + * @author Matt Benson + * @version $Revision$ $Date$ + */ +public class JXPath11CompatibleTypeConverter extends BasicTypeConverter { + /** + * [EMAIL PROTECTED] + */ + public boolean canConvert(Object object, Class toType) { + return object instanceof NodeSet ? toType.isInstance(object) : super.canConvert(object, toType); + } + + /** + * [EMAIL PROTECTED] + */ + public Object convert(Object object, Class toType) { + return object instanceof NodeSet && toType.isInstance(object) ? object : super.convert(object, toType); + } +} Propchange: jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/util/JXPath11CompatibleTypeConverter.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/util/JXPath11CompatibleTypeConverter.java ------------------------------------------------------------------------------ svn:executable = * Propchange: jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/util/JXPath11CompatibleTypeConverter.java ------------------------------------------------------------------------------ svn:keywords = Date Author Id Revision HeadURL Modified: jakarta/commons/proper/jxpath/trunk/src/test/org/apache/commons/jxpath/ri/compiler/ExtensionFunctionTest.java URL: http://svn.apache.org/viewvc/jakarta/commons/proper/jxpath/trunk/src/test/org/apache/commons/jxpath/ri/compiler/ExtensionFunctionTest.java?view=diff&rev=495033&r1=495032&r2=495033 ============================================================================== --- jakarta/commons/proper/jxpath/trunk/src/test/org/apache/commons/jxpath/ri/compiler/ExtensionFunctionTest.java (original) +++ jakarta/commons/proper/jxpath/trunk/src/test/org/apache/commons/jxpath/ri/compiler/ExtensionFunctionTest.java Wed Jan 10 15:15:33 2007 @@ -30,11 +30,15 @@ import org.apache.commons.jxpath.Functions; import org.apache.commons.jxpath.JXPathContext; import org.apache.commons.jxpath.JXPathTestCase; +import org.apache.commons.jxpath.NodeSet; import org.apache.commons.jxpath.PackageFunctions; import org.apache.commons.jxpath.Pointer; import org.apache.commons.jxpath.TestBean; import org.apache.commons.jxpath.Variables; import org.apache.commons.jxpath.ri.model.NodePointer; +import org.apache.commons.jxpath.util.JXPath11CompatibleTypeConverter; +import org.apache.commons.jxpath.util.TypeConverter; +import org.apache.commons.jxpath.util.TypeUtils; /** * Test extension functions. @@ -47,6 +51,7 @@ private Functions functions; private JXPathContext context; private TestBean testBean; + private TypeConverter typeConverter; public static void main(String[] args) { TestRunner.run(ExtensionFunctionTest.class); @@ -78,8 +83,15 @@ "jxpathtest")); lib.addFunctions(new PackageFunctions("", null)); context.setFunctions(lib); + context.getVariables().declareVariable("List.class", List.class); + context.getVariables().declareVariable("NodeSet.class", NodeSet.class); } functions = new ClassFunctions(TestFunctions.class, "test"); + typeConverter = TypeUtils.getTypeConverter(); + } + + public void tearDown() { + TypeUtils.setTypeConverter(typeConverter); } public void testConstructorLookup() { @@ -362,6 +374,29 @@ "/beans[1]/@name"); } + public void testEstablishNodeSetBaseline() { + assertXPathValue( + context, + "test:isInstance(//strings, $List.class)", + Boolean.TRUE); + assertXPathValue( + context, + "test:isInstance(//strings, $NodeSet.class)", + Boolean.FALSE); + } + + public void testBCNodeSetHack() { + TypeUtils.setTypeConverter(new JXPath11CompatibleTypeConverter()); + assertXPathValue( + context, + "test:isInstance(//strings, $List.class)", + Boolean.FALSE); + assertXPathValue( + context, + "test:isInstance(//strings, $NodeSet.class)", + Boolean.TRUE); + } + private static class Context implements ExpressionContext { private Object object; @@ -386,4 +421,4 @@ return 0; } } -} +} \ No newline at end of file Modified: jakarta/commons/proper/jxpath/trunk/src/test/org/apache/commons/jxpath/ri/compiler/TestFunctions.java URL: http://svn.apache.org/viewvc/jakarta/commons/proper/jxpath/trunk/src/test/org/apache/commons/jxpath/ri/compiler/TestFunctions.java?view=diff&rev=495033&r1=495032&r2=495033 ============================================================================== --- jakarta/commons/proper/jxpath/trunk/src/test/org/apache/commons/jxpath/ri/compiler/TestFunctions.java (original) +++ jakarta/commons/proper/jxpath/trunk/src/test/org/apache/commons/jxpath/ri/compiler/TestFunctions.java Wed Jan 10 15:15:33 2007 @@ -149,4 +149,9 @@ public static Collection items(Collection arg) { return arg; } + + public static Boolean isInstance(Object o, Class c) { + return c.isInstance(o) ? Boolean.TRUE : Boolean.FALSE; + } + } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]