[jboss-cvs] JBossAS SVN: r111107 - projects/specs/trunk/jboss-jstl-api_1.2_spec/src/main/java/org/apache/taglibs/standard/tag/common/xml.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Apr 6 00:39:04 EDT 2011


Author: jason.greene at jboss.com
Date: 2011-04-06 00:39:04 -0400 (Wed, 06 Apr 2011)
New Revision: 111107

Modified:
   projects/specs/trunk/jboss-jstl-api_1.2_spec/src/main/java/org/apache/taglibs/standard/tag/common/xml/JSTLXPathFactory.java
Log:
Remove dep on internal JDK class


Modified: projects/specs/trunk/jboss-jstl-api_1.2_spec/src/main/java/org/apache/taglibs/standard/tag/common/xml/JSTLXPathFactory.java
===================================================================
--- projects/specs/trunk/jboss-jstl-api_1.2_spec/src/main/java/org/apache/taglibs/standard/tag/common/xml/JSTLXPathFactory.java	2011-04-06 04:10:11 UTC (rev 111106)
+++ projects/specs/trunk/jboss-jstl-api_1.2_spec/src/main/java/org/apache/taglibs/standard/tag/common/xml/JSTLXPathFactory.java	2011-04-06 04:39:04 UTC (rev 111107)
@@ -58,7 +58,12 @@
 
 package org.apache.taglibs.standard.tag.common.xml;
 
-import com.sun.org.apache.xpath.internal.jaxp.XPathFactoryImpl;
+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;
 
 /**
  * This factory class is added to provide access to our own implementation
@@ -67,9 +72,74 @@
  * 
  * @author dhirup
  */
-public class JSTLXPathFactory extends XPathFactoryImpl {
-    
+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 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);
+    }
 }



More information about the jboss-cvs-commits mailing list