Minor tweaks

git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@3620 50f2f4bb-b051-0410-bef5-90022cba6387
This commit is contained in:
Arjen Poutsma 2010-08-31 10:46:58 +00:00
parent 1a62ecb846
commit 438bd89d2a
2 changed files with 59 additions and 16 deletions

View File

@ -57,8 +57,14 @@ import org.springframework.util.StringUtils;
*/
class StaxEventXMLReader extends AbstractStaxXMLReader {
private static final String DEFAULT_XML_VERSION = "1.0";
private final XMLEventReader reader;
private String xmlVersion = DEFAULT_XML_VERSION;
private String encoding;
/**
* Constructs a new instance of the <code>StaxEventXmlReader</code> that reads from the given
* <code>XMLEventReader</code>. The supplied event reader must be in <code>XMLStreamConstants.START_DOCUMENT</code> or
@ -143,6 +149,17 @@ class StaxEventXMLReader extends AbstractStaxXMLReader {
}
private void handleStartDocument(final XMLEvent event) throws SAXException {
if (event.isStartDocument()) {
StartDocument startDocument = (StartDocument) event;
String xmlVersion = startDocument.getVersion();
if (StringUtils.hasLength(xmlVersion)) {
this.xmlVersion = xmlVersion;
}
if (startDocument.encodingSet()) {
this.encoding = startDocument.getCharacterEncodingScheme();
}
}
if (getContentHandler() != null) {
final Location location = event.getLocation();
getContentHandler().setDocumentLocator(new Locator2() {
@ -164,22 +181,11 @@ class StaxEventXMLReader extends AbstractStaxXMLReader {
}
public String getXMLVersion() {
if (event.isStartDocument()) {
StartDocument startDocument = (StartDocument) event;
String version = startDocument.getVersion();
return StringUtils.hasLength(version) ? version : "1.0";
}
return null;
return xmlVersion;
}
public String getEncoding() {
if (event.isStartDocument()) {
StartDocument startDocument = (StartDocument) event;
if (startDocument.encodingSet()) {
return startDocument.getCharacterEncodingScheme();
}
}
return null;
return encoding;
}
});
@ -195,6 +201,19 @@ class StaxEventXMLReader extends AbstractStaxXMLReader {
Namespace namespace = (Namespace) i.next();
getContentHandler().startPrefixMapping(namespace.getPrefix(), namespace.getNamespaceURI());
}
for (Iterator i = startElement.getAttributes(); i.hasNext();){
Attribute attribute = (Attribute) i.next();
String prefix = attribute.getName().getPrefix();
if (prefix == null) {
prefix = "";
}
String namespace = attribute.getName().getNamespaceURI();
if (namespace == null) {
continue;
}
getContentHandler().startPrefixMapping(prefix, namespace);
}
getContentHandler().startElement(qName.getNamespaceURI(), qName.getLocalPart(), toQualifiedName(qName),
getAttributes(startElement));
}

View File

@ -43,8 +43,14 @@ import org.springframework.util.StringUtils;
*/
class StaxStreamXMLReader extends AbstractStaxXMLReader {
private static final String DEFAULT_XML_VERSION = "1.0";
private final XMLStreamReader reader;
private String xmlVersion = DEFAULT_XML_VERSION;
private String encoding;
/**
* Constructs a new instance of the <code>StaxStreamXmlReader</code> that reads from the given
* <code>XMLStreamReader</code>. The supplied stream reader must be in <code>XMLStreamConstants.START_DOCUMENT</code>
@ -123,6 +129,14 @@ class StaxStreamXMLReader extends AbstractStaxXMLReader {
}
private void handleStartDocument() throws SAXException {
if (XMLStreamConstants.START_DOCUMENT == reader.getEventType()) {
String xmlVersion = reader.getVersion();
if (StringUtils.hasLength(xmlVersion)) {
this.xmlVersion = xmlVersion;
}
this.encoding = reader.getCharacterEncodingScheme();
}
if (getContentHandler() != null) {
final Location location = reader.getLocation();
@ -145,12 +159,11 @@ class StaxStreamXMLReader extends AbstractStaxXMLReader {
}
public String getXMLVersion() {
String version = reader.getVersion();
return StringUtils.hasLength(version) ? version : "1.0";
return xmlVersion;
}
public String getEncoding() {
return reader.getEncoding();
return encoding;
}
});
getContentHandler().startDocument();
@ -171,6 +184,17 @@ class StaxStreamXMLReader extends AbstractStaxXMLReader {
}
getContentHandler().startPrefixMapping(prefix, reader.getNamespaceURI(i));
}
for (int i = 0; i < reader.getAttributeCount(); i++) {
String prefix = reader.getAttributePrefix(i);
if (prefix == null) {
prefix = "";
}
String namespace = reader.getAttributeNamespace(i);
if (namespace == null) {
continue;
}
getContentHandler().startPrefixMapping(prefix, namespace);
}
getContentHandler().startElement(qName.getNamespaceURI(), qName.getLocalPart(), toQualifiedName(qName),
getAttributes());
}