Author: sandygao
Date: Mon Nov 9 22:07:23 2009
New Revision: 834253
URL: http://svn.apache.org/viewvc?rev=834253&view=rev
Log:
A better error recovery approach when a complex type extension tries to define
duplicate attribute uses. Instead of throwing away everything and derive from
xs:anyType, just ignore the new duplicate attribute.
Modified:
xerces/java/trunk/src/org/apache/xerces/impl/xs/XSAttributeGroupDecl.java
xerces/java/trunk/src/org/apache/xerces/impl/xs/traversers/XSDComplexTypeTraverser.java
Modified:
xerces/java/trunk/src/org/apache/xerces/impl/xs/XSAttributeGroupDecl.java
URL:
http://svn.apache.org/viewvc/xerces/java/trunk/src/org/apache/xerces/impl/xs/XSAttributeGroupDecl.java?rev=834253&r1=834252&r2=834253&view=diff
==============================================================================
--- xerces/java/trunk/src/org/apache/xerces/impl/xs/XSAttributeGroupDecl.java
(original)
+++ xerces/java/trunk/src/org/apache/xerces/impl/xs/XSAttributeGroupDecl.java
Mon Nov 9 22:07:23 2009
@@ -91,6 +91,14 @@
return null;
}
+ public void replaceAttributeUse(XSAttributeUse oldUse, XSAttributeUseImpl
newUse) {
+ for (int i=0; i<fAttrUseNum; i++) {
+ if (fAttributeUses[i] == oldUse) {
+ fAttributeUses[i] = newUse;
+ }
+ }
+ }
+
public XSAttributeUse getAttributeUse(String namespace, String name) {
for (int i=0; i<fAttrUseNum; i++) {
if ( (fAttributeUses[i].fAttrDecl.fTargetNamespace == namespace) &&
Modified:
xerces/java/trunk/src/org/apache/xerces/impl/xs/traversers/XSDComplexTypeTraverser.java
URL:
http://svn.apache.org/viewvc/xerces/java/trunk/src/org/apache/xerces/impl/xs/traversers/XSDComplexTypeTraverser.java?rev=834253&r1=834252&r2=834253&view=diff
==============================================================================
---
xerces/java/trunk/src/org/apache/xerces/impl/xs/traversers/XSDComplexTypeTraverser.java
(original)
+++
xerces/java/trunk/src/org/apache/xerces/impl/xs/traversers/XSDComplexTypeTraverser.java
Mon Nov 9 22:07:23 2009
@@ -958,7 +958,6 @@
// This method merges attribute uses from the base, into the derived set.
- // The first duplicate attribute, if any, is returned.
// LM: may want to merge with attributeGroup processing.
private void mergeAttributes(XSAttributeGroupDecl fromAttrGrp,
XSAttributeGroupDecl toAttrGrp,
@@ -968,7 +967,7 @@
throws ComplexTypeRecoverableError {
XSObjectList attrUseS = fromAttrGrp.getAttributeUses();
- XSAttributeUseImpl duplicateAttrUse = null, oneAttrUse = null;
+ XSAttributeUseImpl oneAttrUse = null;
int attrCount = attrUseS.getLength();
for (int i=0; i<attrCount; i++) {
oneAttrUse = (XSAttributeUseImpl)attrUseS.item(i);
@@ -988,6 +987,9 @@
reportSchemaError("ct-props-correct.4",
new Object[]{typeName,
oneAttrUse.fAttrDecl.getName()},
elem);
+ // Recover by using the attribute use from the base type,
+ // to make the resulting schema "more valid".
+ toAttrGrp.replaceAttributeUse(existingAttrUse, oneAttrUse);
}
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]