svn commit: r1426377 - /xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDHandler.java

2012-12-27 Thread mukulg
Author: mukulg
Date: Fri Dec 28 01:37:22 2012
New Revision: 1426377

URL: http://svn.apache.org/viewvc?rev=1426377view=rev
Log:
committing fix for jira issue, XERCESJ-1599 along with few test cases.

Modified:

xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDHandler.java

Modified: 
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDHandler.java
URL: 
http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDHandler.java?rev=1426377r1=1426376r2=1426377view=diff
==
--- 
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDHandler.java
 (original)
+++ 
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDHandler.java
 Fri Dec 28 01:37:22 2012
@@ -391,6 +391,10 @@ public class XSDHandler {
 // objects that correspond to the documents being redefined.
 private Hashtable fRedefine2XSDMap = new Hashtable();
 
+// map between a schema document and the schema documents it is overriding.
+// schema documents are represented by XSDocumentInfo objects.
+private Hashtable fOverrideDependencyMap = new Hashtable();
+
 // map between redefine elements and the namespace support
 private Hashtable fRedefine2NSSupport = new Hashtable();
 
@@ -997,6 +1001,7 @@ public class XSDHandler {
 
 fDoc2XSDocumentMap.put(schemaRoot, currSchemaInfo);
 Vector dependencies = new Vector();
+Vector overrideDependencies = new Vector();
 Element rootNode = schemaRoot;
 
 Element newSchemaRoot = null;
@@ -1271,6 +1276,10 @@ public class XSDHandler {
 // rename the right things later!
 fRedefine2XSDMap.put(child, newSchemaInfo);
 }
+if (fSchemaVersion == Constants.SCHEMA_VERSION_1_1  
localName.equals(SchemaSymbols.ELT_OVERRIDE)  newSchemaInfo != null) {
+// record this override dependency
+overrideDependencies.addElement(newSchemaInfo);  
+}
 if (newSchemaRoot != null) {
 if (newSchemaInfo != null)
 dependencies.addElement(newSchemaInfo);
@@ -1278,6 +1287,9 @@ public class XSDHandler {
 }
 }
 
+if (fSchemaVersion == Constants.SCHEMA_VERSION_1_1) {
+   fOverrideDependencyMap.put(currSchemaInfo, overrideDependencies);
+}
 fDependencyMap.put(currSchemaInfo, dependencies);
 return currSchemaInfo;
 } // end constructTrees
@@ -3955,6 +3967,20 @@ public class XSDHandler {
 //XSDocumentInfo currSchema = 
(XSDocumentInfo)fDoc2XSDocumentMap.get(DOMUtil.getRoot(DOMUtil.getDocument(currElem)));
 XSDocumentInfo currSchema = fLocalElementDecl_schema[i];
 SchemaGrammar currGrammar = 
fGrammarBucket.getGrammar(currSchema.fTargetNamespace);
+XSDocumentInfo overridingSchema = 
getOverridingSchemaDocument(currSchema);
+if (overridingSchema != null) {
+// if this schema was overriden, augment the namespace 
bindings of the current schema with
+// namespace bindings from the overriding schema. REVISIT: 
doesn't prohibit namespace bindings of
+// current schema being used.
+SchemaNamespaceSupport namespaceSupport = 
overridingSchema.fNamespaceSupport;
+Enumeration prefixes = namespaceSupport.getAllPrefixes();
+while (prefixes.hasMoreElements()) {
+String prefix = (String)prefixes.nextElement();
+if 
(!(currSchema.fNamespaceSupport.containsPrefix(prefix))) {
+currSchema.fNamespaceSupport.declarePrefix(prefix, 
namespaceSupport.getURI(prefix));  
+}
+}
+}
 fElementTraverser.traverseLocal (fParticle[i], currElem, 
currSchema, currGrammar, fAllContext[i], fParent[i], 
fLocalElemNamespaceContext[i]);
 // If it's an empty particle, remove it from the containing 
component.
 if (fParticle[i].fType == XSParticleDecl.PARTICLE_EMPTY) {
@@ -3971,8 +3997,30 @@ public class XSDHandler {
 removeParticle(group, fParticle[i]);
 }
 }
-}
+} 
 
+/*
+ * Find if the current schema document is overridden by another schema 
document. If yes, then
+ * return the overriding schema document.
+ */
+private XSDocumentInfo getOverridingSchemaDocument(XSDocumentInfo 
currSchema) {
+
+XSDocumentInfo schemaDoc = null;
+
+Enumeration overridingSchemas = fOverrideDependencyMap.keys();
+while (overridingSchemas.hasMoreElements()) {
+XSDocumentInfo overridingSchema = 

svn commit: r1426378 - in /xerces/java/branches/xs-1.1-tests: data/jira_bugs/1599_1.xsd data/jira_bugs/1599_2.xsd data/jira_bugs/1599_3.xsd data/jira_bugs/1599_override.xsd src/org/apache/xerces/tests

2012-12-27 Thread mukulg
Author: mukulg
Date: Fri Dec 28 01:37:53 2012
New Revision: 1426378

URL: http://svn.apache.org/viewvc?rev=1426378view=rev
Log:
committing fix for jira issue, XERCESJ-1599 along with few test cases.

Added:
xerces/java/branches/xs-1.1-tests/data/jira_bugs/1599_1.xsd
xerces/java/branches/xs-1.1-tests/data/jira_bugs/1599_2.xsd
xerces/java/branches/xs-1.1-tests/data/jira_bugs/1599_3.xsd
xerces/java/branches/xs-1.1-tests/data/jira_bugs/1599_override.xsd
Modified:

xerces/java/branches/xs-1.1-tests/src/org/apache/xerces/tests/JiraBugsTests.java

Added: xerces/java/branches/xs-1.1-tests/data/jira_bugs/1599_1.xsd
URL: 
http://svn.apache.org/viewvc/xerces/java/branches/xs-1.1-tests/data/jira_bugs/1599_1.xsd?rev=1426378view=auto
==
--- xerces/java/branches/xs-1.1-tests/data/jira_bugs/1599_1.xsd (added)
+++ xerces/java/branches/xs-1.1-tests/data/jira_bugs/1599_1.xsd Fri Dec 28 
01:37:53 2012
@@ -0,0 +1,15 @@
+xs:schema xmlns:xs=http://www.w3.org/2001/XMLSchema; 
targetNamespace=schemaNS xmlns:ns=schemaNS
+xs:override schemaLocation=1599_override.xsd
+xs:element name=person
+xs:complexType
+xs:sequence
+xs:element name=name/
+xs:element name=email/
+xs:element ref=ns:link/
+/xs:sequence
+/xs:complexType
+/xs:element
+/xs:override
+
+xs:element name=link/
+/xs:schema
\ No newline at end of file

Added: xerces/java/branches/xs-1.1-tests/data/jira_bugs/1599_2.xsd
URL: 
http://svn.apache.org/viewvc/xerces/java/branches/xs-1.1-tests/data/jira_bugs/1599_2.xsd?rev=1426378view=auto
==
--- xerces/java/branches/xs-1.1-tests/data/jira_bugs/1599_2.xsd (added)
+++ xerces/java/branches/xs-1.1-tests/data/jira_bugs/1599_2.xsd Fri Dec 28 
01:37:53 2012
@@ -0,0 +1,15 @@
+xs:schema xmlns:xs=http://www.w3.org/2001/XMLSchema; 
targetNamespace=schemaNS
+xs:override schemaLocation=1599_override.xsd
+xs:element name=person
+xs:complexType
+xs:sequence
+xs:element name=name/
+xs:element name=email/
+xs:element ref=ns:link xmlns:ns=schemaNS/
+/xs:sequence
+/xs:complexType
+/xs:element
+/xs:override
+
+xs:element name=link/
+/xs:schema
\ No newline at end of file

Added: xerces/java/branches/xs-1.1-tests/data/jira_bugs/1599_3.xsd
URL: 
http://svn.apache.org/viewvc/xerces/java/branches/xs-1.1-tests/data/jira_bugs/1599_3.xsd?rev=1426378view=auto
==
--- xerces/java/branches/xs-1.1-tests/data/jira_bugs/1599_3.xsd (added)
+++ xerces/java/branches/xs-1.1-tests/data/jira_bugs/1599_3.xsd Fri Dec 28 
01:37:53 2012
@@ -0,0 +1,15 @@
+xs:schema xmlns:xs=http://www.w3.org/2001/XMLSchema; 
targetNamespace=schemaNS
+xs:override schemaLocation=1599_override.xsd
+xs:element name=person xmlns:ns=schemaNS
+xs:complexType
+xs:sequence
+xs:element name=name/
+xs:element name=email/
+xs:element ref=ns:link/
+/xs:sequence
+/xs:complexType
+/xs:element
+/xs:override
+
+xs:element name=link/
+/xs:schema
\ No newline at end of file

Added: xerces/java/branches/xs-1.1-tests/data/jira_bugs/1599_override.xsd
URL: 
http://svn.apache.org/viewvc/xerces/java/branches/xs-1.1-tests/data/jira_bugs/1599_override.xsd?rev=1426378view=auto
==
--- xerces/java/branches/xs-1.1-tests/data/jira_bugs/1599_override.xsd (added)
+++ xerces/java/branches/xs-1.1-tests/data/jira_bugs/1599_override.xsd Fri Dec 
28 01:37:53 2012
@@ -0,0 +1,11 @@
+?xml version=1.0 encoding=UTF-8?
+xs:schema xmlns:xs=http://www.w3.org/2001/XMLSchema; 
targetNamespace=schemaNS
+xs:element name=person
+xs:complexType
+xs:sequence
+xs:element name=name/
+xs:element name=email/
+/xs:sequence
+/xs:complexType
+/xs:element
+/xs:schema
\ No newline at end of file

Modified: 
xerces/java/branches/xs-1.1-tests/src/org/apache/xerces/tests/JiraBugsTests.java
URL: 
http://svn.apache.org/viewvc/xerces/java/branches/xs-1.1-tests/src/org/apache/xerces/tests/JiraBugsTests.java?rev=1426378r1=1426377r2=1426378view=diff
==
--- 
xerces/java/branches/xs-1.1-tests/src/org/apache/xerces/tests/JiraBugsTests.java
 (original)
+++ 
xerces/java/branches/xs-1.1-tests/src/org/apache/xerces/tests/JiraBugsTests.java
 Fri Dec 28 01:37:53 2012
@@ -312,5 +312,41 @@ public class JiraBugsTests extends Xerce
   assertTrue(false);