091502CC8D7F487BA52A08145ED03720
  • Thomas Pollinger
  • 23.02.2018
  • DE/EN

Root Cause Analysis: "An error occurred while parsing EntityName"

Fehlermeldungen die sehr selten auftreten und sich auf den ersten Blick nicht erklären lassen – können einen echt Wahnsinning machen. Wenn man dann zu einem späteren Zeitpunkt den Auslöser entdeckt, ist die Freude umso größer :)


Regel 25

1. Gebot des selbstlosen Programmierens:
Verstehe und akzeptierte, dass du Fehler machst. Fehler macht jeder – das anzunehmen ist der erste Schritt dazu, Fehler frühzeitig zu erkennen. (IT-Professor Frank Bush)


Meldungen

Reddot.CMS.Rendering.Spots.SpotProcessor.ProcessSpot (:0)
Locals: Project: {GUID}; ProjectVariant: {GUID}; Language(Page): {GUID}; Page(ID/UUID): {ID}; ContentClass: {GUID}; RenderMode: Publish; RequestId: {ID}; 
SpotProcessor.ProcessSpot:System.Xml.XmlException: An error occurred while parsing EntityName. Line 5, position 21.
   at System.Xml.XmlTextReaderImpl.Throw(Exception e)
   at System.Xml.XmlTextReaderImpl.ParseEntityName()
   at System.Xml.XmlTextReaderImpl.ParseEntityReference()
   at System.Xml.XmlTextReaderImpl.Read()
   at System.Xml.XmlLoader.LoadNode(Boolean skipOverWhitespace)
   at System.Xml.XmlLoader.LoadDocSequence(XmlDocument parentDoc)
   at System.Xml.XmlDocument.Load(XmlReader reader)
   at OpenText.WS.MS.Core.Extensions.XmlDocumentExtension.LoadXml(XmlDocument xmlDocument, String xml, Boolean considerNamespaces)
   at OpenText.WS.MS.Cache.Xml.XmlCache.GetXmlDocument(String content, CacheItemPriority priority)
   at Reddot.CMS.Rendering.Spots.XmlSpot.Render(String spotContent, IRenderStream output, IObjectLoadManager objectLoadManager, IPageRenderingContext context, ITagProcessor tagProcessor, TagTools toolsInstance)
   at Reddot.CMS.Rendering.Spots.XmlSpot.Render(String spotContent, IRenderStream output, IObjectLoadManager objectLoadManager, IPageRenderingContext context)
   at Reddot.CMS.Rendering.Spots.SpotProcessor.ProcessSpot(String content, SpotTag spotTag, IRenderStream outputStream)

Ursache

Es wurde kein <htmltext>...</htmltext> bzw. <xmltext>...</xmltext> um die Ausgabe geschrieben:

<reddot:cms>
  <if>
    <query valuea="Context:CurrentRenderMode" operator="==" valueb="Int:2"><script type="text/javascript">
var getUrlParameterValue = function(name) {
    name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
    var regexS = "[\\?&]"+name+"=([^&#]*)";
    var regex = new RegExp( regexS );
    var results = regex.exec( window.location.href );
    if (results == null) {
        return "";
    } else {
        return results[1];
    }
}
var includeFAFCheck = function() {
    if (typeof getUrlParameterValue === "function") {
        var parameter = "";
        var valueParameter = escape(getUrlParameterValue("h"));
        if(valueParameter !== "") {
            parameter = "?h=" + valueParameter;
        }
        var newSource = "<%stdServer%><%stdEndPoint%>" + parameter;
        document.write("<sc"+"ri"+"pt type=\"text/javascript\""+"src=\""+newSource+"\"><"+"/sc"+"rip"+"t>");
    }
}

includeFAFCheck();
</script><noscript>
<b>Bitte aktivieren Sie Javascript und Cookies in Ihrem Browser</b> </noscript>
    </query>
  </if>
</reddot:cms>

Lösung

Einfach um die entsprechende Ausgabe in einen <htmltext>...</htmltext> bzw. <xmltext>...</xmltext> einbetten.

<reddot:cms>
  <if>
    <query valuea="Context:CurrentRenderMode" operator="==" valueb="Int:2">
<htmltext>

<script type="text/javascript">
var getUrlParameterValue = function(name) {
    name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
    var regexS = "[\\?&]"+name+"=([^&#]*)";
    var regex = new RegExp( regexS );
    var results = regex.exec( window.location.href );
    if (results == null) {
        return "";
    } else {
        return results[1];
    }
}
var includeFAFCheck = function() {
    if (typeof getUrlParameterValue === "function") {
        var parameter = "";
        var valueParameter = escape(getUrlParameterValue("h"));
        if(valueParameter !== "") {
            parameter = "?h=" + valueParameter;
        }
        var newSource = "<%stdServer%><%stdEndPoint%>" + parameter;
        document.write("<sc"+"ri"+"pt type=\"text/javascript\""+"src=\""+newSource+"\"><"+"/sc"+"rip"+"t>");
    }
}

includeFAFCheck();
</script><noscript>
<b>Bitte aktivieren Sie Javascript und Cookies in Ihrem Browser</b> </noscript>

</htmltext>
    </query>
  </if>
</reddot:cms>

Über den Autor:
Thomas Pollinger

... ist Senior Site Reliability Engineer bei der Vodafone GmbH in Düsseldorf. Seit dem Jahr 2007 betreut er zusammen mit seinen Kollegen die OpenText- (vormals RedDot-) Plattform Web Site Management für die deutsche Konzernzentrale.

Er entwickelt Erweiterungen in Form von Plug-Ins und PowerShell Skripten. Seit den Anfängen in 2001 (RedDot CMS 4.0) kennt er sich speziell mit der Arbeitweise und den Funktionen des Management Server aus.