[prev in list] [next in list] [prev in thread] [next in thread]
List: xerces-cvs
Subject: cvs commit: xml-xerces/java/src/org/apache/xerces/impl/xs/traversers XSDAbstractTraverser.java
From: mrglavas () apache ! org
Date: 2004-10-28 21:06:19
Message-ID: 20041028210619.95497.qmail () minotaur ! apache ! org
[Download RAW message or body]
mrglavas 2004/10/28 14:06:19
Modified: java/src/org/apache/xerces/impl/xs/traversers
XSDAbstractTraverser.java
Log:
When an annotation has no <documentation> or <appinfo> children we were
completely losing the annotation component. This is because the schema DOM
stores the textual representation of the annotation on the first child of the
current parent. When <annotation> has element content, that's its first
child. When <annotation> has no element content, that's its parent's first
child. The latter is problematic because only if the annotation is the first
child of its parent will we find the text node there. We need to store the
string representation in a consistent place so it can be reliably retrieved,
perhaps as user data. In the mean time we look for a text child on
annotation if it has no element content. This works for a large number of
cases but not all of them.
Revision Changes Path
1.38 +37 -21 \
xml-xerces/java/src/org/apache/xerces/impl/xs/traversers/XSDAbstractTraverser.java
Index: XSDAbstractTraverser.java
===================================================================
RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/xs/traversers/XSDAbstractTraverser.java,v
retrieving revision 1.37
retrieving revision 1.38
diff -u -r1.37 -r1.38
--- XSDAbstractTraverser.java 6 Oct 2004 15:14:48 -0000 1.37
+++ XSDAbstractTraverser.java 28 Oct 2004 21:06:19 -0000 1.38
@@ -105,28 +105,44 @@
fAttrChecker.returnAttrArray(attrValues, schemaDoc);
String contents = null;
- for (Element child = DOMUtil.getFirstChildElement(annotationDecl);
- child != null;
- child = DOMUtil.getNextSiblingElement(child)) {
- String name = DOMUtil.getLocalName(child);
+ Element child = DOMUtil.getFirstChildElement(annotationDecl);
+ if (child != null) {
+ do {
+ String name = DOMUtil.getLocalName(child);
- // the only valid children of "annotation" are
- // "appinfo" and "documentation"
- if (!((name.equals(SchemaSymbols.ELT_APPINFO)) ||
- (name.equals(SchemaSymbols.ELT_DOCUMENTATION)))) {
- reportSchemaError("src-annotation", new Object[]{name}, child);
- } else { // the annotation, as we currently know it, is a Text child
- Node textContent = child.getFirstChild();
- if(textContent != null && textContent.getNodeType() == \
Node.TEXT_NODE) {
- contents = ((Text)textContent).getData();
+ // the only valid children of "annotation" are
+ // "appinfo" and "documentation"
+ if (!((name.equals(SchemaSymbols.ELT_APPINFO)) ||
+ (name.equals(SchemaSymbols.ELT_DOCUMENTATION)))) {
+ reportSchemaError("src-annotation", new Object[]{name}, \
child); + } else { // the annotation, as we currently know it, is a \
Text child + Node textContent = child.getFirstChild();
+ if(textContent != null && textContent.getNodeType() == \
Node.TEXT_NODE) { + contents = ((Text)textContent).getData();
+ }
}
- }
- // General Attribute Checking
- // There is no difference between global or local \
appinfo/documentation,
- // so we assume it's always global.
- attrValues = fAttrChecker.checkAttributes(child, true, schemaDoc);
- fAttrChecker.returnAttrArray(attrValues, schemaDoc);
+ // General Attribute Checking
+ // There is no difference between global or local \
appinfo/documentation, + // so we assume it's always global.
+ attrValues = fAttrChecker.checkAttributes(child, true, schemaDoc);
+ fAttrChecker.returnAttrArray(attrValues, schemaDoc);
+
+ child = DOMUtil.getNextSiblingElement(child);
+ }
+ while (child != null);
+ }
+ // REVISIT: When an annotation has no <documentation> or
+ // <appinfo> children the text child is stored on the first child of its
+ // parent. Only if the annotation is the first child will we find the
+ // text node there. See SchemaDOM. We need to store the string \
representation + // in a consistent place so it can be reliably retrieved, \
perhaps as + // user data. -- mrglavas
+ else {
+ Node textContent = annotationDecl.getFirstChild();
+ if(textContent != null && textContent.getNodeType() == Node.TEXT_NODE) \
{ + contents = ((Text)textContent).getData();
+ }
}
// if contents was null, must have been some kind of error;
// nothing to contribute to PSVI
---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-cvs-help@xml.apache.org
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic