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: [email protected]
For additional commands, e-mail: [email protected]