aboutsummaryrefslogtreecommitdiff
path: root/src/com/sun/org/apache/xpath
diff options
context:
space:
mode:
authorjoehw <none@none>2013-10-24 13:43:02 -0700
committerjoehw <none@none>2013-10-24 13:43:02 -0700
commit1b41d7d687ca5d39968503dce4b435a53b0e83d0 (patch)
tree66aeeaa82500e28a84aa2f5948f2dbeb75b4e3e0 /src/com/sun/org/apache/xpath
parenta4668cb033445183a65b7d68f395c37a1964a88a (diff)
downloadjdk8u_jaxp-1b41d7d687ca5d39968503dce4b435a53b0e83d0.tar.gz
8004476: XSLT Extension Functions Don't Work in WebStart
Reviewed-by: dfuchs, lancea, alanb
Diffstat (limited to 'src/com/sun/org/apache/xpath')
-rw-r--r--src/com/sun/org/apache/xpath/internal/jaxp/JAXPExtensionsProvider.java8
-rw-r--r--src/com/sun/org/apache/xpath/internal/jaxp/XPathExpressionImpl.java26
-rw-r--r--src/com/sun/org/apache/xpath/internal/jaxp/XPathFactoryImpl.java27
-rw-r--r--src/com/sun/org/apache/xpath/internal/jaxp/XPathImpl.java13
4 files changed, 55 insertions, 19 deletions
diff --git a/src/com/sun/org/apache/xpath/internal/jaxp/JAXPExtensionsProvider.java b/src/com/sun/org/apache/xpath/internal/jaxp/JAXPExtensionsProvider.java
index 0eac5f0..fee057f 100644
--- a/src/com/sun/org/apache/xpath/internal/jaxp/JAXPExtensionsProvider.java
+++ b/src/com/sun/org/apache/xpath/internal/jaxp/JAXPExtensionsProvider.java
@@ -33,6 +33,7 @@ import com.sun.org.apache.xpath.internal.objects.XObject;
import com.sun.org.apache.xpath.internal.objects.XNodeSet;
import com.sun.org.apache.xpath.internal.res.XPATHErrorResources;
import com.sun.org.apache.xalan.internal.res.XSLMessages;
+import com.sun.org.apache.xalan.internal.utils.FeatureManager;
import com.sun.org.apache.xpath.internal.functions.FuncExtFunction;
import java.util.Vector;
@@ -54,9 +55,12 @@ public class JAXPExtensionsProvider implements ExtensionsProvider {
}
public JAXPExtensionsProvider(XPathFunctionResolver resolver,
- boolean featureSecureProcessing ) {
+ boolean featureSecureProcessing, FeatureManager featureManager ) {
this.resolver = resolver;
- this.extensionInvocationDisabled = featureSecureProcessing;
+ if (featureSecureProcessing &&
+ !featureManager.isFeatureEnabled(FeatureManager.Feature.ORACLE_ENABLE_EXTENSION_FUNCTION)) {
+ this.extensionInvocationDisabled = true;
+ }
}
/**
diff --git a/src/com/sun/org/apache/xpath/internal/jaxp/XPathExpressionImpl.java b/src/com/sun/org/apache/xpath/internal/jaxp/XPathExpressionImpl.java
index 2d7671e..925ce9c 100644
--- a/src/com/sun/org/apache/xpath/internal/jaxp/XPathExpressionImpl.java
+++ b/src/com/sun/org/apache/xpath/internal/jaxp/XPathExpressionImpl.java
@@ -30,6 +30,7 @@ import com.sun.org.apache.xml.internal.utils.PrefixResolver;
import com.sun.org.apache.xpath.internal.res.XPATHErrorResources;
import com.sun.org.apache.xalan.internal.res.XSLMessages;
import com.sun.org.apache.xalan.internal.utils.FactoryImpl;
+import com.sun.org.apache.xalan.internal.utils.FeatureManager;
import javax.xml.namespace.NamespaceContext;
import javax.xml.namespace.QName;
@@ -67,33 +68,36 @@ public class XPathExpressionImpl implements javax.xml.xpath.XPathExpression{
private boolean featureSecureProcessing = false;
private boolean useServicesMechanism = true;
+
+ private final FeatureManager featureManager;
+
/** Protected constructor to prevent direct instantiation; use compile()
* from the context.
*/
- protected XPathExpressionImpl() { };
+ protected XPathExpressionImpl() {
+ this(null, null, null, null,
+ false, true, new FeatureManager());
+ };
protected XPathExpressionImpl(com.sun.org.apache.xpath.internal.XPath xpath,
JAXPPrefixResolver prefixResolver,
XPathFunctionResolver functionResolver,
XPathVariableResolver variableResolver ) {
- this.xpath = xpath;
- this.prefixResolver = prefixResolver;
- this.functionResolver = functionResolver;
- this.variableResolver = variableResolver;
- this.featureSecureProcessing = false;
+ this(xpath, prefixResolver, functionResolver, variableResolver,
+ false, true, new FeatureManager());
};
protected XPathExpressionImpl(com.sun.org.apache.xpath.internal.XPath xpath,
- JAXPPrefixResolver prefixResolver,
- XPathFunctionResolver functionResolver,
- XPathVariableResolver variableResolver,
- boolean featureSecureProcessing, boolean useServicesMechanism ) {
+ JAXPPrefixResolver prefixResolver,XPathFunctionResolver functionResolver,
+ XPathVariableResolver variableResolver, boolean featureSecureProcessing,
+ boolean useServicesMechanism, FeatureManager featureManager ) {
this.xpath = xpath;
this.prefixResolver = prefixResolver;
this.functionResolver = functionResolver;
this.variableResolver = variableResolver;
this.featureSecureProcessing = featureSecureProcessing;
this.useServicesMechanism = useServicesMechanism;
+ this.featureManager = featureManager;
};
public void setXPath (com.sun.org.apache.xpath.internal.XPath xpath ) {
@@ -111,7 +115,7 @@ public class XPathExpressionImpl implements javax.xml.xpath.XPathExpression{
com.sun.org.apache.xpath.internal.XPathContext xpathSupport = null;
if ( functionResolver != null ) {
JAXPExtensionsProvider jep = new JAXPExtensionsProvider(
- functionResolver, featureSecureProcessing );
+ functionResolver, featureSecureProcessing, featureManager );
xpathSupport = new com.sun.org.apache.xpath.internal.XPathContext( jep );
} else {
xpathSupport = new com.sun.org.apache.xpath.internal.XPathContext();
diff --git a/src/com/sun/org/apache/xpath/internal/jaxp/XPathFactoryImpl.java b/src/com/sun/org/apache/xpath/internal/jaxp/XPathFactoryImpl.java
index 7159896..b050af4 100644
--- a/src/com/sun/org/apache/xpath/internal/jaxp/XPathFactoryImpl.java
+++ b/src/com/sun/org/apache/xpath/internal/jaxp/XPathFactoryImpl.java
@@ -24,6 +24,8 @@ package com.sun.org.apache.xpath.internal.jaxp;
import com.sun.org.apache.xalan.internal.XalanConstants;
import com.sun.org.apache.xpath.internal.res.XPATHErrorResources;
import com.sun.org.apache.xalan.internal.res.XSLMessages;
+import com.sun.org.apache.xalan.internal.utils.FeatureManager;
+import com.sun.org.apache.xalan.internal.utils.FeaturePropertyBase;
import javax.xml.XMLConstants;
import javax.xml.xpath.XPathFactory;
@@ -68,6 +70,8 @@ public class XPathFactoryImpl extends XPathFactory {
private boolean _useServicesMechanism = true;
+ private final FeatureManager _featureManager;
+
public XPathFactoryImpl() {
this(true);
}
@@ -77,9 +81,12 @@ public class XPathFactoryImpl extends XPathFactory {
}
public XPathFactoryImpl(boolean useServicesMechanism) {
+ _featureManager = new FeatureManager();
if (System.getSecurityManager() != null) {
_isSecureMode = true;
_isNotSecureProcessing = false;
+ _featureManager.setValue(FeatureManager.Feature.ORACLE_ENABLE_EXTENSION_FUNCTION,
+ FeaturePropertyBase.State.FSP, XalanConstants.FEATURE_FALSE);
}
this._useServicesMechanism = useServicesMechanism;
}
@@ -131,7 +138,8 @@ public class XPathFactoryImpl extends XPathFactory {
public javax.xml.xpath.XPath newXPath() {
return new com.sun.org.apache.xpath.internal.jaxp.XPathImpl(
xPathVariableResolver, xPathFunctionResolver,
- !_isNotSecureProcessing, _useServicesMechanism );
+ !_isNotSecureProcessing, _useServicesMechanism,
+ _featureManager );
}
/**
@@ -181,6 +189,10 @@ public class XPathFactoryImpl extends XPathFactory {
}
_isNotSecureProcessing = !value;
+ if (value && _featureManager != null) {
+ _featureManager.setValue(FeatureManager.Feature.ORACLE_ENABLE_EXTENSION_FUNCTION,
+ FeaturePropertyBase.State.FSP, XalanConstants.FEATURE_FALSE);
+ }
// all done processing feature
return;
@@ -192,6 +204,11 @@ public class XPathFactoryImpl extends XPathFactory {
return;
}
+ if (_featureManager != null &&
+ _featureManager.setValue(name, FeaturePropertyBase.State.APIPROPERTY, value)) {
+ return;
+ }
+
// unknown feature
String fmsg = XSLMessages.createXPATHMessage(
XPATHErrorResources.ER_FEATURE_UNKNOWN,
@@ -240,6 +257,14 @@ public class XPathFactoryImpl extends XPathFactory {
if (name.equals(XalanConstants.ORACLE_FEATURE_SERVICE_MECHANISM)) {
return _useServicesMechanism;
}
+
+ /** Check to see if the property is managed by the security manager **/
+ String propertyValue = (_featureManager != null) ?
+ _featureManager.getValueAsString(name) : null;
+ if (propertyValue != null) {
+ return _featureManager.isFeatureEnabled(name);
+ }
+
// unknown feature
String fmsg = XSLMessages.createXPATHMessage(
XPATHErrorResources.ER_GETTING_UNKNOWN_FEATURE,
diff --git a/src/com/sun/org/apache/xpath/internal/jaxp/XPathImpl.java b/src/com/sun/org/apache/xpath/internal/jaxp/XPathImpl.java
index 6b80825..af82f37 100644
--- a/src/com/sun/org/apache/xpath/internal/jaxp/XPathImpl.java
+++ b/src/com/sun/org/apache/xpath/internal/jaxp/XPathImpl.java
@@ -35,6 +35,7 @@ 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 com.sun.org.apache.xalan.internal.utils.FactoryImpl;
+import com.sun.org.apache.xalan.internal.utils.FeatureManager;
import org.w3c.dom.Node;
import org.w3c.dom.Document;
@@ -70,18 +71,20 @@ public class XPathImpl implements javax.xml.xpath.XPath {
// extensions function need to throw XPathFunctionException
private boolean featureSecureProcessing = false;
private boolean useServiceMechanism = true;
+ private final FeatureManager featureManager;
XPathImpl( XPathVariableResolver vr, XPathFunctionResolver fr ) {
- this.origVariableResolver = this.variableResolver = vr;
- this.origFunctionResolver = this.functionResolver = fr;
+ this(vr, fr, false, true, new FeatureManager());
}
XPathImpl( XPathVariableResolver vr, XPathFunctionResolver fr,
- boolean featureSecureProcessing, boolean useServiceMechanism ) {
+ boolean featureSecureProcessing, boolean useServiceMechanism,
+ FeatureManager featureManager) {
this.origVariableResolver = this.variableResolver = vr;
this.origFunctionResolver = this.functionResolver = fr;
this.featureSecureProcessing = featureSecureProcessing;
this.useServiceMechanism = useServiceMechanism;
+ this.featureManager = featureManager;
}
/**
@@ -190,7 +193,7 @@ public class XPathImpl implements javax.xml.xpath.XPath {
com.sun.org.apache.xpath.internal.XPathContext xpathSupport = null;
if ( functionResolver != null ) {
JAXPExtensionsProvider jep = new JAXPExtensionsProvider(
- functionResolver, featureSecureProcessing );
+ functionResolver, featureSecureProcessing, featureManager );
xpathSupport = new com.sun.org.apache.xpath.internal.XPathContext( jep );
} else {
xpathSupport = new com.sun.org.apache.xpath.internal.XPathContext();
@@ -391,7 +394,7 @@ public class XPathImpl implements javax.xml.xpath.XPath {
// Can have errorListener
XPathExpressionImpl ximpl = new XPathExpressionImpl (xpath,
prefixResolver, functionResolver, variableResolver,
- featureSecureProcessing, useServiceMechanism );
+ featureSecureProcessing, useServiceMechanism, featureManager );
return ximpl;
} catch ( javax.xml.transform.TransformerException te ) {
throw new XPathExpressionException ( te ) ;