Skip to content
This repository has been archived by the owner on May 24, 2019. It is now read-only.

Commit

Permalink
Switch from JDK intenerl deps to a dep on xalan's xpath impl.
Browse files Browse the repository at this point in the history
  • Loading branch information
n1hility committed Apr 6, 2011
1 parent 9f75d93 commit 49bbcf6
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 100 deletions.
5 changes: 5 additions & 0 deletions pom.xml
Expand Up @@ -46,6 +46,11 @@
<artifactId>jboss-jsp-api_2.2_spec</artifactId>
<version>1.0.0.Final</version>
</dependency>
<dependency>
<groupId>org.apache.xalan</groupId>
<artifactId>xalan</artifactId>
<version>2.7.1-1.jbossorg</version>
</dependency>
</dependencies>

</project>
Expand Up @@ -58,12 +58,7 @@

package org.apache.taglibs.standard.tag.common.xml;

import javax.xml.xpath.XPathFactory;
import javax.xml.xpath.XPathFactoryConfigurationException;
import javax.xml.xpath.XPathFunctionResolver;
import javax.xml.xpath.XPathVariableResolver;
import java.security.AccessController;
import java.security.PrivilegedAction;
import org.apache.xpath.jaxp.XPathFactoryImpl;

/**
* This factory class is added to provide access to our own implementation
Expand All @@ -72,74 +67,9 @@
*
* @author dhirup
*/
public class JSTLXPathFactory extends XPathFactory {

private XPathFactory actual;

public JSTLXPathFactory() {

ClassLoader old = getContextClassLoader();
try {
// Use the defining class loader
setContextClassLoader(JSTLXPathFactory.class.getClassLoader());
actual = XPathFactory.newInstance();
} finally {
setContextClassLoader(old);
}

if (actual == null)
throw new IllegalStateException("Could not load default XPathFactory");
}

private static ClassLoader getContextClassLoader() {
return (ClassLoader)
AccessController.doPrivileged(new PrivilegedAction() {
public Object run() {
ClassLoader cl = null;
try {
cl = Thread.currentThread().getContextClassLoader();
} catch (SecurityException eat) {
}
return cl;
}
});
}

private static void setContextClassLoader(ClassLoader cl) {
AccessController.doPrivileged(new PrivilegedAction() {
public Object run() {
ClassLoader cl = null;
try {
Thread.currentThread().setContextClassLoader(cl);
} catch (SecurityException eat) {
}

return null;
}
});
}

public class JSTLXPathFactory extends XPathFactoryImpl {

public javax.xml.xpath.XPath newXPath() {
return new org.apache.taglibs.standard.tag.common.xml.JSTLXPathImpl(null, null);
}

public boolean isObjectModelSupported(String objectModel) {
return actual.isObjectModelSupported(objectModel);
}

public void setFeature(String name, boolean value) throws XPathFactoryConfigurationException {
actual.setFeature(name, value);
}

public boolean getFeature(String name) throws XPathFactoryConfigurationException {
return actual.getFeature(name);
}

public void setXPathVariableResolver(XPathVariableResolver resolver) {
actual.setXPathVariableResolver(resolver);
}

public void setXPathFunctionResolver(XPathFunctionResolver resolver) {
actual.setXPathFunctionResolver(resolver);
}
}
}
Expand Up @@ -67,12 +67,12 @@
import javax.xml.xpath.XPathVariableResolver;
import javax.xml.xpath.XPathExpression;

import com.sun.org.apache.xml.internal.dtm.DTM;
import com.sun.org.apache.xpath.internal.*;
import com.sun.org.apache.xpath.internal.objects.XObject;
import com.sun.org.apache.xpath.internal.res.XPATHErrorResources;
import com.sun.org.apache.xalan.internal.res.XSLMessages;

import org.apache.xalan.res.XSLMessages;
import org.apache.xml.dtm.DTM;
import org.apache.xpath.jaxp.JAXPVariableStack;
import org.apache.xpath.objects.XNodeSet;
import org.apache.xpath.objects.XObject;
import org.apache.xpath.res.XPATHErrorResources;
import org.w3c.dom.Node;
import org.w3c.dom.DOMImplementation;
import org.w3c.dom.Document;
Expand All @@ -95,7 +95,7 @@
* method.
*
* Most of the implementation is exactly similar to what is already provided in
* com.sun.org.apache.xpath.internal.jaxp.XPathImpl.java
* org.apache.xpath.jaxp.XPathImpl.java
*/
public class JSTLXPathImpl implements javax.xml.xpath.XPath {

Expand All @@ -105,7 +105,7 @@ public class JSTLXPathImpl implements javax.xml.xpath.XPath {
private XPathVariableResolver origVariableResolver;
private XPathFunctionResolver origFunctionResolver;
private NamespaceContext namespaceContext=null;
private com.sun.org.apache.xpath.internal.jaxp.JAXPPrefixResolver prefixResolver;
private org.apache.xpath.jaxp.JAXPPrefixResolver prefixResolver;
// By default Extension Functions are allowed in XPath Expressions. If
// Secure Processing Feature is set on XPathFactory then the invocation of
// extensions function need to throw XPathFunctionException
Expand All @@ -130,9 +130,9 @@ public class JSTLXPathImpl implements javax.xml.xpath.XPath {
*/
public void setXPathVariableResolver(XPathVariableResolver resolver) {
if ( resolver == null ) {
String fmsg = XSLMessages.createXPATHMessage(
String fmsg = XSLMessages.createXPATHMessage(
XPATHErrorResources.ER_ARG_CANNOT_BE_NULL,
new Object[] {"XPathVariableResolver"} );
new Object[]{"XPathVariableResolver"});
throw new NullPointerException( fmsg );
}
this.variableResolver = resolver;
Expand Down Expand Up @@ -184,7 +184,7 @@ public void setNamespaceContext(NamespaceContext nsContext) {
throw new NullPointerException( fmsg );
}
this.namespaceContext = nsContext;
this.prefixResolver = new com.sun.org.apache.xpath.internal.jaxp.JAXPPrefixResolver ( nsContext );
this.prefixResolver = new org.apache.xpath.jaxp.JAXPPrefixResolver ( nsContext );
}

/**
Expand Down Expand Up @@ -235,21 +235,21 @@ private static Document getDummyDocument( ) {

private XObject eval(String expression, Object contextItem)
throws javax.xml.transform.TransformerException {
com.sun.org.apache.xpath.internal.XPath xpath = new com.sun.org.apache.xpath.internal.XPath( expression,
null, prefixResolver, com.sun.org.apache.xpath.internal.XPath.SELECT );
com.sun.org.apache.xpath.internal.XPathContext xpathSupport = null;
org.apache.xpath.XPath xpath = new org.apache.xpath.XPath( expression,
null, prefixResolver, org.apache.xpath.XPath.SELECT );
org.apache.xpath.XPathContext xpathSupport = null;
if ( functionResolver != null ) {
com.sun.org.apache.xpath.internal.jaxp.JAXPExtensionsProvider jep =
new com.sun.org.apache.xpath.internal.jaxp.JAXPExtensionsProvider(
org.apache.xpath.jaxp.JAXPExtensionsProvider jep =
new org.apache.xpath.jaxp.JAXPExtensionsProvider(
functionResolver, featureSecureProcessing );
xpathSupport = new com.sun.org.apache.xpath.internal.XPathContext( jep );
xpathSupport = new org.apache.xpath.XPathContext( jep );
} else {
xpathSupport = new com.sun.org.apache.xpath.internal.XPathContext();
xpathSupport = new org.apache.xpath.XPathContext();
}

XObject xobj = null;

xpathSupport.setVarStack(new com.sun.org.apache.xpath.internal.jaxp.JAXPVariableStack(variableResolver));
xpathSupport.setVarStack(new JAXPVariableStack(variableResolver));

// If item is null, then we will create a a Dummy contextNode
if ( contextItem instanceof Node ) {
Expand Down Expand Up @@ -377,7 +377,7 @@ private Object getResultAsType( XObject resultObject, QName returnType )
}
// JSTLXPathConstants.OBJECT
if ( returnType.equals( JSTLXPathConstants.OBJECT ) ) {
if (resultObject instanceof com.sun.org.apache.xpath.internal.objects.XNodeSet)
if (resultObject instanceof XNodeSet)
return resultObject.nodelist();
else
return resultObject.object();
Expand Down Expand Up @@ -422,7 +422,7 @@ public String evaluate(String expression, Object item)
/**
* <p>Compile an XPath expression for later evaluation.</p>
*
* <p>If <code>expression</code> contains any {@link XPathFunction}s,
* <p>If <code>expression</code> contains any {@link javax.xml.xpath.XPathFunction}s,
* they must be available via the {@link XPathFunctionResolver}.
* An {@link XPathExpressionException} will be thrown if the <code>XPathFunction</code>
* cannot be resovled with the <code>XPathFunctionResolver</code>.</p>
Expand All @@ -448,11 +448,11 @@ public XPathExpression compile(String expression)
return null;
/*
try {
com.sun.org.apache.xpath.internal.XPath xpath = new XPath (expression, null,
prefixResolver, com.sun.org.apache.xpath.internal.XPath.SELECT );
org.apache.xpath.XPath xpath = new XPath (expression, null,
prefixResolver, org.apache.xpath.XPath.SELECT );
// Can have errorListener
com.sun.org.apache.xpath.internal.jaxp.XPathExpressionImpl ximpl =
new com.sun.org.apache.xpath.internal.jaxp.XPathExpressionImpl (xpath,
org.apache.xpath.jaxp.XPathExpressionImpl ximpl =
new org.apache.xpath.jaxp.XPathExpressionImpl (xpath,
prefixResolver, functionResolver, variableResolver,
featureSecureProcessing );
return ximpl;
Expand Down Expand Up @@ -578,7 +578,7 @@ public String evaluate(String expression, InputSource source)
* <p>Reset this <code>XPath</code> to its original configuration.</p>
*
* <p><code>XPath</code> is reset to the same state as when it was created with
* {@link XPathFactory#newXPath()}.
* {@link javax.xml.xpath.XPathFactory#newXPath()}.
* <code>reset()</code> is designed to allow the reuse of existing <code>XPath</code>s
* thus saving resources associated with the creation of new <code>XPath</code>s.</p>
*
Expand Down

0 comments on commit 49bbcf6

Please sign in to comment.