Author: davsclaus
Date: Wed Feb 10 12:15:12 2010
New Revision: 908466

URL: http://svn.apache.org/viewvc?rev=908466&view=rev
Log:
CAMEL-1877: XPathBuilder now supports reading xpath factory defined as a system 
property.

Modified:
    
camel/trunk/camel-core/src/main/java/org/apache/camel/builder/xml/XPathBuilder.java
    
camel/trunk/components/camel-saxon/src/test/java/org/apache/camel/builder/saxon/XPathTest.java

Modified: 
camel/trunk/camel-core/src/main/java/org/apache/camel/builder/xml/XPathBuilder.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/xml/XPathBuilder.java?rev=908466&r1=908465&r2=908466&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/main/java/org/apache/camel/builder/xml/XPathBuilder.java
 (original)
+++ 
camel/trunk/camel-core/src/main/java/org/apache/camel/builder/xml/XPathBuilder.java
 Wed Feb 10 12:15:12 2010
@@ -20,6 +20,7 @@
 import java.io.StringReader;
 import java.util.List;
 import java.util.Map;
+import java.util.Properties;
 import java.util.Queue;
 import java.util.concurrent.ConcurrentLinkedQueue;
 import javax.xml.namespace.QName;
@@ -358,9 +359,29 @@
     public XPathFactory getXPathFactory() throws 
XPathFactoryConfigurationException {
         if (xpathFactory == null) {
             if (objectModelUri != null) {
+                LOG.info("Using objectModelUri " + objectModelUri + " when 
creating XPathFactory");
                 xpathFactory = XPathFactory.newInstance(objectModelUri);
+                return xpathFactory;
+            }
+
+            // read system property and see if there is a factory set
+            Properties properties = System.getProperties();
+            for (Map.Entry prop : properties.entrySet()) {
+                String key = (String) prop.getKey();
+                if (key.startsWith(XPathFactory.DEFAULT_PROPERTY_NAME)) {
+                    String uri = ObjectHelper.after(key, ":");
+                    if (uri != null) {
+                        LOG.info("Using system property " + key + " with 
value: " + prop.getValue() + " when creating XPathFactory");
+                        xpathFactory = XPathFactory.newInstance(uri);
+                        return xpathFactory;
+                    }
+                }
+            }
+
+            if (xpathFactory == null) {
+                LOG.debug("Creating default XPathFactory");
+                xpathFactory = XPathFactory.newInstance();
             }
-            xpathFactory = XPathFactory.newInstance();
         }
         return xpathFactory;
     }

Modified: 
camel/trunk/components/camel-saxon/src/test/java/org/apache/camel/builder/saxon/XPathTest.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-saxon/src/test/java/org/apache/camel/builder/saxon/XPathTest.java?rev=908466&r1=908465&r2=908466&view=diff
==============================================================================
--- 
camel/trunk/components/camel-saxon/src/test/java/org/apache/camel/builder/saxon/XPathTest.java
 (original)
+++ 
camel/trunk/components/camel-saxon/src/test/java/org/apache/camel/builder/saxon/XPathTest.java
 Wed Feb 10 12:15:12 2010
@@ -92,4 +92,19 @@
         assertEquals("def", result);
         // END SNIPPET: e3
     }
+
+    @Test
+    public void testXPathFunctionTokenizeUsingSystemProperty() throws 
Exception {
+        // START SNIPPET: e4
+        // set system property with the XPath factory to use which is Saxon 
+        System.setProperty(XPathFactory.DEFAULT_PROPERTY_NAME + ":" + 
"http://saxon.sf.net/jaxp/xpath/om";, "net.sf.saxon.xpath.XPathFactoryImpl");
+
+        // create a builder to evaluate the xpath using saxon
+        XPathBuilder builder = XPathBuilder.xpath("tokenize(/foo/bar, 
'_')[2]");
+
+        // evaluate as a String result
+        String result = builder.evaluate(context, 
"<foo><bar>abc_def_ghi</bar></foo>");
+        assertEquals("def", result);
+        // END SNIPPET: e4
+    }
 }


Reply via email to