mrglavas 2004/09/21 21:19:34 Modified: java/src/org/apache/xerces/impl XMLDTDScannerImpl.java XMLEntityManager.java XMLDocumentFragmentScannerImpl.java Log: Fixing JIRA Bug #816:
http://nagoya.apache.org/jira/browse/XERCESJ-816 This had only been partially fixed. A value for the encoding attribute specified on an LSInput is authoritative, meaning it will override any encoding in an XML or Text declaration. Should be covering all of these cases now. Renamed some methods in XMLEntityManager.ScannedEntity so that their names are more descriptive of what they actually do. Revision Changes Path 1.51 +4 -2 xml-xerces/java/src/org/apache/xerces/impl/XMLDTDScannerImpl.java Index: XMLDTDScannerImpl.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/XMLDTDScannerImpl.java,v retrieving revision 1.50 retrieving revision 1.51 diff -u -r1.50 -r1.51 --- XMLDTDScannerImpl.java 1 Sep 2004 03:06:07 -0000 1.50 +++ XMLDTDScannerImpl.java 22 Sep 2004 04:19:33 -0000 1.51 @@ -706,7 +706,9 @@ encoding = fStrings[1]; fEntityScanner.setXMLVersion(version); - fEntityScanner.setEncoding(encoding); + if (!fEntityScanner.fCurrentEntity.isEncodingExternallySpecified()) { + fEntityScanner.setEncoding(encoding); + } // call handler if (fDTDHandler != null) { 1.85 +18 -15 xml-xerces/java/src/org/apache/xerces/impl/XMLEntityManager.java Index: XMLEntityManager.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/XMLEntityManager.java,v retrieving revision 1.84 retrieving revision 1.85 diff -u -r1.84 -r1.85 --- XMLEntityManager.java 21 Sep 2004 21:22:33 -0000 1.84 +++ XMLEntityManager.java 22 Sep 2004 04:19:33 -0000 1.85 @@ -907,8 +907,8 @@ String literalSystemId = xmlInputSource.getSystemId(); String baseSystemId = xmlInputSource.getBaseSystemId(); String encoding = xmlInputSource.getEncoding(); + final boolean encodingExternallySpecified = (encoding != null); Boolean isBigEndian = null; - boolean declaredEncoding = false; // create reader InputStream stream = null; @@ -920,8 +920,6 @@ } if (reader == null) { stream = xmlInputSource.getByteStream(); - if(stream != null && encoding != null) - declaredEncoding = true; if (stream == null) { URL location = new URL(expandedSystemId); URLConnection connect = location.openConnection(); @@ -1073,7 +1071,7 @@ fCurrentEntity = new ScannedEntity(name, new XMLResourceIdentifierImpl(publicId, literalSystemId, baseSystemId, expandedSystemId), stream, reader, encoding, literal, false, isExternal); - fCurrentEntity.setDeclaredEncoding(declaredEncoding); + fCurrentEntity.setEncodingExternallySpecified(encodingExternallySpecified); fEntityScanner.setCurrentEntity(fCurrentEntity); fResourceIdentifier.setValues(publicId, literalSystemId, baseSystemId, expandedSystemId); return encoding; @@ -2317,8 +2315,11 @@ /** Auto-detected encoding. */ public String encoding; - /** Encoding has been set externally for eg: using DOMInput*/ - boolean declaredEncoding = false; + /** + * Encoding has been set externally, for example + * using a SAX InputSource or a DOM LSInput. + */ + boolean externallySpecifiedEncoding = false; // version @@ -2495,6 +2496,16 @@ return null; } + /** Returns whether the encoding of this entity was externally specified. **/ + public boolean isEncodingExternallySpecified() { + return externallySpecifiedEncoding; + } + + /** Sets whether the encoding of this entity was externally specified. **/ + public void setEncodingExternallySpecified(boolean value) { + externallySpecifiedEncoding = value; + } + // // Object methods // @@ -2513,14 +2524,6 @@ return str.toString(); } // toString():String - - public boolean isDeclaredEncoding() { - return declaredEncoding; - } - - public void setDeclaredEncoding(boolean value) { - declaredEncoding = value; - } } // class ScannedEntity 1.57 +2 -2 xml-xerces/java/src/org/apache/xerces/impl/XMLDocumentFragmentScannerImpl.java Index: XMLDocumentFragmentScannerImpl.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/XMLDocumentFragmentScannerImpl.java,v retrieving revision 1.56 retrieving revision 1.57 diff -u -r1.56 -r1.57 --- XMLDocumentFragmentScannerImpl.java 1 Sep 2004 03:06:08 -0000 1.56 +++ XMLDocumentFragmentScannerImpl.java 22 Sep 2004 04:19:34 -0000 1.57 @@ -680,7 +680,7 @@ } // set encoding on reader - if (encoding != null && !fEntityScanner.fCurrentEntity.isDeclaredEncoding()) { + if (encoding != null && !fEntityScanner.fCurrentEntity.isEncodingExternallySpecified()) { fEntityScanner.setEncoding(encoding); } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]