elena 2004/01/23 12:05:46
Modified: java/src/org/apache/xerces/dom DOMNormalizer.java
java/src/org/apache/xerces/impl/msg DOMMessages.properties
Log:
Committing Neil Delima patch: http://nagoya.apache.org/bugzilla/show_bug.cgi?id=26385
Revision Changes Path
1.47 +122 -89 xml-xerces/java/src/org/apache/xerces/dom/DOMNormalizer.java
Index: DOMNormalizer.java
===================================================================
RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/dom/DOMNormalizer.java,v
retrieving revision 1.46
retrieving revision 1.47
diff -u -r1.46 -r1.47
--- DOMNormalizer.java 22 Jan 2004 18:35:19 -0000 1.46
+++ DOMNormalizer.java 23 Jan 2004 20:05:46 -0000 1.47
@@ -65,6 +65,7 @@
import org.apache.xerces.impl.Constants;
import org.apache.xerces.impl.RevalidationHandler;
import org.apache.xerces.impl.dv.XSSimpleType;
+import org.apache.xerces.impl.msg.XMLMessageFormatter;
import org.apache.xerces.xs.XSTypeDefinition;
import org.apache.xerces.impl.xs.util.SimpleLocator;
import org.apache.xerces.util.AugmentationsImpl;
@@ -88,6 +89,7 @@
import org.w3c.dom.Attr;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
import org.w3c.dom.Text;
import org.w3c.dom.ProcessingInstruction;
import org.apache.xerces.util.XML11Char;
@@ -193,6 +195,10 @@
// attribute value normalization
final XMLString fNormalizedValue = new XMLString(new char[16], 0, 0);
+ //Message formatter for messages from XMLMessages.properties emitted
+ //by the normalizer
+ XMLMessageFormatter fXMLMessageFormatter = new XMLMessageFormatter();
+
/**
* If the user stops the normalization process, this exception will be thrown.
*/
@@ -240,7 +246,7 @@
((XMLComponent) fValidationHandler).reset(fConfiguration);
}
- fErrorHandler = (DOMErrorHandler)
fConfiguration.getParameter("error-handler");
+ fErrorHandler = (DOMErrorHandler)
fConfiguration.getParameter(Constants.DOM_ERROR_HANDLER);
if (fValidationHandler != null) {
fValidationHandler.setDocumentHandler(this);
fValidationHandler.startDocument(
@@ -325,10 +331,12 @@
}
if (!wellformed){
if (fErrorHandler != null) {
- String msg = "Invalid XML Character in element " +
node.getNodeName() ;
- reportDOMError(msg,
- DOMError.SEVERITY_ERROR, null,
"wf-invalid-character");
-
+ String msg =
DOMMessageFormatter.formatMessage(
+ DOMMessageFormatter.DOM_DOMAIN,
+ "wf-invalid-character-in-node-name",
+ new Object[]{"Element",
node.getNodeName()});
+ reportDOMError(msg, DOMError.SEVERITY_ERROR, null,
+ "wf-invalid-character-in-node-name");
}
}
@@ -361,11 +369,13 @@
wellformed=CoreDocumentImpl.isXMLName(node.getNodeName() , fDocument.isXML11Version());
if (!wellformed){
if (fErrorHandler != null) {
- String msg = "Invalid XML Character in
element " + node.getNodeName() ;
- reportDOMError(msg,
- DOMError.SEVERITY_ERROR, null,
"wf-invalid-character");
+ String msg =
DOMMessageFormatter.formatMessage(
+
DOMMessageFormatter.DOM_DOMAIN,
+
"wf-invalid-character-in-node-name",
+ new
Object[]{"Attr",node.getNodeName()});
+ reportDOMError(msg,
DOMError.SEVERITY_ERROR,
+ null,
"wf-invalid-character-in-node-name");
}
-
}
}
}
@@ -530,9 +540,12 @@
parent.insertBefore(newChild, node.getNextSibling());
node = newChild;
// issue warning
- reportDOMError(
- "CDATA sections containing the CDATA section
termination marker ']]>'",
- DOMError.SEVERITY_WARNING, node,
"cdata-sections-splitted");
+ String msg = DOMMessageFormatter.formatMessage(
+ DOMMessageFormatter.DOM_DOMAIN,
+ "cdata-sections-splitted",
+ new Object[]{"Attr",node.getNodeName()});
+ reportDOMError(msg, DOMError.SEVERITY_WARNING,
+ node, "cdata-sections-splitted");
}
}
@@ -609,20 +622,21 @@
String target = pinode.getTarget();
//1.check PI target name
if(fDocument.isXML11Version()){
- if(!XML11Char.isXML11ValidName(target)){
- //REVISIT: As per DOM it is error but as per XML spec.
it is fatal error
- reportDOMError("Invalid Character in node name",
- DOMError.SEVERITY_FATAL_ERROR, node,
"wf-invalid-character-in-node-name");
- }
+ wellformed = XML11Char.isXML11ValidName(target);
}
else{
- if(!XMLChar.isValidName(target)){
- //REVISIT: As per DOM it is error but as per XML spec.
it is fatal error
- reportDOMError("Invalid Character in node name",
- DOMError.SEVERITY_FATAL_ERROR, node,
"wf-invalid-character-in-node-name");
- }
+ wellformed = XMLChar.isValidName(target);
}
+ if (!wellformed) {
+ String msg = DOMMessageFormatter.formatMessage(
+ DOMMessageFormatter.DOM_DOMAIN,
+ "wf-invalid-character-in-node-name",
+ new Object[]{"Element", node.getNodeName()});
+ reportDOMError(msg, DOMError.SEVERITY_ERROR, null,
+ "wf-invalid-character-in-node-name");
+ }
+
//2. check PI data
//processing isntruction data may have certain characters
//which may not be valid XML character
@@ -690,9 +704,10 @@
// Check for invalid namespace declaration:
if (value.equals(NamespaceContext.XMLNS_URI)) {
- reportDOMError("No prefix other than 'xmlns' can be bound
to 'http://www.w3.org/2000/xmlns/' namespace name",
- DOMError.SEVERITY_ERROR, attr, null);
-
+ //A null value for locale is passed to formatMessage,
+ //which means that the default locale will be used
+ String msg =
fXMLMessageFormatter.formatMessage(null,"CantBindXMLNS",null );
+ reportDOMError(msg, DOMError.SEVERITY_ERROR, attr,
"CantBindXMLNS");
} else {
// XML 1.0 Attribute value normalization
// value = normalizeAttributeValue(value, attr);
@@ -762,9 +777,17 @@
if (element.getLocalName() == null) {
// Error: DOM Level 1 node!
if (fNamespaceValidation) {
- reportDOMError("DOM Level 1 node: "+element.getNodeName(),
DOMError.SEVERITY_FATAL_ERROR, element, null);
+ String msg = DOMMessageFormatter.formatMessage(
+ DOMMessageFormatter.DOM_DOMAIN, "NullLocalElementName",
+ new Object[]{element.getNodeName()});
+ reportDOMError(msg, DOMError.SEVERITY_FATAL_ERROR, null,
+ "NullLocalElementName");
} else {
- reportDOMError("DOM Level 1 node: "+element.getNodeName(),
DOMError.SEVERITY_ERROR, element, null);
+ String msg = DOMMessageFormatter.formatMessage(
+ DOMMessageFormatter.DOM_DOMAIN, "NullLocalElementName",
+ new Object[]{element.getNodeName()});
+ reportDOMError(msg, DOMError.SEVERITY_ERROR, null,
+ "NullLocalElementName");
}
} else { // uri=null and no colon (DOM L2 node)
uri = fNamespaceContext.getURI(XMLSymbols.EMPTY_STRING);
@@ -826,11 +849,13 @@
boolean
wellformed=CoreDocumentImpl.isXMLName(attr.getNodeName() , fDocument.isXML11Version());
if (!wellformed){
if (fErrorHandler != null) {
- String msg = "Invalid XML Character in element
" + attr.getNodeName() ;
- reportDOMError(msg,
- DOMError.SEVERITY_ERROR, null,
"wf-invalid-character");
- }
-
+ String msg =
DOMMessageFormatter.formatMessage(
+
DOMMessageFormatter.DOM_DOMAIN,
+
"wf-invalid-character-in-node-name",
+ new Object[]{"Attribute",
attr.getNodeName()});
+ reportDOMError(msg,
DOMError.SEVERITY_ERROR, null,
+ "wf-invalid-character-in-node-name");
+ }
}
}
}
@@ -908,9 +933,17 @@
if (attr.getLocalName() == null) {
// It is an error if document has DOM L1 nodes.
if (fNamespaceValidation) {
- reportDOMError("DOM Level 1 node: "+name,
DOMError.SEVERITY_FATAL_ERROR, attr, null);
+ String msg = DOMMessageFormatter.formatMessage(
+ DOMMessageFormatter.DOM_DOMAIN,
+ "NullLocalElementName", new
Object[]{element.getNodeName()});
+ reportDOMError(msg, DOMError.SEVERITY_FATAL_ERROR,
null,
+ "NullLocalElementName");
} else {
- reportDOMError("DOM Level 1 node: "+name,
DOMError.SEVERITY_ERROR, attr, null );
+ String msg = DOMMessageFormatter.formatMessage(
+ DOMMessageFormatter.DOM_DOMAIN,
+ "NullLocalAttrName", new
Object[]{element.getNodeName()});
+ reportDOMError(msg, DOMError.SEVERITY_ERROR, null,
+ "NullLocalAttrName");
}
} else {
// uri=null and no colon
@@ -978,11 +1011,10 @@
while(i < datalength){
char c = dataarray[i++];
if(XML11Char.isXML11Invalid(c)){
- String msg = "Invalid XML Character " + "'" +
Integer.toString(c, 16) + "'" + "in the DOM." ;
- //REVISIT: As per DOM it is error but as per XML spec. it is
fatal error
- reportDOMError(msg,
- DOMError.SEVERITY_FATAL_ERROR, null,
"wf-invalid-character");
-
+ String msg =
fXMLMessageFormatter.formatMessage(null,
+ "InvalidCharInCDSect", new
Object[]{Integer.toString(c, 16)});
+ reportDOMError(msg, DOMError.SEVERITY_ERROR,
null,
+ "wf-invalid-character");
}
else if (c==']'){
int count = i;
@@ -992,10 +1024,9 @@
}
if (count <datalength && dataarray[count]=='>'){
//CDEndInContent
- String msg = "]: The character sequence \"]]>\" must
not appear in content unless used to mark the end of a CDATA section.";
- reportDOMError(msg,
- DOMError.SEVERITY_FATAL_ERROR, null,
"CDEndInContent");
-
+ String msg =
fXMLMessageFormatter.formatMessage(null,
+ "CDEndInContent", null);
+ reportDOMError(msg,
DOMError.SEVERITY_ERROR, null, "wf-invalid-character");
}
}
@@ -1008,10 +1039,14 @@
while(i < datalength){
char c = dataarray[i++];
if( XMLChar.isInvalid(c) ){
- String msg = "Invalid XML Character " + "'" +
Integer.toString(c, 16) + "'" + "in the DOM." ;
- //REVISIT: As per DOM it is error but as per XML spec. it is
fatal error
- reportDOMError(msg,
- DOMError.SEVERITY_FATAL_ERROR, null,
"wf-invalid-character");
+ //Note: The key InvalidCharInCDSect from
XMLMessages.properties
+ //is being used to obtain the message and DOM error type
+ //"wf-invalid-character" is used. Also per DOM it is error
but
+ //as per XML spec. it is fatal error
+ String msg =
fXMLMessageFormatter.formatMessage(null,
+ "InvalidCharInCDSect", new
Object[]{Integer.toString(c, 16)});
+ reportDOMError(msg, DOMError.SEVERITY_ERROR,
null,
+ "wf-invalid-character");
}
else if (c==']'){
int count = i;
@@ -1020,11 +1055,9 @@
// do nothing
}
if (count <datalength && dataarray[count]=='>'){
- //CDEndInContent
- String msg = "]: The character sequence \"]]>\" must
not appear in content unless used to mark the end of a CDATA section.";
- reportDOMError(msg,
- DOMError.SEVERITY_FATAL_ERROR, null,
"CDEndInContent");
-
+ String msg =
fXMLMessageFormatter.formatMessage(null,
+ "CDEndInContent", null);
+ reportDOMError(msg,
DOMError.SEVERITY_ERROR, null, "wf-invalid-character");
}
}
@@ -1051,11 +1084,12 @@
int i = 0 ;
while(i < datalength){
if(XML11Char.isXML11Invalid(dataarray[i++])){
- String msg = "Invalid XML Character " + "'" +
Integer.toString(dataarray[i-1], 16) + "'" + "in the DOM." ;
- //REVISIT: As per DOM it is error but as per XML spec. it is
fatal error
- reportDOMError(msg,
- DOMError.SEVERITY_FATAL_ERROR, null,
"wf-invalid-character");
-
+ String msg = DOMMessageFormatter.formatMessage(
+ DOMMessageFormatter.DOM_DOMAIN, "InvalidXMLCharInDOM",
+ new Object[]{Integer.toString(dataarray[i-1], 16)});
+ //REVISIT: As per DOM it is error but as per
XML spec. it is fatal error
+ reportDOMError(msg, DOMError.SEVERITY_ERROR,
null,
+ "wf-invalid-character");
};
}
}//version of the document is XML 1.0
@@ -1064,10 +1098,12 @@
int i = 0 ;
while(i < datalength){
if( XMLChar.isInvalid(dataarray[i++]) ){
- String msg = "Invalid XML Character " + "'" +
Integer.toString(dataarray[i-1], 16) + "'" + "in the DOM." ;
- //REVISIT: As per DOM it is error but as per XML spec. it is
fatal error
- reportDOMError(msg,
- DOMError.SEVERITY_FATAL_ERROR, null,
"wf-invalid-character");
+ String msg = DOMMessageFormatter.formatMessage(
+ DOMMessageFormatter.DOM_DOMAIN, "InvalidXMLCharInDOM",
+ new Object[]{Integer.toString(dataarray[i-1], 16)});
+ //REVISIT: As per DOM it is error but as per
XML spec. it is fatal error
+ reportDOMError(msg, DOMError.SEVERITY_ERROR,
null,
+ "wf-invalid-character");
};
}
}//end-else fDocument.isXMLVersion()
@@ -1094,16 +1130,17 @@
char c = dataarray[i++];
if(XML11Char.isXML11Invalid(c)){
- String msg = "Invalid XML Character " + "'" +
Integer.toString(dataarray[i-1], 16) + "'" + "in the DOM." ;
- //REVISIT: As per DOM it is error but as per XML spec. it is
fatal error
- reportDOMError(msg,
- DOMError.SEVERITY_FATAL_ERROR, null,
"wf-invalid-character");
+ String msg =
fXMLMessageFormatter.formatMessage(null,
+ "InvalidCharInComment",
+ new Object []
{Integer.toString(dataarray[i-1], 16)});
+ //REVISIT: As per DOM it is error but as per
XML spec. it is fatal error
+ reportDOMError(msg, DOMError.SEVERITY_ERROR,
null, "wf-invalid-character");
}
else if (c == '-' && i<datalength && dataarray[i]=='-'){
- String msg = "For compatibility, the string '--'
(double-hyphen) must not occur within comments" ;
- // invalid: '--' in comment
- reportDOMError(msg,
- DOMError.SEVERITY_FATAL_ERROR, null,
"wf-invalid-character");
+ String msg =
fXMLMessageFormatter.formatMessage(null,
+ "DashDashInComment", null);
+ // invalid: '--' in comment
+ reportDOMError(msg, DOMError.SEVERITY_ERROR,
null, "wf-invalid-character");
}
}
}//version of the document is XML 1.0
@@ -1113,16 +1150,15 @@
while(i < datalength){
char c = dataarray[i++];
if( XMLChar.isInvalid(c) ){
- String msg = "Invalid XML Character " + "'" +
Integer.toString(c, 16) + "'" + "in the DOM." ;
- //REVISIT: As per DOM it is error but as per XML spec. it is
fatal error
- reportDOMError(msg,
- DOMError.SEVERITY_FATAL_ERROR, null,
"wf-invalid-character");
+ String msg =
fXMLMessageFormatter.formatMessage(null,
+ "InvalidCharInComment", new Object []
{Integer.toString(dataarray[i-1], 16)});
+ reportDOMError(msg, DOMError.SEVERITY_ERROR,
null, "wf-invalid-character");
}
else if (c == '-' && i<datalength && dataarray[i]=='-'){
- String msg = "For compatibility, the string '--'
(double-hyphen) must not occur within comments" ;
- // invalid: '--' in comment
- reportDOMError(msg,
- DOMError.SEVERITY_FATAL_ERROR, null,
"wf-invalid-character");
+ String msg =
fXMLMessageFormatter.formatMessage(null,
+ "DashDashInComment", null);
+ // invalid: '--' in comment
+ reportDOMError(msg, DOMError.SEVERITY_ERROR,
null, "wf-invalid-character");
}
}
@@ -1139,9 +1175,10 @@
if (a.hasStringValue()) {
isXMLCharWF(value, fDocument.isXML11Version());
} else {
+ NodeList children = a.getChildNodes();
//check each child node of the attribute's value
- for (int j = 0; j < attributes.getLength(); j++) {
- Node child = attributes.item(j);
+ for (int j = 0; j < children.getLength(); j++) {
+ Node child = children.item(j);
//If the attribute's child is an entity refernce
if (child.getNodeType() == Node.ENTITY_REFERENCE_NODE) {
Document owner = a.getOwnerDocument();
@@ -1159,15 +1196,11 @@
}
//If the entity was not found issue a fatal error
if (ent == null && fErrorHandler != null) {
- reportDOMError(
- "The attribute "
- + a.getNodeName()
- + " value '"
- + child.getNodeValue()
- + "' referenced an entity that was not declared",
- DOMError.SEVERITY_FATAL_ERROR,
- a,
- null);
+ String msg = DOMMessageFormatter.formatMessage(
+ DOMMessageFormatter.DOM_DOMAIN,
"UndeclaredEntRefInAttrValue",
+ new Object[]{a.getNodeName()});
+ reportDOMError(msg, DOMError.SEVERITY_ERROR,
+ null, "UndeclaredEntRefInAttrValue");
}
}
else {
1.6 +12 -2
xml-xerces/java/src/org/apache/xerces/impl/msg/DOMMessages.properties
Index: DOMMessages.properties
===================================================================
RCS file:
/home/cvs/xml-xerces/java/src/org/apache/xerces/impl/msg/DOMMessages.properties,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- DOMMessages.properties 14 Nov 2003 23:56:05 -0000 1.5
+++ DOMMessages.properties 23 Jan 2004 20:05:46 -0000 1.6
@@ -34,8 +34,18 @@
FEATURE_NOT_FOUND = The parameter {0} is not recognized.
STRING_TOO_LONG = The resulting string is too long to fit in a DOMString: ''{0}''.
-#Ranges
+#DOM Level 3 DOMError codes
+wf-invalid-character = The text {0} of the {1} node contains invalid XML
characters.
+wf-invalid-character-in-node-name = The {0} node named {1} contains invalid XML
characters.
+cdata-sections-splitted = CDATA sections containing the CDATA section termination
marker '']]>''
+
+#Error codes used in DOM Normalizer
+InvalidXMLCharInDOM = An invalid XML character (Unicode: 0x{0}) was found in the
DOM during normalization.
+UndeclaredEntRefInAttrValue = The attribute \"{0}\" value \"{1}\" referenced an
entity that was not declared.
+NullLocalElementName = A null local name was encountered during namespace
normalization of element {0}.
+NullLocalAttrName = A null local name was encountered during namespace
normalization of attribute {0}.
+#Ranges
BAD_BOUNDARYPOINTS_ERR = The boundary-points of a Range do not meet specific
requirements.
INVALID_NODE_TYPE_ERR = The container of a boundary-point of a Range is being set
to either a node of an invalid type or a node with an ancestor of an invalid type.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]