You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xmlbeans.apache.org by ra...@apache.org on 2006/11/16 18:51:32 UTC

svn commit: r475835 - in /xmlbeans/trunk/src/xpath_xquery/org/apache/xmlbeans/impl: xpath/saxon/XBeansXPath.java xquery/saxon/XBeansXQuery.java

Author: radup
Date: Thu Nov 16 09:51:32 2006
New Revision: 475835

URL: http://svn.apache.org/viewvc?view=rev&rev=475835
Log:
Changed the XQuery/XPath support to work with Saxon 8.8 too.

Modified:
    xmlbeans/trunk/src/xpath_xquery/org/apache/xmlbeans/impl/xpath/saxon/XBeansXPath.java
    xmlbeans/trunk/src/xpath_xquery/org/apache/xmlbeans/impl/xquery/saxon/XBeansXQuery.java

Modified: xmlbeans/trunk/src/xpath_xquery/org/apache/xmlbeans/impl/xpath/saxon/XBeansXPath.java
URL: http://svn.apache.org/viewvc/xmlbeans/trunk/src/xpath_xquery/org/apache/xmlbeans/impl/xpath/saxon/XBeansXPath.java?view=diff&rev=475835&r1=475834&r2=475835
==============================================================================
--- xmlbeans/trunk/src/xpath_xquery/org/apache/xmlbeans/impl/xpath/saxon/XBeansXPath.java (original)
+++ xmlbeans/trunk/src/xpath_xquery/org/apache/xmlbeans/impl/xpath/saxon/XBeansXPath.java Thu Nov 16 09:51:32 2006
@@ -51,6 +51,7 @@
         _contextVar = contextVar;
         this.defaultNS = defaultNS;
         this.namespaceMap = namespaceMap.entrySet().toArray();
+        this.needsDomSourceWrapping = needsDOMSourceWrapping();
     }
 
     /**
@@ -101,7 +102,7 @@
             xpe.setStaticContext(sc);
 
             Variable thisVar = sc.declareVariable(_contextVar);
-            thisVar.setValue(rootNode);
+            thisVar.setValue(needsDomSourceWrapping ? rootNode : node);
 
             XPathExpression exp = xpe.createExpression(_queryExpr);
 
@@ -131,6 +132,33 @@
         return selectNodes(node);
     }
 
+    /**
+     * @return true if we are dealing with a version of Saxon 8.x where x<=6
+     */
+    private static boolean needsDOMSourceWrapping()
+    {
+        int saxonMinorVersion;
+        int saxonMajorVersion;
+        String versionString = net.sf.saxon.Version.getProductVersion();
+        int dot1 = versionString.indexOf('.');
+        if (dot1 < 0)
+            return false;
+        int dot2 = versionString.indexOf('.', dot1 + 1);
+        if (dot2 < 0)
+            return false;
+        try
+        {
+            saxonMajorVersion = Integer.parseInt(versionString.substring(0, dot1));
+            saxonMinorVersion = Integer.parseInt(versionString.substring(dot1 + 1, dot2));
+            return saxonMajorVersion == 8 && saxonMinorVersion <= 6;
+        }
+        catch (NumberFormatException nfe)
+        {
+            return false;
+        }
+    }
+
+    private boolean needsDomSourceWrapping;
     private Object[] namespaceMap;
     private String _queryExpr;
     private String _contextVar;

Modified: xmlbeans/trunk/src/xpath_xquery/org/apache/xmlbeans/impl/xquery/saxon/XBeansXQuery.java
URL: http://svn.apache.org/viewvc/xmlbeans/trunk/src/xpath_xquery/org/apache/xmlbeans/impl/xquery/saxon/XBeansXQuery.java?view=diff&rev=475835&r1=475834&r2=475835
==============================================================================
--- xmlbeans/trunk/src/xpath_xquery/org/apache/xmlbeans/impl/xquery/saxon/XBeansXQuery.java (original)
+++ xmlbeans/trunk/src/xpath_xquery/org/apache/xmlbeans/impl/xquery/saxon/XBeansXQuery.java Thu Nov 16 09:51:32 2006
@@ -46,6 +46,7 @@
      */
     public XBeansXQuery(String queryExpr, String contextVar, Integer boundary)
     {
+        this.needsDomSourceWrapping = needsDOMSourceWrapping();
         this.config = new Configuration();
         config.setTreeModel(net.sf.saxon.event.Builder.STANDARD_TREE);
         this._stcContext = new StaticQueryContext(config);
@@ -87,11 +88,18 @@
                     Map.Entry entry = (Map.Entry) it.next();
                     if (entry.getValue() instanceof XmlTokenSource)
                     {
-                        DOMSource domSource;
-                        domSource = new DOMSource(((XmlTokenSource)
-                            entry.getValue()).getDomNode());
+                        Object paramObject;
+                        // Saxon 8.6.1 requires that the Node be wrapped
+                        // into a DOMSource, while later versions require that
+                        // it not be
+                        if (needsDomSourceWrapping)
+                            paramObject = new DOMSource(((XmlTokenSource)
+                                entry.getValue()).getDomNode());
+                        else
+                            paramObject = ((XmlTokenSource) entry.getValue()).
+                                getDomNode();
                         dynamicContext.setParameter((String) entry.getKey(),
-                            domSource);
+                                paramObject);
                     }
                     else if (entry.getValue() instanceof String)
                     dynamicContext.setParameter((String) entry.getKey(),
@@ -118,10 +126,37 @@
         }
     }
 
+    /**
+     * @return true if we are dealing with a version of Saxon 8.x where x<=6
+     */
+    private static boolean needsDOMSourceWrapping()
+    {
+        int saxonMinorVersion;
+        int saxonMajorVersion;
+        String versionString = net.sf.saxon.Version.getProductVersion();
+        int dot1 = versionString.indexOf('.');
+        if (dot1 < 0)
+            return false;
+        int dot2 = versionString.indexOf('.', dot1 + 1);
+        if (dot2 < 0)
+            return false;
+        try
+        {
+            saxonMajorVersion = Integer.parseInt(versionString.substring(0, dot1));
+            saxonMinorVersion = Integer.parseInt(versionString.substring(dot1 + 1, dot2));
+            return saxonMajorVersion == 8 && saxonMinorVersion <= 6;
+        }
+        catch (NumberFormatException nfe)
+        {
+            return false;
+        }
+    }
+
     private XQueryExpression _xquery;
     private String _query;
     private String _contextVar;
     private StaticQueryContext _stcContext;
     private Configuration config;
     private int boundary;
+    private boolean needsDomSourceWrapping;
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@xmlbeans.apache.org
For additional commands, e-mail: commits-help@xmlbeans.apache.org