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