Howdy folks,

I ran into the same need for saxon8.8 as is documented in:
http://issues.apache.org/jira/browse/XMLBEANS-287

From the saxon release notes, is looks like anything > 8.3 saxon is probably broken.

Attached are the necessary changes working, if not well tested, against the svn trunk @465816. It would not be backwards compatible with <8.3 saxon versions since the dom-wrapper class didn't exist.

I'd appreciate it if somebody could open the enhancement request. (in my case, it is needed for interop with xmldb)

regards,
-d

M      src/xpath_xquery/org/apache/xmlbeans/impl/xpath/saxon/XBeansXPath.java
M      src/xpath_xquery/org/apache/xmlbeans/impl/xquery/saxon/XBeansXQuery.java
M      build.xml





Index: src/xpath_xquery/org/apache/xmlbeans/impl/xpath/saxon/XBeansXPath.java
===================================================================
--- src/xpath_xquery/org/apache/xmlbeans/impl/xpath/saxon/XBeansXPath.java      
(revision 465816)
+++ src/xpath_xquery/org/apache/xmlbeans/impl/xpath/saxon/XBeansXPath.java      
(working copy)
@@ -18,12 +18,16 @@
 import org.apache.xmlbeans.impl.store.SaxonXBeansDelegate;
 import org.w3c.dom.Node;
 
+import java.util.ArrayList;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
 import javax.xml.transform.TransformerException;
 
 import net.sf.saxon.Configuration;
+import net.sf.saxon.dom.NodeOverNodeInfo;
+import net.sf.saxon.om.NodeInfo;
 import net.sf.saxon.sxpath.XPathEvaluator;
 import net.sf.saxon.sxpath.XPathExpression;
 import net.sf.saxon.trans.Variable;
@@ -101,7 +105,28 @@
             thisVar.setValue(rootNode);
 
             XPathExpression exp = xpe.createExpression(_queryExpr);
-            return exp.evaluate(rootNode);
+
+            //return exp.evaluate(rootNode);
+
+           // After 8.3(?) Saxon nodes no longer implement Dom.
+           // The client needs saxon8-dom.jar, and the code needs
+            // this NodeOverNodeInfo Dom wrapper doohickey
+           List domNodesOrSimple = new ArrayList();
+            List saxonNodes = exp.evaluate(rootNode);
+           for(Iterator it = saxonNodes.iterator(); it.hasNext(); ) 
+           {
+               Object o = it.next();
+               if(o instanceof NodeInfo) 
+               {
+                  Node n = NodeOverNodeInfo.wrap((NodeInfo)o);
+                  domNodesOrSimple.add(n);
+               }
+               else
+               {
+                   domNodesOrSimple.add(o);
+               }
+           }
+            return domNodesOrSimple;
         }
         catch (TransformerException e)
         {
Index: src/xpath_xquery/org/apache/xmlbeans/impl/xquery/saxon/XBeansXQuery.java
===================================================================
--- src/xpath_xquery/org/apache/xmlbeans/impl/xquery/saxon/XBeansXQuery.java    
(revision 465816)
+++ src/xpath_xquery/org/apache/xmlbeans/impl/xquery/saxon/XBeansXQuery.java    
(working copy)
@@ -16,6 +16,8 @@
 package org.apache.xmlbeans.impl.xquery.saxon;
 
 import net.sf.saxon.Configuration;
+import net.sf.saxon.dom.NodeOverNodeInfo;
+import net.sf.saxon.om.NodeInfo;
 import net.sf.saxon.query.DynamicQueryContext;
 import net.sf.saxon.query.StaticQueryContext;
 import net.sf.saxon.query.XQueryExpression;
@@ -26,9 +28,10 @@
 
 import javax.xml.transform.dom.DOMSource;
 import javax.xml.transform.TransformerException;
+import java.util.ArrayList;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
-import java.util.Iterator;
 
 
 public class XBeansXQuery
@@ -75,7 +78,7 @@
             dynamicContext.setContextNode(_stcContext.
                     buildDocument(new DOMSource(context_node)));
             dynamicContext.setParameter(_contextVar,
-                    dynamicContext.getContextNode());
+                    dynamicContext.getContextItem());
             // Set the other variables
             if (variableBindings != null)
                 for (Iterator it = variableBindings.entrySet().iterator();
@@ -95,7 +98,25 @@
                         entry.getValue());
                 }
 
-            return _xquery.evaluate(dynamicContext);
+           // After 8.3(?) Saxon nodes no longer implement Dom.
+           // The client needs saxon8-dom.jar, and the code needs
+            // this NodeOverNodeInfo Dom wrapper doohickey
+           List domNodesOrSimple = new ArrayList();
+            List saxonNodes = _xquery.evaluate(dynamicContext);
+           for(Iterator it = saxonNodes.iterator(); it.hasNext(); ) 
+           {
+               Object o = it.next();
+               if(o instanceof NodeInfo) 
+               {
+                  Node n = NodeOverNodeInfo.wrap((NodeInfo)o);
+                  domNodesOrSimple.add(n);
+               }
+               else
+               {
+                   domNodesOrSimple.add(o);
+               }
+           }
+            return domNodesOrSimple;
         }
         catch (TransformerException e) {
             throw new RuntimeException(" Error binding " + _contextVar, e);
Index: build.xml
===================================================================
--- build.xml   (revision 465816)
+++ build.xml   (working copy)
@@ -53,9 +53,6 @@
     <target name="clean.jars" description="Delete any downloaded jars and 
accompanying licenses">
         <delete>
             <fileset dir="external/lib">
-                <include name="saxonb8-6-1.zip"/>
-                <include name="saxonb8-2.zip"/>
-                <include name="saxonb8-1.zip"/>
                 <include name="jsr173_1.0_api_bundle.jar"/>
                 <include name="jsr173_1.0_api.jar"/>
                 <include name="saxon8.jar"/>
@@ -84,9 +81,11 @@
     <property environment="env"/>
     <target name="saxon.find1" if="env.XMLBEANS_EXTERNALS">
       <property name="saxon_jar" value="${env.XMLBEANS_EXTERNALS}/saxon8.jar"/>
+      <property name="saxon_dom_jar" 
value="${env.XMLBEANS_EXTERNALS}/saxon8-dom.jar"/>
     </target>
     <target name="saxon.find2">
       <property name="saxon_jar" value="build/lib/saxon8.jar"/>
+      <property name="saxon_dom_jar" value="build/lib/saxon8-dom.jar"/>
     </target>
 
     <target name="check.saxon8.jar" depends="saxon.find1,saxon.find2">
@@ -100,24 +99,24 @@
 
     <target name="saxon8.jar" depends="check.saxon8.jar, dirs"
         unless="saxon8.jar.exists">
+        
        <!-- other saxon urls
                http://voxel.dl.sourceforge.net/sourceforge/saxon/saxonb8-1.zip
+                
http://superb-west.dl.sourceforge.net/sourceforge/saxon/saxonb8-8j.zip
        -->
-        <get dest="external/lib/saxonb8-6-1.zip"
-           
src="http://easynews.dl.sourceforge.net/sourceforge/saxon/saxonb8-6-1.zip";
+        <get dest="external/lib/saxonb8-8j.zip"
+           
src="http://superb-west.dl.sourceforge.net/sourceforge/saxon/saxonb8-8j.zip";
             verbose="true" usetimestamp="true" ignoreerrors="true"/>
-        <unzip src="external/lib/saxonb8-6-1.zip" dest="external/lib/">
+        <unzip src="external/lib/saxonb8-8j.zip" dest="external/lib/">
             <patternset>
                 <include name="saxon8.jar"/>
                 <include name="saxon8-dom.jar"/>
             </patternset>
         </unzip>
-        
+
         <copy file="external/lib/saxon8.jar" tofile="build/lib/saxon8.jar"/>
+        <copy file="external/lib/saxon8-dom.jar" 
tofile="build/lib/saxon8-dom.jar"/>
         
-        <!-- saxon8-dom.jar is used to register DOMObjectModel for use in 
-             xpath/xquery checkintest  -->
-        <copy file="external/lib/saxon8-dom.jar" 
tofile="build/lib/saxon8-dom.jar"/>
     </target>
 
     <target name="jsr173-bundle.downloaded">
@@ -937,6 +936,7 @@
                 <pathelement location="build/classes/xmlpublic"/>
                 <pathelement location="build/classes/store"/>
                 <pathelement location="${saxon_jar}"/>
+                <pathelement location="${saxon_dom_jar}"/>
             </classpath>
         </javac>
     </target>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to