Jump to content
Changes to the Jaspersoft community edition download ×

styled markup with embedded ampersand


ddavis539

Recommended Posts

I'm using Jasper/iReports 3.5.1-nb.

I'm using the 'styled' markup to combine a resource string with a Field, changing the font for the field.  The exact Test field expression is:

$R{product} + ":  <style pdfFontName=\"Cyberbit.ttf\" forecolor=\"#000000\" isPdfEmbedded=\"true\">" + $F{ProductName} +" </style>"

This works fine, unless the Product name contains an embedded ampersand.  Ie (Oats & Grains).   In this case the markup itself displays on the report, and the jasper engine displays an error in the console:

21:04:40,820 FATAL [JRStyledTextParser] Error parsing styled text.
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.DOMParser.parse(Unknown Source)
        at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(Unknown Source)
        at net.sf.jasperreports.engine.util.JRStyledTextParser.parse(JRStyledTextParser.java:219)
        at net.sf.jasperreports.engine.util.JRStyledTextParser.getStyledText(JRStyledTextParser.java:258)
        at net.sf.jasperreports.engine.fill.JRFillTextElement.getStyledText(JRFillTextElement.java:955)
        at net.sf.jasperreports.engine.fill.JRFillTextElement.getText(JRFillTextElement.java:973)
        at net.sf.jasperreports.engine.fill.JRFillTextField.prepare(JRFillTextField.java:520)
        at net.sf.jasperreports.engine.fill.JRFillElementContainer.prepareElements(JRFillElementContainer.java:346)
        at net.sf.jasperreports.engine.fill.JRFillBand.fill(JRFillBand.java:346)
        at net.sf.jasperreports.engine.fill.JRFillBand.fill(JRFillBand.java:305)
        at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillColumnBand(JRVerticalFiller.java:1382)
        at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillGroupHeader(JRVerticalFiller.java:591)
        at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillGroupHeaders(JRVerticalFiller.java:524)
        at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportStart(JRVerticalFiller.java:253)
        at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:113)
        at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:899)
        at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:821)
        at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:89)
        at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:628)
        at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:544)
        at net.sf.jasperreports.engine.JasperRunManager.runReportToPdfFile(JasperRunManager.java:349)
        at reed.tracom.getsmart.businesslogic.JasperReportsImpl.generatePDFReport(JasperReportsImpl.java:99)
        at reed.tracom.getsmart.businesslogic.SessionReportService.produceStatusReport(SessionReportService.java:939)
        at reed.tracom.getsmart.businesslogic.SystemTaskService.processStatusReports(SystemTaskService.java:1285)
        at reed.tracom.getsmart.businesslogic.SystemTaskService.processSessionTask(SystemTaskService.java:1066)
        at reed.tracom.getsmart.businesslogic.SystemTaskService.processIndividualSystemTask(SystemTaskService.java:983)
        at reed.tracom.spring.controllers.reports.ReportGenerateController.onFormChange(ReportGenerateController.java:258)
        at org.springframework.web.servlet.mvc.SimpleFormController.processFormSubmission(SimpleFormController.java:262)
        at org.springframework.web.servlet.mvc.AbstractFormController.handleRequestInternal(AbstractFormController.java:265)
        at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153)
        at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48)
        at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:874)
        at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:808)
        at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:476)
        at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:441)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
        at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:179)
        at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
        at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:156)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:241)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:580)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
        at java.lang.Thread.run(Thread.java:595)

 The data source is an xml file, so that already escapes the ampersand as & amp ; which the parser converts into a literal ampersand during the data conversion stage. Is there a proper way to markup an ampersand so it can output correctly within a styled text block?  It appears that the styled text is being parsed by a 2nd xml parser, which implies that I would have to double-escape and ampersand, is that the case?



Post Edited by ddavis539 at 08/16/2009 05:52
Link to comment
Share on other sites

  • Replies 3
  • Created
  • Last Reply

Top Posters In This Topic

Hi,

 

You say your data source is an XML file which already escapes the ampersand character.

 

Yes, it does, but it does it for the sake of you being able to parse that XML file and load it as a report data source.

So by the time you use the product name in your expressions, the ampersand is not escaped anymore, so you need to escape it again, because you are writing XML in that styled text field.

 

I hope this helps.
Teodor

 

Link to comment
Share on other sites

  • 4 months later...
  • 11 months later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...