You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ki...@apache.org on 2019/01/18 22:44:58 UTC

svn commit: r1851653 - in /xmlbeans/trunk: CHANGES.txt src/store/org/apache/xmlbeans/impl/store/Query.java src/store/org/apache/xmlbeans/impl/store/QueryDelegate.java src/xpath/ src/xpath_xquery/org/apache/xmlbeans/impl/xquery/saxon/XBeansXQuery.java

Author: kiwiwings
Date: Fri Jan 18 22:44:58 2019
New Revision: 1851653

URL: http://svn.apache.org/viewvc?rev=1851653&view=rev
Log:
XMLBEANS-530: Allow namespaces of XmlOptions to be passed to the XQuery engine

Removed:
    xmlbeans/trunk/src/xpath/
Modified:
    xmlbeans/trunk/CHANGES.txt
    xmlbeans/trunk/src/store/org/apache/xmlbeans/impl/store/Query.java
    xmlbeans/trunk/src/store/org/apache/xmlbeans/impl/store/QueryDelegate.java
    xmlbeans/trunk/src/xpath_xquery/org/apache/xmlbeans/impl/xquery/saxon/XBeansXQuery.java

Modified: xmlbeans/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/xmlbeans/trunk/CHANGES.txt?rev=1851653&r1=1851652&r2=1851653&view=diff
==============================================================================
--- xmlbeans/trunk/CHANGES.txt (original)
+++ xmlbeans/trunk/CHANGES.txt Fri Jan 18 22:44:58 2019
@@ -1,5 +1,7 @@
 Changes in V3.0.3 since V3.0.2
 
+* XMLBEANS-530: Allow namespaces of XmlOptions to be passed to the XQuery engine
+* XMLBEANS-529: Format xmlobjects to the correct string representation on XPath access
 * XMLBEANS-528: Allow document locator to be set after initialization
 * XMLBEANS-527: Rename shell script directory, to align on typical directory layout
 

Modified: xmlbeans/trunk/src/store/org/apache/xmlbeans/impl/store/Query.java
URL: http://svn.apache.org/viewvc/xmlbeans/trunk/src/store/org/apache/xmlbeans/impl/store/Query.java?rev=1851653&r1=1851652&r2=1851653&view=diff
==============================================================================
--- xmlbeans/trunk/src/store/org/apache/xmlbeans/impl/store/Query.java (original)
+++ xmlbeans/trunk/src/store/org/apache/xmlbeans/impl/store/Query.java Fri Jan 18 22:44:58 2019
@@ -169,7 +169,7 @@ public abstract class Query
         String delIntfName = 
             options.hasOption(QUERY_DELEGATE_INTERFACE) ? 
                 (String)options.get(QUERY_DELEGATE_INTERFACE) : _delIntfName;
-        query = DelegateQueryImpl.createDelegateCompiledQuery(delIntfName, queryExpr, currentVar, boundaryVal);
+        query = DelegateQueryImpl.createDelegateCompiledQuery(delIntfName, queryExpr, currentVar, boundaryVal, options);
 
         if (query != null)
         {
@@ -320,15 +320,16 @@ public abstract class Query
             _xqueryImpl = xqueryImpl;
         }
 
-        public static Query createDelegateCompiledQuery(String delIntfName,
-                                                        String queryExpr,
-                                                        String currentVar,
-                                                        int boundary)
+        static Query createDelegateCompiledQuery(String delIntfName,
+                                                 String queryExpr,
+                                                 String currentVar,
+                                                 int boundary,
+                                                 XmlOptions xmlOptions)
         {
             assert !(currentVar.startsWith(".") || currentVar.startsWith(".."));
             QueryDelegate.QueryInterface impl =
                 QueryDelegate.createInstance(delIntfName, queryExpr,
-                                             currentVar, boundary);
+                                             currentVar, boundary, xmlOptions);
             if (impl == null)
                 return null;
 
@@ -502,13 +503,13 @@ public abstract class Query
             private void loadNodeHelper(Locale locale, Node node, Locale.LoadContext context)
             {
                 if (node.getNodeType() == Node.ATTRIBUTE_NODE) {
-                    QName attName = new QName(node.getNamespaceURI(),
+                        QName attName = new QName(node.getNamespaceURI(),
                             node.getLocalName(),
                             node.getPrefix());
-                    context.attr(attName, node.getNodeValue());
-                }
+                        context.attr(attName, node.getNodeValue());
+                        }
                 else
-                    locale.loadNode(node, context);
+                        locale.loadNode(node, context);
 
             }
 

Modified: xmlbeans/trunk/src/store/org/apache/xmlbeans/impl/store/QueryDelegate.java
URL: http://svn.apache.org/viewvc/xmlbeans/trunk/src/store/org/apache/xmlbeans/impl/store/QueryDelegate.java?rev=1851653&r1=1851652&r2=1851653&view=diff
==============================================================================
--- xmlbeans/trunk/src/store/org/apache/xmlbeans/impl/store/QueryDelegate.java (original)
+++ xmlbeans/trunk/src/store/org/apache/xmlbeans/impl/store/QueryDelegate.java Fri Jan 18 22:44:58 2019
@@ -14,76 +14,63 @@
  */
 package org.apache.xmlbeans.impl.store;
 
+import org.apache.xmlbeans.XmlOptions;
+
 import java.util.List;
 import java.util.Map;
 import java.util.HashMap;
 import java.lang.reflect.Constructor;
 
-public final class QueryDelegate
-{
-    private static HashMap _constructors = new HashMap();
+public final class QueryDelegate {
+    private static final Map<String, Constructor<? extends QueryInterface>> _constructors =
+        new HashMap<String, Constructor<? extends QueryInterface>>();
 
-    private QueryDelegate()
-    {}
+    private QueryDelegate() {
+    }
 
-    private static synchronized void init(String implClassName)
-    {
+    private static synchronized void init(String implClassName) {
         // default to Saxon
         if (implClassName == null)
             implClassName = "org.apache.xmlbeans.impl.xquery.saxon.XBeansXQuery";
-        Class queryInterfaceImpl = null;
+        Class<? extends QueryInterface> queryInterfaceImpl = null;
         boolean engineAvailable = true;
-        try
-        {
-            queryInterfaceImpl = Class.forName(implClassName);
-        }
-        catch (ClassNotFoundException e)
-        {
+        try {
+            //noinspection unchecked
+            queryInterfaceImpl = (Class<? extends QueryInterface>) Class.forName(implClassName);
+        } catch (ClassNotFoundException e) {
             engineAvailable = false;
-        }
-        catch (NoClassDefFoundError e)
-        {
+        } catch (NoClassDefFoundError e) {
             engineAvailable = false;
         }
 
-        if (engineAvailable)
-        {
-            try
-            {
-                Constructor constructor = queryInterfaceImpl.getConstructor(
-                    new Class[] {String.class, String.class, Integer.class});
+        if (engineAvailable) {
+            try {
+                Constructor<? extends QueryInterface> constructor = queryInterfaceImpl.getConstructor(
+                    String.class, String.class, Integer.class, XmlOptions.class);
                 _constructors.put(implClassName, constructor);
-            }
-            catch (Exception e)
-            {
+            } catch (Exception e) {
                 throw new RuntimeException(e);
             }
         }
     }
 
     public static synchronized QueryInterface createInstance(String implClassName,
-            String query, String contextVar, int boundary)
-    {
+         String query, String contextVar, int boundary, XmlOptions xmlOptions) {
         if (_constructors.get(implClassName) == null)
             init(implClassName);
 
         if (_constructors.get(implClassName) == null)
             return null;
 
-        Constructor constructor = (Constructor)_constructors.get(implClassName);
-        try
-        {
-            return (QueryInterface)constructor.newInstance(
-                new Object[] {query, contextVar, new Integer(boundary)});
-        }
-        catch (Exception e)
-        {
+        Constructor<? extends QueryInterface> constructor = _constructors.get(implClassName);
+        try {
+            return constructor.newInstance(query, contextVar, boundary, xmlOptions);
+        } catch (Exception e) {
             throw new RuntimeException(e);
         }
     }
 
-    public static interface QueryInterface
-    {
-        public List execQuery(Object node, Map variableBindings);
+    public interface QueryInterface {
+        List execQuery(Object node, Map variableBindings);
     }
 }

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?rev=1851653&r1=1851652&r2=1851653&view=diff
==============================================================================
--- 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 Fri Jan 18 22:44:58 2019
@@ -23,6 +23,7 @@ import java.util.ListIterator;
 import javax.xml.transform.dom.DOMSource;
 import javax.xml.transform.TransformerException;
 
+import org.apache.xmlbeans.XmlOptions;
 import org.w3c.dom.Node;
 
 import net.sf.saxon.Configuration;
@@ -49,22 +50,29 @@ public class XBeansXQuery
      * @param contextVar The name of the context variable
      * @param boundary The offset of the end of the prolog
      */
-    public XBeansXQuery(String query, String contextVar, Integer boundary)
+    public XBeansXQuery(String query, String contextVar, Integer boundary, XmlOptions xmlOptions)
     {
         config = new Configuration();
         config.setDOMLevel(2);
         config.setTreeModel(net.sf.saxon.event.Builder.STANDARD_TREE);
         StaticQueryContext sc = new StaticQueryContext(config);
+        @SuppressWarnings("unchecked")
+        Map<String,String> nsMap = (Map<String,String>)xmlOptions.get(XmlOptions.LOAD_ADDITIONAL_NAMESPACES);
+        if (nsMap != null) {
+            for (Map.Entry<String,String> me : nsMap.entrySet()) {
+                sc.declareNamespace(me.getKey(), me.getValue());
+            }
+        }
+
         this.contextVar = contextVar;
-        int bdry = boundary.intValue();
         //Saxon requires external variables at the end of the prolog...
-        query = (bdry == 0) ?
+        query = (boundary == 0) ?
                 "declare variable $" +
                 contextVar + " external;" + query :
-                query.substring(0, bdry) +
+                query.substring(0, boundary) +
                 "declare variable $" +
                 contextVar + " external;" +
-                query.substring(bdry);
+                query.substring(boundary);
         try
         {
             xquery = sc.compileQuery(query);



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