Index: rwiki-impl/impl/src/java/uk/ac/cam/caret/sakai/rwiki/component/service/impl/XLSTChangesHandler.java =================================================================== --- rwiki-impl/impl/src/java/uk/ac/cam/caret/sakai/rwiki/component/service/impl/XLSTChangesHandler.java (revision 72821) +++ rwiki-impl/impl/src/java/uk/ac/cam/caret/sakai/rwiki/component/service/impl/XLSTChangesHandler.java (working copy) @@ -226,7 +226,7 @@ SchemaNames.EL_RENDEREDCONTENT, SchemaNames.EL_NSRENDEREDCONTENT, dummyAttributes); - renderToXML(rwo, ch,true); + renderToXML(rwo, ch, true, true); ch.endElement(SchemaNames.NS_CONTAINER, SchemaNames.EL_RENDEREDCONTENT, SchemaNames.EL_NSRENDEREDCONTENT); @@ -323,7 +323,7 @@ ch.startElement(SchemaNames.NS_CONTAINER, SchemaNames.EL_CHANGE, SchemaNames.EL_NSCHANGE, propA); - renderToXML(rwco, ch,true); + renderToXML(rwco, ch, true, true); ch.endElement(SchemaNames.NS_CONTAINER, SchemaNames.EL_CHANGE, SchemaNames.EL_NSCHANGE); } @@ -382,7 +382,7 @@ .getVersion())); ch.startElement(SchemaNames.NS_CONTAINER, SchemaNames.EL_CHANGE, SchemaNames.EL_NSCHANGE, propA); - renderToXML(rwco, ch, true); + renderToXML(rwco, ch, true, true); ch.endElement(SchemaNames.NS_CONTAINER, SchemaNames.EL_CHANGE, SchemaNames.EL_NSCHANGE); } Index: rwiki-impl/impl/src/java/uk/ac/cam/caret/sakai/rwiki/component/service/impl/XSLTEntityHandler.java =================================================================== --- rwiki-impl/impl/src/java/uk/ac/cam/caret/sakai/rwiki/component/service/impl/XSLTEntityHandler.java (revision 72821) +++ rwiki-impl/impl/src/java/uk/ac/cam/caret/sakai/rwiki/component/service/impl/XSLTEntityHandler.java (working copy) @@ -42,6 +42,7 @@ import javax.xml.transform.sax.SAXResult; import javax.xml.transform.sax.TransformerHandler; +import org.apache.commons.lang.StringEscapeUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.xalan.templates.OutputProperties; @@ -116,6 +117,17 @@ * dependency The base name of the xslt file, relative to context root. */ private String xslt = null; + /** + * Control whether the xml is escaped for this handler + */ + private boolean escaped = true; + public boolean isEscaped() { + return escaped; + } + + public void setEscaped(boolean escaped) { + this.escaped = escaped; + } /** * dependency The default strack trace message to use if all else fails @@ -364,12 +376,17 @@ ch.endElement(SchemaNames.NS_CONTAINER, SchemaNames.EL_XMLPROPERTIES, SchemaNames.EL_NSXMLPROPERTIES); + /* http://jira.sakaiproject.org/browse/SAK-13281 + * escapeXML is controlled via config settings + */ + if (!rwe.isContainer()) { RWikiObject rwo = rwe.getRWikiObject(); ch.startElement(SchemaNames.NS_CONTAINER, SchemaNames.EL_RENDEREDCONTENT, SchemaNames.EL_NSRENDEREDCONTENT, dummyAttributes); - renderToXML(rwo, ch, withBreadcrumbs); + + renderToXML(rwo, ch, withBreadcrumbs, this.escaped); ch.endElement(SchemaNames.NS_CONTAINER, SchemaNames.EL_RENDEREDCONTENT, SchemaNames.EL_NSRENDEREDCONTENT); } @@ -397,7 +414,7 @@ ch.startElement(SchemaNames.NS_CONTAINER, SchemaNames.EL_RENDEREDCONTENT, SchemaNames.EL_NSRENDEREDCONTENT, dummyAttributes); - renderToXML(sbrwo, ch, withBreadcrumbs); + renderToXML(sbrwo, ch, withBreadcrumbs, this.escaped); ch.endElement(SchemaNames.NS_CONTAINER, SchemaNames.EL_RENDEREDCONTENT, SchemaNames.EL_NSRENDEREDCONTENT); @@ -478,7 +495,7 @@ * @param ch * @param withBreadCrumb */ - public void renderToXML(RWikiObject rwo, final ContentHandler ch, boolean withBreadCrumb) + public void renderToXML(RWikiObject rwo, final ContentHandler ch, boolean withBreadCrumb, boolean escapeXML) throws SAXException, IOException { @@ -510,7 +527,11 @@ .replaceAll("]]>", "]]>]]>", "]]>]]>" + renderedPage //$NON-NLS-1$ + /* http://jira.sakaiproject.org/browse/SAK-13281 + * ensure all page content is escaped or double escaped before it goes into the parser, + * if this is not done then the parser will unescape html entities during processing + */ + renderedPage = "" + (escapeXML ? StringEscapeUtils.escapeXml(renderedPage) : renderedPage) //$NON-NLS-1$ + ""; //$NON-NLS-1$ Index: rwiki-impl/impl/pom.xml =================================================================== --- rwiki-impl/impl/pom.xml (revision 72821) +++ rwiki-impl/impl/pom.xml (working copy) @@ -82,6 +82,11 @@ commons-logging commons-logging + + commons-lang + commons-lang + jar + 1.0.4 jar Index: rwiki-impl/pack/src/webapp/WEB-INF/coreServiceComponents.xml =================================================================== --- rwiki-impl/pack/src/webapp/WEB-INF/coreServiceComponents.xml (revision 72821) +++ rwiki-impl/pack/src/webapp/WEB-INF/coreServiceComponents.xml (working copy) @@ -153,6 +153,7 @@ /uk/ac/cam/caret/sakai/rwiki/component/service/impl/tohtml.xslt html + true Failed To generate Stack Trace : {0} Error encounvered performing transform : {0} \n {1} /wiki @@ -193,6 +194,7 @@ /uk/ac/cam/caret/sakai/rwiki/component/service/impl/xhtml2fo.xslt pdf + false Failed To generate Stack Trace : {0} Error encounvered performing transform : {0} \n {1} /wiki @@ -224,6 +226,7 @@ /uk/ac/cam/caret/sakai/rwiki/component/service/impl/xhtml2fo.xslt rtf + false Failed To generate Stack Trace : {0} Error encounvered performing transform : {0} \n {1} /wiki @@ -255,6 +258,7 @@ /uk/ac/cam/caret/sakai/rwiki/component/service/impl/xhtml2fo.xslt fop + false Failed To generate Stack Trace : {0} Error encounvered performing transform : {0} \n {1} /wiki