Skip to content

ClassCastExceptions and Nullpointers when applying recipe migrate-jax-rs #475

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
vbotteman opened this issue Oct 10, 2022 · 2 comments · Fixed by #509
Closed

ClassCastExceptions and Nullpointers when applying recipe migrate-jax-rs #475

vbotteman opened this issue Oct 10, 2022 · 2 comments · Fixed by #509
Assignees
Labels
type: bug Something isn't working

Comments

@vbotteman
Copy link

Describe the bug
When I apply the recipe migrate-jax-rs on our Spring Boot 2.5 project, then I get ClassCastExceptions and NullPointerExceptions.

Stacktrace

ERROR o.s.s.o.RewriteExecutionContext - Exception occured!
org.openrewrite.UncaughtVisitorException: java.lang.ClassCastException: class org.openrewrite.java.tree.J$FieldAccess cannot be cast to class org.openrewrite.java.tree.J$Identifier (org.openrewrite.java.tree.J$FieldAccess and org.openrewrite.java.tree.J$Identifier are in unnamed module of loader org.springframework.boot.loader.LaunchedURLClassLoader @198e2867)
        at org.openrewrite.TreeVisitor.visit(TreeVisitor.java:253)
        at org.openrewrite.TreeVisitor.visitAndCast(TreeVisitor.java:285)
        at org.openrewrite.java.JavaVisitor.visitFieldAccess(JavaVisitor.java:575)
        at org.springframework.sbm.java.migration.recipes.FindReplaceFieldAccessors$1.visitFieldAccess(FindReplaceFieldAccessors.java:64)
        at org.springframework.sbm.java.migration.recipes.FindReplaceFieldAccessors$1.visitFieldAccess(FindReplaceFieldAccessors.java:60)
        at org.openrewrite.java.tree.J$FieldAccess.acceptJava(J.java:1735)
        at org.openrewrite.java.tree.J.accept(J.java:60)
        at org.openrewrite.TreeVisitor.visit(TreeVisitor.java:206)
        at org.openrewrite.TreeVisitor.visitAndCast(TreeVisitor.java:285)
        at org.openrewrite.java.JavaVisitor.visitImport(JavaVisitor.java:674)
        at org.openrewrite.java.tree.J$Import.acceptJava(J.java:2395)
        at org.openrewrite.java.tree.J.accept(J.java:60)
        at org.openrewrite.TreeVisitor.visit(TreeVisitor.java:206)
        at org.openrewrite.TreeVisitor.visitAndCast(TreeVisitor.java:285)
        at org.openrewrite.java.JavaVisitor.visitRightPadded(JavaVisitor.java:1226)
        at org.openrewrite.java.JavaVisitor.lambda$visitCompilationUnit$9(JavaVisitor.java:465)
        at org.openrewrite.internal.ListUtils.lambda$map$0(ListUtils.java:141)
        at org.openrewrite.internal.ListUtils.map(ListUtils.java:123)
        at org.openrewrite.internal.ListUtils.map(ListUtils.java:141)
        at org.openrewrite.java.JavaVisitor.visitCompilationUnit(JavaVisitor.java:465)
        at org.openrewrite.java.JavaVisitor.visitJavaSourceFile(JavaVisitor.java:454)
        at org.openrewrite.java.tree.J$CompilationUnit.acceptJava(J.java:1351)
        at org.openrewrite.java.tree.J.accept(J.java:60)
        at org.openrewrite.TreeVisitor.visit(TreeVisitor.java:206)
        at org.openrewrite.RecipeScheduler.lambda$scheduleVisit$5(RecipeScheduler.java:241)
        at org.openrewrite.RecipeScheduler.lambda$mapAsync$0(RecipeScheduler.java:49)
        at org.openrewrite.scheduling.ForkJoinScheduler.lambda$schedule$0(ForkJoinScheduler.java:41)
        at java.base/java.util.concurrent.ForkJoinTask$AdaptedRunnableAction.exec(ForkJoinTask.java:1375)
        at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:373)
        at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1182)
        at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1655)
        at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1622)
        at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:165)
Caused by: java.lang.ClassCastException: class org.openrewrite.java.tree.J$FieldAccess cannot be cast to class org.openrewrite.java.tree.J$Identifier (org.openrewrite.java.tree.J$FieldAccess and org.openrewrite.java.tree.J$Identifier are in unnamed module of loader org.springframework.boot.loader.LaunchedURLClassLoader @198e2867)
        at org.openrewrite.java.tree.J$FieldAccess.getName(J.java:1721)
        at org.springframework.sbm.java.migration.recipes.FindReplaceFieldAccessors$1.visitFieldAccess(FindReplaceFieldAccessors.java:68)
        at org.springframework.sbm.java.migration.recipes.FindReplaceFieldAccessors$1.visitFieldAccess(FindReplaceFieldAccessors.java:60)
        at org.openrewrite.java.tree.J$FieldAccess.acceptJava(J.java:1735)
        at org.openrewrite.java.tree.J.accept(J.java:60)
        at org.openrewrite.TreeVisitor.visit(TreeVisitor.java:206)
        ... 32 common frames omitted
ERROR o.s.s.o.RewriteExecutionContext - Exception occured!
org.openrewrite.UncaughtVisitorException: java.lang.NullPointerException: Cannot invoke "org.openrewrite.java.tree.Expression.getMarkers()" because the return value of "org.openrewrite.java.tree.J$Return.getExpression()" is null
        at org.openrewrite.TreeVisitor.visit(TreeVisitor.java:253)
        at org.openrewrite.TreeVisitor.visitAndCast(TreeVisitor.java:285)
        at org.openrewrite.java.JavaVisitor.visitRightPadded(JavaVisitor.java:1226)
        at org.openrewrite.java.JavaVisitor.lambda$visitBlock$4(JavaVisitor.java:367)
        at org.openrewrite.internal.ListUtils.lambda$map$0(ListUtils.java:141)
        at org.openrewrite.internal.ListUtils.map(ListUtils.java:123)
        at org.openrewrite.internal.ListUtils.map(ListUtils.java:141)
        at org.openrewrite.java.JavaVisitor.visitBlock(JavaVisitor.java:366)
        at org.openrewrite.java.JavaIsoVisitor.visitBlock(JavaIsoVisitor.java:94)
        at org.openrewrite.java.JavaIsoVisitor.visitBlock(JavaIsoVisitor.java:31)
        at org.openrewrite.java.tree.J$Block.acceptJava(J.java:745)
        at org.openrewrite.java.tree.J.accept(J.java:60)
        at org.openrewrite.TreeVisitor.visit(TreeVisitor.java:206)
        at org.openrewrite.TreeVisitor.visitAndCast(TreeVisitor.java:285)
        at org.openrewrite.java.JavaVisitor.visitRightPadded(JavaVisitor.java:1226)
        at org.openrewrite.java.JavaVisitor.visitIf(JavaVisitor.java:664)
        at org.openrewrite.java.JavaIsoVisitor.visitIf(JavaIsoVisitor.java:190)
        at org.openrewrite.java.JavaIsoVisitor.visitIf(JavaIsoVisitor.java:31)
        at org.openrewrite.java.tree.J$If.acceptJava(J.java:2253)
        at org.openrewrite.java.tree.J.accept(J.java:60)
        at org.openrewrite.TreeVisitor.visit(TreeVisitor.java:206)
        at org.openrewrite.TreeVisitor.visitAndCast(TreeVisitor.java:285)
        at org.openrewrite.java.JavaVisitor.visitRightPadded(JavaVisitor.java:1226)
        at org.openrewrite.java.JavaVisitor.lambda$visitBlock$4(JavaVisitor.java:367)
        at org.openrewrite.internal.ListUtils.lambda$map$0(ListUtils.java:141)
        at org.openrewrite.internal.ListUtils.map(ListUtils.java:123)
        at org.openrewrite.internal.ListUtils.map(ListUtils.java:141)
        at org.openrewrite.java.JavaVisitor.visitBlock(JavaVisitor.java:366)
        at org.openrewrite.java.JavaIsoVisitor.visitBlock(JavaIsoVisitor.java:94)
        at org.openrewrite.java.JavaIsoVisitor.visitBlock(JavaIsoVisitor.java:31)
        at org.openrewrite.java.tree.J$Block.acceptJava(J.java:745)
        at org.openrewrite.java.tree.J.accept(J.java:60)
        at org.openrewrite.TreeVisitor.visit(TreeVisitor.java:206)
        at org.openrewrite.TreeVisitor.visitAndCast(TreeVisitor.java:285)
        at org.openrewrite.java.JavaVisitor.visitMethodDeclaration(JavaVisitor.java:810)
        at org.openrewrite.java.JavaIsoVisitor.visitMethodDeclaration(JavaIsoVisitor.java:225)
        at org.openrewrite.java.JavaIsoVisitor.visitMethodDeclaration(JavaIsoVisitor.java:31)
        at org.openrewrite.java.tree.J$MethodDeclaration.acceptJava(J.java:3221)
        at org.openrewrite.java.tree.J.accept(J.java:60)
        at org.openrewrite.TreeVisitor.visit(TreeVisitor.java:206)
        at org.openrewrite.TreeVisitor.visitAndCast(TreeVisitor.java:285)
        at org.openrewrite.java.JavaVisitor.visitRightPadded(JavaVisitor.java:1226)
        at org.openrewrite.java.JavaVisitor.lambda$visitBlock$4(JavaVisitor.java:367)
        at org.openrewrite.internal.ListUtils.lambda$map$0(ListUtils.java:141)
        at org.openrewrite.internal.ListUtils.map(ListUtils.java:123)
        at org.openrewrite.internal.ListUtils.map(ListUtils.java:141)
        at org.openrewrite.java.JavaVisitor.visitBlock(JavaVisitor.java:366)
        at org.openrewrite.java.JavaIsoVisitor.visitBlock(JavaIsoVisitor.java:94)
        at org.openrewrite.java.JavaIsoVisitor.visitBlock(JavaIsoVisitor.java:31)
        at org.openrewrite.java.tree.J$Block.acceptJava(J.java:745)
        at org.openrewrite.java.tree.J.accept(J.java:60)
        at org.openrewrite.TreeVisitor.visit(TreeVisitor.java:206)
        at org.openrewrite.TreeVisitor.visitAndCast(TreeVisitor.java:285)
        at org.openrewrite.java.JavaVisitor.visitClassDeclaration(JavaVisitor.java:447)
        at org.openrewrite.java.JavaIsoVisitor.visitClassDeclaration(JavaIsoVisitor.java:114)
        at org.openrewrite.java.JavaIsoVisitor.visitClassDeclaration(JavaIsoVisitor.java:31)
        at org.openrewrite.java.tree.J$ClassDeclaration.acceptJava(J.java:1069)
        at org.openrewrite.java.tree.J.accept(J.java:60)
        at org.openrewrite.TreeVisitor.visit(TreeVisitor.java:206)
        at org.openrewrite.TreeVisitor.visitAndCast(TreeVisitor.java:285)
        at org.openrewrite.java.JavaVisitor.lambda$visitCompilationUnit$10(JavaVisitor.java:466)
        at org.openrewrite.internal.ListUtils.lambda$map$0(ListUtils.java:141)
        at org.openrewrite.internal.ListUtils.map(ListUtils.java:123)
        at org.openrewrite.internal.ListUtils.map(ListUtils.java:141)
        at org.openrewrite.java.JavaVisitor.visitCompilationUnit(JavaVisitor.java:466)
        at org.openrewrite.java.JavaIsoVisitor.visitCompilationUnit(JavaIsoVisitor.java:119)
        at org.openrewrite.java.JavaIsoVisitor.visitCompilationUnit(JavaIsoVisitor.java:31)
        at org.openrewrite.java.JavaVisitor.visitJavaSourceFile(JavaVisitor.java:454)
        at org.openrewrite.java.JavaIsoVisitor.visitJavaSourceFile(JavaIsoVisitor.java:39)
        at org.openrewrite.java.JavaIsoVisitor.visitJavaSourceFile(JavaIsoVisitor.java:31)
        at org.openrewrite.java.tree.J$CompilationUnit.acceptJava(J.java:1351)
        at org.openrewrite.java.tree.J.accept(J.java:60)
        at org.openrewrite.TreeVisitor.visit(TreeVisitor.java:206)
        at org.openrewrite.RecipeScheduler.lambda$scheduleVisit$5(RecipeScheduler.java:241)
        at org.openrewrite.RecipeScheduler.lambda$mapAsync$0(RecipeScheduler.java:49)
        at org.openrewrite.scheduling.ForkJoinScheduler.lambda$schedule$0(ForkJoinScheduler.java:41)
        at java.base/java.util.concurrent.ForkJoinTask$AdaptedRunnableAction.exec(ForkJoinTask.java:1375)
        at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:373)
        at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1182)
        at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1655)
        at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1622)
        at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:165)
Caused by: java.lang.NullPointerException: Cannot invoke "org.openrewrite.java.tree.Expression.getMarkers()" because the return value of "org.openrewrite.java.tree.J$Return.getExpression()" is null
        at org.springframework.sbm.java.migration.visitor.VisitorUtils$AdjustTypesFromExpressionMarkers$1.visitReturn(VisitorUtils.java:164)
        at org.springframework.sbm.java.migration.visitor.VisitorUtils$AdjustTypesFromExpressionMarkers$1.visitReturn(VisitorUtils.java:159)
        at org.openrewrite.java.tree.J$Return.acceptJava(J.java:4417)
        at org.openrewrite.java.tree.J.accept(J.java:60)
        at org.openrewrite.TreeVisitor.visit(TreeVisitor.java:206)
        ... 81 common frames omitted

Desktop (please complete the following information):

  • OS: Windows
  • Version: 11 21H2

Additional context
Java: graalvm-ce-java17-21.3.3

@fabapp2 fabapp2 added the type: bug Something isn't working label Oct 12, 2022
@vbotteman
Copy link
Author

I was able to simulate the first error in a simple project, see attachment
spring-boot-migrator-475.zip

@fabapp2 fabapp2 self-assigned this Oct 17, 2022
@fabapp2
Copy link
Contributor

fabapp2 commented Oct 17, 2022

Hi @vbotteman
Thanks for reporting and for the demo application!
I gave it a try and migrate-jax-rs does some useful things before it confirms successful execution.
Actually, I doubt that any other elements will be migrated but I didn't check very thoroughly.
The class cast exception comes from inside OpenRewrite. I need to debug a bit more to figure out where it exactly comes from.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
type: bug Something isn't working
Projects
None yet
2 participants