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