Hi,

Please find attached patch for XSDKeyrefTraverser. 
1. Checks for circular references.
2. Reports error if keyref refers to an undeclared key.

Cheers,
Rahul.

Sun Microsystems, Inc.
Index: XSDKeyrefTraverser.java
===================================================================
RCS file: 
/home/cvspublic/xml-xerces/java/src/org/apache/xerces/impl/v2/XSDKeyrefTraverser.java,v
retrieving revision 1.8
diff -u -w -r1.8 XSDKeyrefTraverser.java
--- XSDKeyrefTraverser.java     2001/10/17 18:41:33     1.8
+++ XSDKeyrefTraverser.java     2001/10/24 09:51:27
@@ -98,11 +98,21 @@
             fAttrChecker.returnAttrArray(attrValues, schemaDoc);
             return;
         }
+        
+        if ( krName.equals(kName.localpart) &&
+             schemaDoc.fTargetNamespace != null &&
+             kName.uri != null &&
+             schemaDoc.fTargetNamespace.equals(kName.uri) ) {
+            reportGenericSchemaError("circular reference not allowed in keyrefs");
+            //return this array back to pool
+            fAttrChecker.returnAttrArray(attrValues, schemaDoc);
+            return;
+        }
+        
         UniqueOrKey key = (UniqueOrKey)fSchemaHandler.getGlobalDecl(schemaDoc, 
XSDHandler.IDENTITYCONSTRAINT_TYPE, kName);
 
         if(key == null) {
-            // reportSchemaError(SchemaMessageProvider.KeyRefReferNotFound,
-                              // new Object[]{krName,kName});
+            reportSchemaError("KeyRefReferNotFound", new Object[]{krName,kName});
             fAttrChecker.returnAttrArray(attrValues, schemaDoc);
             return;
         }

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to