Maven 2.x JavaNCSS Plugin

Plugin crashes when Java elements have special characters

Details

  • Type: Bug Bug
  • Status: Closed Closed
  • Priority: Major Major
  • Resolution: Fixed
  • Affects Version/s: 2.0-beta-2
  • Fix Version/s: 2.0-beta-2
  • Component/s: None
  • Labels:
    None
  • Number of attachments :
    0

Description

One of my team mate found this bug when using a 'é' char on a Java method.

When JavaNCSS generates the XML report file, it doesn't specify the file encoding in the <xml> tag (at the very beginning of the file). So when the MOJO reads the report file, it doesn't know which encoding it should use and crashes when reading the report file.

Looking quickly at the NcssReportMojo class, it looks like specifying the file encoding in the #loadDocument(File file) method should fix the bug (but I haven't tested it):

reader.setEncoding(System.getProperty("file.encoding"));

Issue Links

Activity

Hide
Fabrice Bellingard added a comment -

Jean-Laurent, as I know you authored this plugin, I assigned it to you.

Show
Fabrice Bellingard added a comment - Jean-Laurent, as I know you authored this plugin, I assigned it to you.
Hide
Jean-Laurent de Morlhon added a comment -

Hi Fabrice,

Looks like it's deep inside javancss core code not plugin one.
To investigate further would you mind posting a stacktrace if it is different from the one below ? :

.../...
TokenMgrError in /Users/JeanLaurent/src/workspaces/primary/NcssTestGround/src/main/java/javancss/testground/MJNCSS10.java
Lexical error at line 5, column 39. Encountered: "\u00a9" (169), after : ""

[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] An error has occurred in JavaNCSS Report report generation.

Embedded error: Error while JavaNCSS was executing
Lexical error at line 5, column 39. Encountered: "\u00a9" (169), after : ""
[INFO] ------------------------------------------------------------------------
[DEBUG] Trace
org.apache.maven.lifecycle.LifecycleExecutionException: An error has occurred in JavaNCSS Report report generation.

.../...

Caused by: javancss.TokenMgrError: Lexical error at line 5, column 39. Encountered: "\u00a9" (169), after : ""
at javancss.JavaParserTokenManager.getNextToken(JavaParserTokenManager.java:1781)
at javancss.JavaParser.jj_scan_token(JavaParser.java:11363)
at javancss.JavaParser.jj_3R_91(JavaParser.java:9664)
at javancss.JavaParser.jj_3_10(JavaParser.java:9734)
at javancss.JavaParser.jj_2_10(JavaParser.java:5604)

Show
Jean-Laurent de Morlhon added a comment - Hi Fabrice, Looks like it's deep inside javancss core code not plugin one. To investigate further would you mind posting a stacktrace if it is different from the one below ? : .../... TokenMgrError in /Users/JeanLaurent/src/workspaces/primary/NcssTestGround/src/main/java/javancss/testground/MJNCSS10.java Lexical error at line 5, column 39. Encountered: "\u00a9" (169), after : "" [INFO] ------------------------------------------------------------------------ [ERROR] BUILD ERROR [INFO] ------------------------------------------------------------------------ [INFO] An error has occurred in JavaNCSS Report report generation. Embedded error: Error while JavaNCSS was executing Lexical error at line 5, column 39. Encountered: "\u00a9" (169), after : "" [INFO] ------------------------------------------------------------------------ [DEBUG] Trace org.apache.maven.lifecycle.LifecycleExecutionException: An error has occurred in JavaNCSS Report report generation. .../... Caused by: javancss.TokenMgrError: Lexical error at line 5, column 39. Encountered: "\u00a9" (169), after : "" at javancss.JavaParserTokenManager.getNextToken(JavaParserTokenManager.java:1781) at javancss.JavaParser.jj_scan_token(JavaParser.java:11363) at javancss.JavaParser.jj_3R_91(JavaParser.java:9664) at javancss.JavaParser.jj_3_10(JavaParser.java:9734) at javancss.JavaParser.jj_2_10(JavaParser.java:5604)
Hide
Jean-Laurent de Morlhon added a comment -

AFAIK the previous stacktrace comment is not linked to your problem :

This one match better your bug description:
INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] An error has occurred in JavaNCSS Report report generation.

Embedded error: Invalid byte 2 of 3-byte UTF-8 sequence. Nested exception: Invalid byte 2 of 3-byte UTF-8 sequence.
.../...
Caused by: org.apache.maven.reporting.MavenReportException: Invalid byte 2 of 3-byte UTF-8 sequence. Nested exception: Invalid byte 2 of 3-byte UTF-8 sequence.
at org.codehaus.mojo.javancss.NcssReportMojo.loadDocument(NcssReportMojo.java:256)
at org.codehaus.mojo.javancss.NcssReportMojo.loadDocument(NcssReportMojo.java:256)
at org.codehaus.mojo.javancss.NcssReportMojo.loadDocument(NcssReportMojo.java:262)
at org.codehaus.mojo.javancss.NcssReportMojo.generateSingleReport(NcssReportMojo.java:245)
at org.codehaus.mojo.javancss.NcssReportMojo.executeReport(NcssReportMojo.java:158)
at org.apache.maven.reporting.AbstractMavenReport.generate(AbstractMavenReport.java:98)
at org.apache.maven.reporting.AbstractMavenReport.execute(AbstractMavenReport.java:73)
... 18 more

Show
Jean-Laurent de Morlhon added a comment - AFAIK the previous stacktrace comment is not linked to your problem : This one match better your bug description: INFO] ------------------------------------------------------------------------ [ERROR] BUILD ERROR [INFO] ------------------------------------------------------------------------ [INFO] An error has occurred in JavaNCSS Report report generation. Embedded error: Invalid byte 2 of 3-byte UTF-8 sequence. Nested exception: Invalid byte 2 of 3-byte UTF-8 sequence. .../... Caused by: org.apache.maven.reporting.MavenReportException: Invalid byte 2 of 3-byte UTF-8 sequence. Nested exception: Invalid byte 2 of 3-byte UTF-8 sequence. at org.codehaus.mojo.javancss.NcssReportMojo.loadDocument(NcssReportMojo.java:256) at org.codehaus.mojo.javancss.NcssReportMojo.loadDocument(NcssReportMojo.java:256) at org.codehaus.mojo.javancss.NcssReportMojo.loadDocument(NcssReportMojo.java:262) at org.codehaus.mojo.javancss.NcssReportMojo.generateSingleReport(NcssReportMojo.java:245) at org.codehaus.mojo.javancss.NcssReportMojo.executeReport(NcssReportMojo.java:158) at org.apache.maven.reporting.AbstractMavenReport.generate(AbstractMavenReport.java:98) at org.apache.maven.reporting.AbstractMavenReport.execute(AbstractMavenReport.java:73) ... 18 more
Hide
Fabrice Bellingard added a comment -

Hi Jean-Laurent,
Sorry for answering a bit late...

Yes, the 2nd stacktrace sounds closer to this bug. Here's the one my team mate had:

JavaNCSS error
[INFO] Generate "JavaNCSS Report" report.
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Error during page generation

Embedded error: Error rendering Maven report: Error while loading javancss raw generated report.
Error on line 1105 of document file:///C:/ [snip] /target/javancss-raw-report.xml : Erreur de conversion de caractère : "Malformed UTF-8 char -- is an XML encoding declaration missing?" (le numéro de ligne peut  être trop bas). Nested exception: Erreur de conversion de caractère : "Malformed UTF-8 char -- is an XML encoding declaration missing?" (le numéro de ligne peut être trop bas).
[INFO] ------------------------------------------------------------------------
[INFO] Trace
org.apache.maven.lifecycle.LifecycleExecutionException: Error during page generation
	at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:559)
	at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalWithLifecycle(DefaultLifecycleExecutor.java:475)
	at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:454)
	at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:306)
	at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:273)
	at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:140)
	at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:322)
	at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:115)
	at org.apache.maven.cli.MavenCli.main(MavenCli.java:256)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:324)
	at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)
	at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
	at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)
	at org.codehaus.classworlds.Launcher.main(Launcher.java:375)
Caused by: org.apache.maven.plugin.MojoExecutionException: Error during page generation
	at org.apache.maven.plugins.site.SiteMojo.execute(SiteMojo.java:97)
	at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:412)
	at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:534)
	... 16 more
Caused by: org.apache.maven.doxia.siterenderer.RendererException: Error rendering Maven report: Error while loading javancss raw generated report.
	at org.apache.maven.plugins.site.ReportDocumentRenderer.renderDocument(ReportDocumentRenderer.java:71)
	at org.apache.maven.doxia.siterenderer.DefaultSiteRenderer.renderModule(DefaultSiteRenderer.java:239)
	at org.apache.maven.doxia.siterenderer.DefaultSiteRenderer.render(DefaultSiteRenderer.java:115)
	at org.apache.maven.plugins.site.SiteMojo.renderLocale(SiteMojo.java:124)
	at org.apache.maven.plugins.site.SiteMojo.execute(SiteMojo.java:92)
	... 18 more
Caused by: org.apache.maven.reporting.MavenReportException: Error while loading javancss raw generated report.
	at org.codehaus.mojo.javancss.NcssReportMojo.loadDocument(NcssReportMojo.java:205)
	at org.codehaus.mojo.javancss.NcssReportMojo.generateAggregateReport(NcssReportMojo.java:159)
	at org.codehaus.mojo.javancss.NcssReportMojo.executeReport(NcssReportMojo.java:124)
	at org.apache.maven.reporting.AbstractMavenReport.generate(AbstractMavenReport.java:98)
	at org.apache.maven.plugins.site.ReportDocumentRenderer.renderDocument(ReportDocumentRenderer.java:67)
	... 22 more
Caused by: org.dom4j.DocumentException: Error on line 1105 of document file:/// [snip] /target/javancss-raw-report.xml : Erreur de conversion de caractère : "Malformed UTF-8 char -- is an XML encoding declaration missing?" (le numéro de ligne peut être trop bas). Nested exception: Erreur de conversion de caractère : "Malformed UTF-8 char -- is an XML encoding declaration missing?" (le numéro de ligne peut être trop bas).
	at org.dom4j.io.SAXReader.read(SAXReader.java:482)
	at org.dom4j.io.SAXReader.read(SAXReader.java:264)
	at org.codehaus.mojo.javancss.NcssReportMojo.loadDocument(NcssReportMojo.java:201)
	... 26 more

As I sais, I haven't tested the solution I told you, but I'm pretty sure this would work.

Show
Fabrice Bellingard added a comment - Hi Jean-Laurent, Sorry for answering a bit late... Yes, the 2nd stacktrace sounds closer to this bug. Here's the one my team mate had:
JavaNCSS error
[INFO] Generate "JavaNCSS Report" report.
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Error during page generation

Embedded error: Error rendering Maven report: Error while loading javancss raw generated report.
Error on line 1105 of document file:///C:/ [snip] /target/javancss-raw-report.xml : Erreur de conversion de caractère : "Malformed UTF-8 char -- is an XML encoding declaration missing?" (le numéro de ligne peut  être trop bas). Nested exception: Erreur de conversion de caractère : "Malformed UTF-8 char -- is an XML encoding declaration missing?" (le numéro de ligne peut être trop bas).
[INFO] ------------------------------------------------------------------------
[INFO] Trace
org.apache.maven.lifecycle.LifecycleExecutionException: Error during page generation
	at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:559)
	at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalWithLifecycle(DefaultLifecycleExecutor.java:475)
	at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:454)
	at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:306)
	at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:273)
	at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:140)
	at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:322)
	at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:115)
	at org.apache.maven.cli.MavenCli.main(MavenCli.java:256)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:324)
	at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)
	at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
	at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)
	at org.codehaus.classworlds.Launcher.main(Launcher.java:375)
Caused by: org.apache.maven.plugin.MojoExecutionException: Error during page generation
	at org.apache.maven.plugins.site.SiteMojo.execute(SiteMojo.java:97)
	at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:412)
	at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:534)
	... 16 more
Caused by: org.apache.maven.doxia.siterenderer.RendererException: Error rendering Maven report: Error while loading javancss raw generated report.
	at org.apache.maven.plugins.site.ReportDocumentRenderer.renderDocument(ReportDocumentRenderer.java:71)
	at org.apache.maven.doxia.siterenderer.DefaultSiteRenderer.renderModule(DefaultSiteRenderer.java:239)
	at org.apache.maven.doxia.siterenderer.DefaultSiteRenderer.render(DefaultSiteRenderer.java:115)
	at org.apache.maven.plugins.site.SiteMojo.renderLocale(SiteMojo.java:124)
	at org.apache.maven.plugins.site.SiteMojo.execute(SiteMojo.java:92)
	... 18 more
Caused by: org.apache.maven.reporting.MavenReportException: Error while loading javancss raw generated report.
	at org.codehaus.mojo.javancss.NcssReportMojo.loadDocument(NcssReportMojo.java:205)
	at org.codehaus.mojo.javancss.NcssReportMojo.generateAggregateReport(NcssReportMojo.java:159)
	at org.codehaus.mojo.javancss.NcssReportMojo.executeReport(NcssReportMojo.java:124)
	at org.apache.maven.reporting.AbstractMavenReport.generate(AbstractMavenReport.java:98)
	at org.apache.maven.plugins.site.ReportDocumentRenderer.renderDocument(ReportDocumentRenderer.java:67)
	... 22 more
Caused by: org.dom4j.DocumentException: Error on line 1105 of document file:/// [snip] /target/javancss-raw-report.xml : Erreur de conversion de caractère : "Malformed UTF-8 char -- is an XML encoding declaration missing?" (le numéro de ligne peut être trop bas). Nested exception: Erreur de conversion de caractère : "Malformed UTF-8 char -- is an XML encoding declaration missing?" (le numéro de ligne peut être trop bas).
	at org.dom4j.io.SAXReader.read(SAXReader.java:482)
	at org.dom4j.io.SAXReader.read(SAXReader.java:264)
	at org.codehaus.mojo.javancss.NcssReportMojo.loadDocument(NcssReportMojo.java:201)
	... 26 more
As I sais, I haven't tested the solution I told you, but I'm pretty sure this would work.
Hide
Jean-Laurent de Morlhon added a comment -

Thanks for your stacktrace.
Unfortunatly your solution is not working on MacOSX as is.
In fact the encoding to be given to the SAXParser must be the one used to write the original source code.
Since it seems that JavaNCSS is not taking into account encoding properly.
In fact, if some of the source files are under UTF-8 and some under ISO-8859-1 the xml file produced by JavaNCSS will be flawed I think.
I'm still looking for a simple solution....

Show
Jean-Laurent de Morlhon added a comment - Thanks for your stacktrace. Unfortunatly your solution is not working on MacOSX as is. In fact the encoding to be given to the SAXParser must be the one used to write the original source code. Since it seems that JavaNCSS is not taking into account encoding properly. In fact, if some of the source files are under UTF-8 and some under ISO-8859-1 the xml file produced by JavaNCSS will be flawed I think. I'm still looking for a simple solution....
Hide
Jean-Laurent de Morlhon added a comment -

I committed in svn and uploaded a binary snapshot which seems to solve the problem. I successfully tested it on MacOSX & Windows XP with code written in ISO-8859-1.
I'll be glad to hear from your side, if, as I hope it will, solves the problem too.

Show
Jean-Laurent de Morlhon added a comment - I committed in svn and uploaded a binary snapshot which seems to solve the problem. I successfully tested it on MacOSX & Windows XP with code written in ISO-8859-1. I'll be glad to hear from your side, if, as I hope it will, solves the problem too.
Hide
Jean-Laurent de Morlhon added a comment -

Looks fixed from my side.

Show
Jean-Laurent de Morlhon added a comment - Looks fixed from my side.

People

Vote (0)
Watch (0)

Dates

  • Created:
    Updated:
    Resolved: