Details

Description

When a TFS changeset has an ampersand (&) character in the comment, the TFS
plugin gets a "Parse Fatal Error" resulting from a SAXParseException. The
result of this is that no changes are shown for the build in the Hudson UI, even
though TFS changesets were found.

Here is an example stacktrace:

SEVERE: Parse Fatal Error at line 6 column 54: The entity name must immediately
follow the '&' in the entity reference.
org.xml.sax.SAXParseException: The entity name must immediately follow the '&'
in the entity reference.
at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown
Source)
at org.apache.xerces.util.ErrorHandlerWrapper.fatalError(Unknown Source)
at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
at org.apache.xerces.impl.XMLScanner.reportFatalError(Unknown Source)
at
org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanEntityReference(Unknown Source)
at
org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown
Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown
Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
at org.apache.commons.digester.Digester.parse(Digester.java:1685)
at hudson.plugins.tfs.ChangeSetReader.parse(ChangeSetReader.java:54)
at hudson.plugins.tfs.ChangeSetReader.parse(ChangeSetReader.java:31)
at hudson.plugins.tfs.ChangeSetReader.parse(ChangeSetReader.java:25)
at hudson.model.AbstractBuild.calcChangeSet(AbstractBuild.java:429)
at hudson.model.AbstractBuild.access$500(AbstractBuild.java:78)
at hudson.model.AbstractBuild$AbstractRunner.checkout(AbstractBuild.java:320)
at hudson.model.AbstractBuild$AbstractRunner.run(AbstractBuild.java:266)
at hudson.model.Run.run(Run.java:927)
at hudson.model.Build.run(Build.java:112)
at hudson.model.ResourceController.execute(ResourceController.java:93)
at hudson.model.Executor.run(Executor.java:119)
org.xml.sax.SAXParseException: The entity name must immediately follow the '&'
in the entity reference.
at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
at org.apache.commons.digester.Digester.parse(Digester.java:1685)
at hudson.plugins.tfs.ChangeSetReader.parse(ChangeSetReader.java:54)
at hudson.plugins.tfs.ChangeSetReader.parse(ChangeSetReader.java:31)
at hudson.plugins.tfs.ChangeSetReader.parse(ChangeSetReader.java:25)
at hudson.model.AbstractBuild.calcChangeSet(AbstractBuild.java:429)
at hudson.model.AbstractBuild.access$500(AbstractBuild.java:78)
at hudson.model.AbstractBuild$AbstractRunner.checkout(AbstractBuild.java:320)
at hudson.model.AbstractBuild$AbstractRunner.run(AbstractBuild.java:266)
at hudson.model.Run.run(Run.java:927)
at hudson.model.Build.run(Build.java:112)
at hudson.model.ResourceController.execute(ResourceController.java:93)
at hudson.model.Executor.run(Executor.java:119)

Activity

The problem seems to be introduced when the changelog.xml file is written. At
that point, the data should be XML-escaped. An example of this approach can be
found in the VSS plugin in the VSSSCM.checkout() method and the escapeForXml()
method it uses:

jeffolson
added a comment - 2009-05-26 14:23 The problem seems to be introduced when the changelog.xml file is written. At
that point, the data should be XML-escaped. An example of this approach can be
found in the VSS plugin in the VSSSCM.checkout() method and the escapeForXml()
method it uses:
http://fisheye4.atlassian.com/browse/hudson/trunk/hudson/plugins/vss/src/main/java/scm/vss/VSSSCM.java?r=trunk