[ 
https://issues.apache.org/jira/browse/SUREFIRE-2257?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17877384#comment-17877384
 ] 

M.P. Korstanje commented on SUREFIRE-2257:
------------------------------------------

{quote}Interesting case. So the packagelessness causes the issue?{quote}

[~michael-o] No, but as a theory it accurate enough.

Fundamentally the problem is that a large part of the codebase work with 
assumptions that were true for JUnit 4 but are no longer true for JUnit 5.

[JUnit 5 consists of the JUnit Platform + JUnit Jupiter + JUnit 
Vintage|https://junit.org/junit5/docs/current/user-guide/#overview-what-is-junit-5].
 Here the Platform provides a generic framework for test engines, of which 
Jupiter, Vintage, Cucumber and other test frameworks are implementations. 

As a framework the JUnit Platform models tests as a tree of [TestDescriptors 
with display 
names|https://junit.org/junit5/docs/current/api/org.junit.platform.engine/org/junit/platform/engine/TestDescriptor.html#getDisplayName()].
 

Surefire however has to map this tree into a report with only two fields, a 
class name and name. It does this by taking the names of each leaf node and 
their parent nodes. And this mostly generally works.  Some information is 
already lost, but given the  limited report format there isn't much that can be 
done here. For example using JUnits {{@Suite}} annotation you can create an 
arbitrarily large tree of Suites before arriving at an actual test. These 
suites are omitted from the xml report.

Furthermore Surefire Report plugin tries to parse this information with the 
assumption that it is produced by JUnit 4 or JUnit Jupiter. But as get 
{{getDisplayName}} notes, it is not suitable for parsing. And Cucumber will 
provide display names that definitely aren't. Fortunately this the actual names 
are mostly immaterial to the report. So if their parsing is sufficiently 
defensive, the report will come out okay I guess.


> [REGRESSION] NPEx: Cannot invoke "Object.toString()" because "value" is null
> ----------------------------------------------------------------------------
>
>                 Key: SUREFIRE-2257
>                 URL: https://issues.apache.org/jira/browse/SUREFIRE-2257
>             Project: Maven Surefire
>          Issue Type: Bug
>          Components: Maven Surefire Report Plugin
>    Affects Versions: 3.5.0
>            Reporter: Piotr Zygielo
>            Assignee: Michael Osipov
>            Priority: Major
>             Fix For: 3.5.1
>
>         Attachments: 3.4.0-surefire-report.png, screenshot-1.png, 
> screenshot-2.png, surefire-3.5.0-2-g69c1b46d8.png
>
>
> On upgrading from 3.4.0 to 3.5.0 (so it works fine in 3.4.0), build breaks 
> with following:
> {code}
> [ERROR] Failed to execute goal 
> org.apache.maven.plugins:maven-site-plugin:3.20.0:site (default-site) on 
> project X: Failed to render site: Error generating 
> maven-surefire-report-plugin:3.5.0:report-only report: Cannot invoke 
> "Object.toString()" because "value" is null -> [Help 1]
> org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute 
> goal org.apache.maven.plugins:maven-site-plugin:3.20.0:site (default-site) on 
> project X: Failed to render site
>     at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2 
> (MojoExecutor.java:333)
>     at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute 
> (MojoExecutor.java:316)
>     at org.apache.maven.lifecycle.internal.MojoExecutor.execute 
> (MojoExecutor.java:212)
>     at org.apache.maven.lifecycle.internal.MojoExecutor.execute 
> (MojoExecutor.java:174)
>     at org.apache.maven.lifecycle.internal.MojoExecutor.access$000 
> (MojoExecutor.java:75)
>     at org.apache.maven.lifecycle.internal.MojoExecutor$1.run 
> (MojoExecutor.java:162)
>     at org.apache.maven.plugin.DefaultMojosExecutionStrategy.execute 
> (DefaultMojosExecutionStrategy.java:39)
>     at org.apache.maven.lifecycle.internal.MojoExecutor.execute 
> (MojoExecutor.java:159)
>     at 
> org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject 
> (LifecycleModuleBuilder.java:105)
>     at 
> org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject 
> (LifecycleModuleBuilder.java:73)
>     at 
> org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build
>  (SingleThreadedBuilder.java:53)
>     at org.apache.maven.lifecycle.internal.LifecycleStarter.execute 
> (LifecycleStarter.java:118)
>     at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:261)
>     at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:173)
>     at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:101)
>     at org.apache.maven.cli.MavenCli.execute (MavenCli.java:906)
>     at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:283)
>     at org.apache.maven.cli.MavenCli.main (MavenCli.java:206)
>     at jdk.internal.reflect.DirectMethodHandleAccessor.invoke 
> (DirectMethodHandleAccessor.java:103)
>     at java.lang.reflect.Method.invoke (Method.java:580)
>     at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced 
> (Launcher.java:255)
>     at org.codehaus.plexus.classworlds.launcher.Launcher.launch 
> (Launcher.java:201)
>     at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode 
> (Launcher.java:361)
>     at org.codehaus.plexus.classworlds.launcher.Launcher.main 
> (Launcher.java:314)
> Caused by: org.apache.maven.plugin.MojoExecutionException: Failed to render 
> site
>     at org.apache.maven.plugins.site.render.SiteMojo.execute 
> (SiteMojo.java:119)
>     at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo 
> (DefaultBuildPluginManager.java:126)
>     at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2 
> (MojoExecutor.java:328)
>     at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute 
> (MojoExecutor.java:316)
>     at org.apache.maven.lifecycle.internal.MojoExecutor.execute 
> (MojoExecutor.java:212)
>     at org.apache.maven.lifecycle.internal.MojoExecutor.execute 
> (MojoExecutor.java:174)
>     at org.apache.maven.lifecycle.internal.MojoExecutor.access$000 
> (MojoExecutor.java:75)
>     at org.apache.maven.lifecycle.internal.MojoExecutor$1.run 
> (MojoExecutor.java:162)
>     at org.apache.maven.plugin.DefaultMojosExecutionStrategy.execute 
> (DefaultMojosExecutionStrategy.java:39)
>     at org.apache.maven.lifecycle.internal.MojoExecutor.execute 
> (MojoExecutor.java:159)
>     at 
> org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject 
> (LifecycleModuleBuilder.java:105)
>     at 
> org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject 
> (LifecycleModuleBuilder.java:73)
>     at 
> org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build
>  (SingleThreadedBuilder.java:53)
>     at org.apache.maven.lifecycle.internal.LifecycleStarter.execute 
> (LifecycleStarter.java:118)
>     at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:261)
>     at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:173)
>     at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:101)
>     at org.apache.maven.cli.MavenCli.execute (MavenCli.java:906)
>     at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:283)
>     at org.apache.maven.cli.MavenCli.main (MavenCli.java:206)
>     at jdk.internal.reflect.DirectMethodHandleAccessor.invoke 
> (DirectMethodHandleAccessor.java:103)
>     at java.lang.reflect.Method.invoke (Method.java:580)
>     at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced 
> (Launcher.java:255)
>     at org.codehaus.plexus.classworlds.launcher.Launcher.launch 
> (Launcher.java:201)
>     at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode 
> (Launcher.java:361)
>     at org.codehaus.plexus.classworlds.launcher.Launcher.main 
> (Launcher.java:314)
> Caused by: org.apache.maven.doxia.siterenderer.RendererException: Error 
> generating maven-surefire-report-plugin:3.5.0:report-only report
>     at 
> org.apache.maven.plugins.site.render.ReportDocumentRenderer.renderDocument 
> (ReportDocumentRenderer.java:210)
>     at org.apache.maven.doxia.siterenderer.DefaultSiteRenderer.render 
> (DefaultSiteRenderer.java:300)
>     at org.apache.maven.plugins.site.render.SiteMojo.renderNonDoxiaDocuments 
> (SiteMojo.java:282)
>     at org.apache.maven.plugins.site.render.SiteMojo.renderLocale 
> (SiteMojo.java:147)
>     at org.apache.maven.plugins.site.render.SiteMojo.execute 
> (SiteMojo.java:112)
>     at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo 
> (DefaultBuildPluginManager.java:126)
>     at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2 
> (MojoExecutor.java:328)
>     at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute 
> (MojoExecutor.java:316)
>     at org.apache.maven.lifecycle.internal.MojoExecutor.execute 
> (MojoExecutor.java:212)
>     at org.apache.maven.lifecycle.internal.MojoExecutor.execute 
> (MojoExecutor.java:174)
>     at org.apache.maven.lifecycle.internal.MojoExecutor.access$000 
> (MojoExecutor.java:75)
>     at org.apache.maven.lifecycle.internal.MojoExecutor$1.run 
> (MojoExecutor.java:162)
>     at org.apache.maven.plugin.DefaultMojosExecutionStrategy.execute 
> (DefaultMojosExecutionStrategy.java:39)
>     at org.apache.maven.lifecycle.internal.MojoExecutor.execute 
> (MojoExecutor.java:159)
>     at 
> org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject 
> (LifecycleModuleBuilder.java:105)
>     at 
> org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject 
> (LifecycleModuleBuilder.java:73)
>     at 
> org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build
>  (SingleThreadedBuilder.java:53)
>     at org.apache.maven.lifecycle.internal.LifecycleStarter.execute 
> (LifecycleStarter.java:118)
>     at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:261)
>     at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:173)
>     at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:101)
>     at org.apache.maven.cli.MavenCli.execute (MavenCli.java:906)
>     at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:283)
>     at org.apache.maven.cli.MavenCli.main (MavenCli.java:206)
>     at jdk.internal.reflect.DirectMethodHandleAccessor.invoke 
> (DirectMethodHandleAccessor.java:103)
>     at java.lang.reflect.Method.invoke (Method.java:580)
>     at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced 
> (Launcher.java:255)
>     at org.codehaus.plexus.classworlds.launcher.Launcher.launch 
> (Launcher.java:201)
>     at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode 
> (Launcher.java:361)
>     at org.codehaus.plexus.classworlds.launcher.Launcher.main 
> (Launcher.java:314)
> Caused by: java.lang.NullPointerException: Cannot invoke "Object.toString()" 
> because "value" is null
>     at org.apache.maven.doxia.sink.impl.SinkUtils.getAttributeString 
> (SinkUtils.java:188)
>     at org.apache.maven.doxia.sink.impl.AbstractXmlSink.writeStartTag 
> (AbstractXmlSink.java:126)
>     at org.apache.maven.doxia.sink.impl.Xhtml5BaseSink.writeStartTag 
> (Xhtml5BaseSink.java:1647)
>     at org.apache.maven.doxia.sink.impl.AbstractXmlSink.writeStartTag 
> (AbstractXmlSink.java:95)
>     at org.apache.maven.doxia.sink.impl.Xhtml5BaseSink.anchor 
> (Xhtml5BaseSink.java:1204)
>     at org.apache.maven.doxia.sink.impl.AbstractSink.anchor 
> (AbstractSink.java:354)
>     at org.apache.maven.reporting.AbstractMavenReportRenderer.startSection 
> (AbstractMavenReportRenderer.java:132)
>     at org.apache.maven.reporting.AbstractMavenReportRenderer.startSection 
> (AbstractMavenReportRenderer.java:116)
>     at 
> org.apache.maven.plugins.surefire.report.SurefireReportRenderer.renderSectionPackages
>  (SurefireReportRenderer.java:220)
>     at 
> org.apache.maven.plugins.surefire.report.SurefireReportRenderer.renderBody 
> (SurefireReportRenderer.java:119)
>     at org.apache.maven.reporting.AbstractMavenReportRenderer.render 
> (AbstractMavenReportRenderer.java:93)
>     at 
> org.apache.maven.plugins.surefire.report.AbstractSurefireReport.executeReport 
> (AbstractSurefireReport.java:159)
>     at org.apache.maven.reporting.AbstractMavenReport.generate 
> (AbstractMavenReport.java:354)
>     at 
> org.apache.maven.plugins.site.render.ReportDocumentRenderer.renderDocument 
> (ReportDocumentRenderer.java:199)
>     at org.apache.maven.doxia.siterenderer.DefaultSiteRenderer.render 
> (DefaultSiteRenderer.java:300)
>     at org.apache.maven.plugins.site.render.SiteMojo.renderNonDoxiaDocuments 
> (SiteMojo.java:282)
>     at org.apache.maven.plugins.site.render.SiteMojo.renderLocale 
> (SiteMojo.java:147)
>     at org.apache.maven.plugins.site.render.SiteMojo.execute 
> (SiteMojo.java:112)
>     at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo 
> (DefaultBuildPluginManager.java:126)
>     at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2 
> (MojoExecutor.java:328)
>     at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute 
> (MojoExecutor.java:316)
>     at org.apache.maven.lifecycle.internal.MojoExecutor.execute 
> (MojoExecutor.java:212)
>     at org.apache.maven.lifecycle.internal.MojoExecutor.execute 
> (MojoExecutor.java:174)
>     at org.apache.maven.lifecycle.internal.MojoExecutor.access$000 
> (MojoExecutor.java:75)
>     at org.apache.maven.lifecycle.internal.MojoExecutor$1.run 
> (MojoExecutor.java:162)
>     at org.apache.maven.plugin.DefaultMojosExecutionStrategy.execute 
> (DefaultMojosExecutionStrategy.java:39)
>     at org.apache.maven.lifecycle.internal.MojoExecutor.execute 
> (MojoExecutor.java:159)
>     at 
> org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject 
> (LifecycleModuleBuilder.java:105)
>     at 
> org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject 
> (LifecycleModuleBuilder.java:73)
>     at 
> org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build
>  (SingleThreadedBuilder.java:53)
>     at org.apache.maven.lifecycle.internal.LifecycleStarter.execute 
> (LifecycleStarter.java:118)
>     at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:261)
>     at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:173)
>     at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:101)
>     at org.apache.maven.cli.MavenCli.execute (MavenCli.java:906)
>     at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:283)
>     at org.apache.maven.cli.MavenCli.main (MavenCli.java:206)
>     at jdk.internal.reflect.DirectMethodHandleAccessor.invoke 
> (DirectMethodHandleAccessor.java:103)
>     at java.lang.reflect.Method.invoke (Method.java:580)
>     at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced 
> (Launcher.java:255)
>     at org.codehaus.plexus.classworlds.launcher.Launcher.launch 
> (Launcher.java:201)
>     at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode 
> (Launcher.java:361)
>     at org.codehaus.plexus.classworlds.launcher.Launcher.main 
> (Launcher.java:314)
> {code}
> maven 3.9.3, jdk 21
> {code}
> # only skipped commits left to test
> # possible first bad commit: [05e4681f38f53c2a54b7671291ca02dc63586a98] 
> [SUREFIRE-2227] Dynamically calculate xrefTestLocation
> # possible first bad commit: [f1a419a1457e5a83f9deb07a700a1376487f72ed] 
> [SUREFIRE-2228] Upgrade to Doxia 2.0.0 Milestone Stack
> {code}
> (f1a419a1 failed to compile)



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to