Author: mukulg
Date: Sun Jun 16 03:51:58 2013
New Revision: 1493456

URL: http://svn.apache.org/r1493456
Log:
committing fix for jira issue XERCESJ-1615

Modified:
    
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/msg/XMLSchemaMessages.properties
    
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDAbstractTraverser.java

Modified: 
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/msg/XMLSchemaMessages.properties
URL: 
http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/msg/XMLSchemaMessages.properties?rev=1493456&r1=1493455&r2=1493456&view=diff
==============================================================================
--- 
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/msg/XMLSchemaMessages.properties
 (original)
+++ 
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/msg/XMLSchemaMessages.properties
 Sun Jun 16 03:51:58 2013
@@ -137,6 +137,7 @@
         src-ct.4 = src-ct.4: Complex Type Definition Representation Error for 
type ''{0}''. The intersection of wildcards is not expressible.
         src-ct.5 = src-ct.5: Complex Type Definition Representation Error for 
type ''{0}''. The union of wildcards is not expressible.
         src-ct.6 = src-ct.5: Complex Type Definition Representation Error for 
type ''{0}''. If <openContent> is present and the actual value of its mode 
[attribute] is not 'none', then there must be an <any> among the [children] of 
<openContent>.
+        src-ct.7 = src-ct.7: Attribute group ''{0}'' is declared more than 
once within a complex type definition ''{1}''.
         src-ct11.3 = src-ct11.3: Complex Type Definition Representation Error 
for type ''{0}''. If <openContent> is present and has mode = 'none', then there 
must not be an <any> among the [children] of <openContent>.
         src-ct11.4 = src-ct11.4: Complex Type Definition Representation Error 
for type ''{0}''. If the <complexContent> alternative is chosen and the 'mixed' 
attribute is present on both <complexType> and <complexContent>, then the 
actual values of those attributes must be the same.
         src-element.1 = src-element.1: The properties ''default'' and 
''fixed'' cannot both be present in element declaration ''{0}''. Use only one 
of them.
@@ -372,4 +373,4 @@
         jaxp12-schema-source-type.1 = The 
''http://java.sun.com/xml/jaxp/properties/schemaSource'' property cannot have a 
value of type ''{0}''. Possible types of the value supported are String, File, 
InputStream, InputSource or an array of these types.
         jaxp12-schema-source-type.2 = The 
''http://java.sun.com/xml/jaxp/properties/schemaSource'' property cannot have 
an array value of type ''{0}''. Possible types of the array supported are 
Object, String, File, InputStream and InputSource.
         jaxp12-schema-source-ns = When using an array of Objects as the value 
of the 'http://java.sun.com/xml/jaxp/properties/schemaSource' property, it is 
illegal to have two schemas that share the same target namespace.
-        
+

Modified: 
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDAbstractTraverser.java
URL: 
http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDAbstractTraverser.java?rev=1493456&r1=1493455&r2=1493456&view=diff
==============================================================================
--- 
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDAbstractTraverser.java
 (original)
+++ 
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDAbstractTraverser.java
 Sun Jun 16 03:51:58 2013
@@ -17,7 +17,11 @@
 
 package org.apache.xerces.impl.xs.traversers;
 
+import java.util.HashMap;
+import java.util.Iterator;
 import java.util.Locale;
+import java.util.Map;
+import java.util.Set;
 import java.util.Vector;
 
 import org.apache.xerces.impl.Constants;
@@ -37,8 +41,8 @@ import org.apache.xerces.impl.xs.XSWildc
 import org.apache.xerces.impl.xs.assertion.Test;
 import org.apache.xerces.impl.xs.assertion.XSAssertImpl;
 import org.apache.xerces.impl.xs.util.XInt;
-import org.apache.xerces.impl.xs.util.XSObjectListImpl;
 import org.apache.xerces.impl.xs.util.XS11TypeHelper;
+import org.apache.xerces.impl.xs.util.XSObjectListImpl;
 import org.apache.xerces.util.DOMUtil;
 import org.apache.xerces.util.NamespaceSupport;
 import org.apache.xerces.util.SymbolTable;
@@ -789,6 +793,7 @@ abstract class XSDAbstractTraverser {
         XSAttributeUseImpl tempAttrUse = null;
         XSAttributeUse otherUse = null;
         String childName;
+        Map attrGroupCounts = new HashMap();
         
         for (child=firstAttr; child!=null; 
child=DOMUtil.getNextSiblingElement(child)) {
             childName = DOMUtil.getLocalName(child);
@@ -826,6 +831,7 @@ abstract class XSDAbstractTraverser {
                 //REVISIT: do we need to save some state at this point??
                 tempAttrGrp = 
fSchemaHandler.fAttributeGroupTraverser.traverseLocal(
                         child, schemaDoc, grammar);
+                setAttributeGroupCount(attrGroupCounts, tempAttrGrp.getName(), 
tempAttrGrp.getNamespace());
                 if(tempAttrGrp == null ) continue;
                 XSObjectList attrUseS = tempAttrGrp.getAttributeUses();
                 XSAttributeUseImpl oneAttrUse;
@@ -877,6 +883,16 @@ abstract class XSDAbstractTraverser {
                 break;
         } // for
         
+        // check if any <attributeGroup> QName occurs more than once. display 
a warning for each such occurrence.
+        Set keySet = attrGroupCounts.keySet();
+        for (Iterator iter = keySet.iterator(); iter.hasNext();) {
+            QName qname = (QName)iter.next();
+            Integer count = (Integer)attrGroupCounts.get(qname);
+            if (count.intValue() > 1) {
+                reportSchemaWarning("src-ct.7", new Object[]{qname.localpart, 
enclosingParent.getName()}, (Element)firstAttr.getParentNode()); 
+            }
+        }
+        
         if (child != null) {
             childName = DOMUtil.getLocalName(child);
             if (childName.equals(SchemaSymbols.ELT_ANYATTRIBUTE)) {
@@ -903,11 +919,29 @@ abstract class XSDAbstractTraverser {
         return child;
         
     }
-    
+
+    /*
+     * Store the count of <attributeGroup> keyed by its QName, encountered 
within a complex type definition.
+     */
+    private void setAttributeGroupCount(Map attrGroupCounts, String name, 
String namespace) {
+       QName qName = new QName(null, name, name, namespace);
+       if (attrGroupCounts.containsKey(qName)) {
+           Integer count =  (Integer)attrGroupCounts.get(qName);
+           attrGroupCounts.put(qName, new Integer(count.intValue() + 1));  
+       }
+       else {
+           attrGroupCounts.put(qName, new Integer(1));  
+       }
+    }
+
     void reportSchemaError (String key, Object[] args, Element ele) {
         fSchemaHandler.reportSchemaError(key, args, ele);
     }
     
+    void reportSchemaWarning (String key, Object[] args, Element ele) {
+        fSchemaHandler.reportSchemaWarning(key, args, ele);
+    }
+    
     /**
      * Element/Attribute traversers call this method to check whether
      * the type is NOTATION without enumeration facet



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

Reply via email to