You are viewing a plain text version of this content. The canonical link for it is here.
Posted to j-dev@xerces.apache.org by Norris Boyd <nb...@atg.com> on 2000/10/10 18:08:38 UTC
Bug and patch (process?)
I mailed in a description of a problem I'd found and a patch I proposed
to fix it. I haven't heard any response from my previous mail.
Is this the right newsgroup to submit problems and patches to? Is there
some other process I should follow?
My original mail follows.
Thanks for everybody's work on Xerces. I hope you guys can work out your
conflicts and keep improving a great XML parser.
--Norris
Subject:
Java encoding problems and proposed solution
Date:
Thu, 28 Sep 2000 13:41:06 -0400
From:
Norris Boyd <nb...@atg.com>
Reply-To:
xerces-j-dev@xml.apache.org
Organization:
Art Technology Group
To:
xerces-j-dev@xml.apache.org
We've been using the
"http://apache.org/xml/features/allow-java-encodings" feature in order
to handle Java encodings used in the J2EE conformance test suite.
Unfortunately, Xerces still gives an error for an invalid encoding for
the Java encoding name "8859_1" since it doesn't begin with [A-Z][a-z].
A patch follows that addresses this problem. The change is simple: the
value of the feature flag is passed down to the method that performs the
check, allowing it to accept the Java encoding name.
Thanks,
Norris
diff -r -u
//d/untouched/xerces-1_2_0/src/org/apache/xerces/framework/XMLDTDScanner.java
org/apache/xerces/framework/XMLDTDScanner.java
---
//d/untouched/xerces-1_2_0/src/org/apache/xerces/framework/XMLDTDScanner.java
Fri Sep 01 14:22:14 2000
+++ org/apache/xerces/framework/XMLDTDScanner.java Tue Sep 26 11:59:48
2000
@@ -185,6 +185,7 @@
private GrammarResolver fGrammarResolver = null;
private boolean fNamespacesEnabled = false;
private boolean fValidationEnabled = false;
+ private boolean fAllowJavaEncodings = false;
private XMLElementDecl fTempElementDecl = new XMLElementDecl();
private XMLAttributeDecl fTempAttributeDecl = new
XMLAttributeDecl();
private QName fElementQName = new QName();
@@ -264,6 +265,11 @@
fValidationEnabled = enabled;
}
+ /** set fAllowJavaEncodings **/
+ public void setAllowJavaEncodings(boolean allow) {
+ fAllowJavaEncodings = allow;
+ }
+
/**
* Is the XMLDTDScanner reading from an external entity?
*
@@ -1685,7 +1691,7 @@
//
encoding = result;
String encodingString = fStringPool.toString(encoding);
- if (!validEncName(encodingString)) {
+ if (!validEncName(encodingString, fAllowJavaEncodings))
{
abortMarkup(XMLMessages.MSG_ENCODINGDECL_INVALID,
XMLMessages.P81_INVALID_VALUE,
encodingString);
@@ -3061,8 +3067,8 @@
return XMLCharacterProperties.validVersionNum(version);
}
- private boolean validEncName(String encoding) {
- return XMLCharacterProperties.validEncName(encoding);
+ private boolean validEncName(String encoding, boolean
allowJavaEncodingNames) {
+ return XMLCharacterProperties.validEncName(encoding,
allowJavaEncodingNames);
}
private int validPublicId(String publicId) {
diff -r -u
//d/untouched/xerces-1_2_0/src/org/apache/xerces/framework/XMLDocumentScanner.java
org/apache/xerces/framework/XMLDocumentScanner.java
---
//d/untouched/xerces-1_2_0/src/org/apache/xerces/framework/XMLDocumentScanner.java
Fri Sep 01 14:22:14 2000
+++ org/apache/xerces/framework/XMLDocumentScanner.java Tue Sep 26
11:57:40 2000
@@ -161,6 +161,7 @@
XMLDTDScanner fDTDScanner = null;
boolean fNamespacesEnabled = false;
boolean fValidationEnabled = false;
+ boolean fAllowJavaEncodings = false;
QName fElementQName = new QName();
QName fAttributeQName = new QName();
QName fCurrentElementQName = new QName();
@@ -328,6 +329,11 @@
public void setGrammarResolver(GrammarResolver resolver) {
fGrammarResolver = resolver;
}
+
+ /** Sets the flag allowing Java encodings. */
+ public void setAllowJavaEncodings(boolean allow) {
+ fAllowJavaEncodings = allow;
+ }
/**
* reset the parser so that the instance can be reused
@@ -2167,6 +2173,7 @@
fDTDScanner = new XMLDTDScanner(fStringPool,
fErrorReporter, fEntityHandler, new ChunkyCharArray(fStringPool));
fDTDScanner.setValidationEnabled(fValidationEnabled);
fDTDScanner.setNamespacesEnabled(fNamespacesEnabled);
+ fDTDScanner.setAllowJavaEncodings(fAllowJavaEncodings);
}
else {
fDTDScanner.reset(fStringPool, new
ChunkyCharArray(fStringPool));
@@ -2273,7 +2280,7 @@
/** Returns true if the encoding name is valid. */
private boolean validEncName(String encoding) {
- return XMLCharacterProperties.validEncName(encoding);
+ return XMLCharacterProperties.validEncName(encoding,
fAllowJavaEncodings);
}
} // class XMLDocumentScanner
diff -r -u
//d/untouched/xerces-1_2_0/src/org/apache/xerces/framework/XMLParser.java
org/apache/xerces/framework/XMLParser.java
---
//d/untouched/xerces-1_2_0/src/org/apache/xerces/framework/XMLParser.java
Fri Sep 01 14:22:14 2000
+++ org/apache/xerces/framework/XMLParser.java Tue Sep 26 11:58:05 2000
@@ -710,6 +710,7 @@
protected void setAllowJavaEncodings(boolean allow)
throws SAXNotRecognizedException, SAXNotSupportedException {
fEntityHandler.setAllowJavaEncodings(allow);
+ fScanner.setAllowJavaEncodings(allow);
}
/**
diff -r -u
//d/untouched/xerces-1_2_0/src/org/apache/xerces/readers/DefaultEntityHandler.java
org/apache/xerces/readers/DefaultEntityHandler.java
---
//d/untouched/xerces-1_2_0/src/org/apache/xerces/readers/DefaultEntityHandler.java
Fri Sep 01 14:22:16 2000
+++ org/apache/xerces/readers/DefaultEntityHandler.java Tue Sep 26
11:43:54 2000
@@ -528,7 +528,7 @@
XMLMessages.P81_REQUIRED,
null,
XMLErrorReporter.ERRORTYPE_FATAL_ERROR);
- } else if (!XMLCharacterProperties.validEncName(encoding))
{
+ } else if (!XMLCharacterProperties.validEncName(encoding,
getAllowJavaEncodings())) {
Object[] args = { encoding };
fErrorReporter.reportError(fErrorReporter.getLocator(),
XMLMessages.XML_DOMAIN,
@@ -804,7 +804,7 @@
XMLMessages.P81_REQUIRED,
null,
XMLErrorReporter.ERRORTYPE_FATAL_ERROR);
- } else if (!XMLCharacterProperties.validEncName(encoding))
{
+ } else if (!XMLCharacterProperties.validEncName(encoding,
getAllowJavaEncodings())) {
Object[] args = { encoding };
fErrorReporter.reportError(fErrorReporter.getLocator(),
XMLMessages.XML_DOMAIN,
diff -r -u
//d/untouched/xerces-1_2_0/src/org/apache/xerces/utils/XMLCharacterProperties.java
org/apache/xerces/utils/XMLCharacterProperties.java
---
//d/untouched/xerces-1_2_0/src/org/apache/xerces/utils/XMLCharacterProperties.java
Fri Sep 01 14:22:16 2000
+++ org/apache/xerces/utils/XMLCharacterProperties.java Tue Sep 26
11:37:42 2000
@@ -103,11 +103,13 @@
* @param encoding string to check
* @return true if encoding is a valid encoding name
*/
- public static boolean validEncName(String encoding) {
+ public static boolean validEncName(String encoding,
+ boolean allowJavaEncodingName)
+ {
if (encoding.length() == 0)
return false;
char ch = encoding.charAt(0);
- if (ch > 'z' || fgAsciiAlphaChar[ch] == 0)
+ if (ch > 'z' || (fgAsciiAlphaChar[ch] == 0 &&
!allowJavaEncodingName))
return false;
for (int i = 1; i < encoding.length(); i++) {
ch = encoding.charAt(i);