Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@yokolet
Created January 22, 2015 15:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yokolet/27b0c90caaefb61c3dd0 to your computer and use it in GitHub Desktop.
Save yokolet/27b0c90caaefb61c3dd0 to your computer and use it in GitHub Desktop.
Makes XPath faster on some JDK imples
private JAXPExtensionsProvider getProviderInstance() throws ClassNotFoundException, IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException {
Class<?> clazz = Class.forName("com.sun.org.apache.xpath.internal.jaxp.JAXPExtensionsProvider");
Constructor[] constructors = clazz.getDeclaredConstructors();
for (int i = 0; i < constructors.length; i++) {
Class[] parameterTypes = constructors[i].getParameterTypes();
if (parameterTypes.length == 2) {
return (JAXPExtensionsProvider) constructors[i].newInstance(functionResolver, false);
} else if (parameterTypes.length == 1) {
return (JAXPExtensionsProvider) constructors[i].newInstance(functionResolver);
}
}
return null;
}
....
Node doc = node.getNode().getOwnerDocument();
if (doc == null) {
doc = node.getNode();
}
xpathSupport = (XPathContext) doc.getUserData(XPATH_CONTEXT);
if (xpathSupport == null) {
JAXPExtensionsProvider jep = getProviderInstance();
xpathSupport = new XPathContext(jep);
xpathSupport.setVarStack(new JAXPVariableStack(variableResolver));
doc.setUserData(XPATH_CONTEXT, xpathSupport, null);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment