Author: mukulg
Date: Sat Oct 22 08:42:24 2011
New Revision: 1187673

URL: http://svn.apache.org/viewvc?rev=1187673&view=rev
Log:
schema 1.1 commit:
made some fixes to XPath2 function fn:namespace-uri-from-QName (which is now 
able to look into the XPath2 dynamic context as well, to resolve namespace 
prefixes). ref Eclipse bug, 
https://bugs.eclipse.org/bugs/show_bug.cgi?id=361721. this behavior is needed 
by one of XSD 1.1 test suite tests. committing related Xerces code base changes 
as well.

Modified:
    
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/Constants.java
    
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/AbstractPsychoPathXPath2Impl.java
    
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/alternative/Test.java
    
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDTypeAlternativeTraverser.java
    
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/util/NamespaceSupport.java
    
xerces/java/branches/xml-schema-1.1-dev/tools/org.eclipse.wst.xml.xpath2.processor_1.2.0.jar

Modified: 
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/Constants.java
URL: 
http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/Constants.java?rev=1187673&r1=1187672&r2=1187673&view=diff
==============================================================================
--- 
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/Constants.java
 (original)
+++ 
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/Constants.java
 Sat Oct 22 08:42:24 2011
@@ -499,6 +499,7 @@ public final class Constants {
     
     // Constants to support PsychoPath XPath engine uses
     public final static String XPATH2_NAMESPACE_CONTEXT = "XPATH2_NS_CONTEXT";
+    public final static String IS_CTA_EVALUATOR = "CTA-EVALUATOR";
     
     // private
     

Modified: 
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/AbstractPsychoPathXPath2Impl.java
URL: 
http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/AbstractPsychoPathXPath2Impl.java?rev=1187673&r1=1187672&r2=1187673&view=diff
==============================================================================
--- 
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/AbstractPsychoPathXPath2Impl.java
 (original)
+++ 
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/AbstractPsychoPathXPath2Impl.java
 Sat Oct 22 08:42:24 2011
@@ -17,7 +17,9 @@
 
 package org.apache.xerces.impl.xs;
 
+import java.util.ArrayList;
 import java.util.Enumeration;
+import java.util.List;
 import java.util.Map;
 
 import javax.xml.XMLConstants;
@@ -62,6 +64,7 @@ public class AbstractPsychoPathXPath2Imp
     private DynamicContext fXpath2DynamicContext = null;
     private Document fDomDoc = null;
     
+    
     /*
      * Initialize the PsychoPath engine XPath 2.0 dynamic context. This also 
initializes the XPath engine's static
      * context, since dynamic context is inherited from the static context.
@@ -72,12 +75,24 @@ public class AbstractPsychoPathXPath2Imp
         
         // populate the 'PsychoPath XPath 2' static context, with namespace 
bindings derived from the XML Schema document
         NamespaceSupport xpath2NamespaceContext = (NamespaceSupport) 
psychoPathParams.get(Constants.XPATH2_NAMESPACE_CONTEXT);
-        Enumeration currPrefixes = xpath2NamespaceContext.getAllPrefixes();
-        while (currPrefixes.hasMoreElements()) {
-            String prefix = (String)currPrefixes.nextElement();
-            addNamespaceBindingToXPath2DynamicContext(prefix, 
xpath2NamespaceContext.getURI(prefix));
+        Boolean isCtaAvaluator = 
(Boolean)psychoPathParams.get(Constants.IS_CTA_EVALUATOR);
+        if (isCtaAvaluator != null && isCtaAvaluator.booleanValue()) {
+           // check if the call to this method came from CTA evaluator. needs 
special treatment for handling namespace context.
+           String[] namespaceBindingInfo = 
xpath2NamespaceContext.getNamespaceBindingInfo();
+           List prefixes = getPrefixesXS11CTA(namespaceBindingInfo);
+           for (int prfxIdx = 0; prfxIdx < prefixes.size(); prfxIdx++) {
+               String prefix = (String)prefixes.get(prfxIdx);
+               addNamespaceBindingToXPath2DynamicContext(prefix, 
getURIXS11CTA(prefix, namespaceBindingInfo)); 
+           }
+        }
+        else {
+            Enumeration currPrefixes = xpath2NamespaceContext.getAllPrefixes();
+            while (currPrefixes.hasMoreElements()) {
+                String prefix = (String)currPrefixes.nextElement();
+                addNamespaceBindingToXPath2DynamicContext(prefix, 
xpath2NamespaceContext.getURI(prefix));
+            }
+            
addNamespaceBindingToXPath2DynamicContext(XMLConstants.XML_NS_PREFIX, 
XMLConstants.XML_NS_URI);
         }
-        addNamespaceBindingToXPath2DynamicContext(XMLConstants.XML_NS_PREFIX, 
XMLConstants.XML_NS_URI);
         fXpath2DynamicContext.add_function_library(new FnFunctionLibrary());
         fXpath2DynamicContext.add_function_library(new XSCtrLibrary());        
         fDomDoc = document;
@@ -160,4 +175,31 @@ public class AbstractPsychoPathXPath2Imp
         
     } // compileXPathStr
     
+    
+    /*
+     * Get in-scope namespace prefixes. special handling for CTA.
+     */
+    private List getPrefixesXS11CTA(String[] namespaceBindingInfo) {
+        List prefixes = new ArrayList();
+        for (int prefixIdx = 0; prefixIdx < namespaceBindingInfo.length && 
namespaceBindingInfo[prefixIdx] != null; prefixIdx += 2) {
+            prefixes.add(namespaceBindingInfo[prefixIdx]);
+        } 
+        return prefixes;
+     } // getPrefixesXS11CTA
+    
+     
+     /*
+      * Get an URI for a particular in-scope namespace prefix. special 
handling for CTA. 
+      */
+     private String getURIXS11CTA(String prefix, String[] 
namespaceBindingInfo) {
+         String uri = null;
+         for (int prefixIdx = 0; prefixIdx < namespaceBindingInfo.length && 
namespaceBindingInfo[prefixIdx] != null; prefixIdx += 2) {
+            if (prefix.equals(namespaceBindingInfo[prefixIdx])) {
+                uri = namespaceBindingInfo[prefixIdx + 1];
+                break;
+            }
+         }
+         return uri;
+     } // getURIXS11CTA
+    
 } // class AbstractPsychoPathXPath2Impl

Modified: 
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/alternative/Test.java
URL: 
http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/alternative/Test.java?rev=1187673&r1=1187672&r2=1187673&view=diff
==============================================================================
--- 
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/alternative/Test.java
 (original)
+++ 
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/alternative/Test.java
 Sat Oct 22 08:42:24 2011
@@ -159,6 +159,7 @@ public class Test extends AbstractPsycho
             // construct parameter values for psychopath xpath processor
             Map psychoPathParams = new HashMap();
             psychoPathParams.put(Constants.XPATH2_NAMESPACE_CONTEXT, 
fXPath2NamespaceContext);
+            psychoPathParams.put(Constants.IS_CTA_EVALUATOR, Boolean.TRUE);
             DynamicContext xpath2DynamicContext = 
initXPath2DynamicContext(null, document, psychoPathParams);
             xpath2DynamicContext.set_base_uri(fTypeAlternative.getBaseURI()); 
// set base-uri property in XPath2 static context, to the URI of XSD document
             if (fTypeAlternative.fXPathDefaultNamespace != null) {

Modified: 
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDTypeAlternativeTraverser.java
URL: 
http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDTypeAlternativeTraverser.java?rev=1187673&r1=1187672&r2=1187673&view=diff
==============================================================================
--- 
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDTypeAlternativeTraverser.java
 (original)
+++ 
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDTypeAlternativeTraverser.java
 Sat Oct 22 08:42:24 2011
@@ -72,7 +72,6 @@ class XSDTypeAlternativeTraverser extend
     private static final XSSimpleType fErrorType;    
     private boolean fIsFullXPathModeForCTA;
     private String[] fctaXPathModes = {"cta-subset", "cta-full"};
-    private AbstractPsychoPathXPath2Impl abstractPsychoPathInst = new 
AbstractPsychoPathXPath2Impl();
     
     static {
         SchemaGrammar grammar = 
SchemaGrammar.getS4SGrammar(Constants.SCHEMA_VERSION_1_1);
@@ -207,6 +206,7 @@ class XSDTypeAlternativeTraverser extend
                     XPath xp = xpp.parse("boolean(" + testStr + ")");
                     Map psychoPathParams = new HashMap();
                     psychoPathParams.put(Constants.XPATH2_NAMESPACE_CONTEXT, 
schemaDoc.fNamespaceSupport);
+                    AbstractPsychoPathXPath2Impl abstractPsychoPathInst = new 
AbstractPsychoPathXPath2Impl();
                     StaticChecker name_check = new 
StaticNameResolver(abstractPsychoPathInst.initXPath2DynamicContext(null, null, 
psychoPathParams));
                     name_check.check(xp);
                     testExpr = new Test(xp, testStr, typeAlternative, 
schemaDoc.fNamespaceSupport);

Modified: 
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/util/NamespaceSupport.java
URL: 
http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/util/NamespaceSupport.java?rev=1187673&r1=1187672&r2=1187673&view=diff
==============================================================================
--- 
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/util/NamespaceSupport.java
 (original)
+++ 
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/util/NamespaceSupport.java
 Sat Oct 22 08:42:24 2011
@@ -286,6 +286,10 @@ public class NamespaceSupport implements
         return false;
     }
     
+    public String[] getNamespaceBindingInfo() {
+       return fNamespace;  
+    }
+    
     protected final class Prefixes implements Enumeration {
         private String[] prefixes;
         private int counter = 0;

Modified: 
xerces/java/branches/xml-schema-1.1-dev/tools/org.eclipse.wst.xml.xpath2.processor_1.2.0.jar
URL: 
http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/tools/org.eclipse.wst.xml.xpath2.processor_1.2.0.jar?rev=1187673&r1=1187672&r2=1187673&view=diff
==============================================================================
Binary files - no diff available.



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@xerces.apache.org
For additional commands, e-mail: commits-h...@xerces.apache.org

Reply via email to