Wie verwende ich JavaTemplate richtig, um weitere Methodenaufrufe zu verketten?Java

Java-Forum
Guest
 Wie verwende ich JavaTemplate richtig, um weitere Methodenaufrufe zu verketten?

Post by Guest »

Ich versuche, org.openrewrite.java.JavaTemplate zu verwenden, um einen PermitAll-Methodenaufruf durch eine Kette weiterer Methodenaufrufe zu ersetzen. Hier ist meine Implementierung der Methode „visitMethodInvocation in einem JavaIsoVisitor:

Code: Select all

@Override
public J.MethodInvocation visitMethodInvocation(final J.MethodInvocation method, final ExecutionContext ctx) {
if (method.getSimpleName().equals("permitAll") && isExpressionUrlAuthorizationConfigurer(method.getSelect())) {
final JavaTemplate template = JavaTemplate.builder(
"permitAll().and().anonymous(Customizer.withDefaults()).httpBasic(AbstractHttpConfigurer::disable)")
.imports(
"org.springframework.security.config.Customizer",
"org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer")
.build();
return template.apply(getCursor(), method.getCoordinates().replaceMethod());
}
return super.visitMethodInvocation(method, ctx);
}
Wenn ich template.apply() aufrufe, schlägt es mit der folgenden Ausnahme fehl:

Code: Select all

java.lang.IllegalStateException: Expected to find enclosing SourceFile
at org.openrewrite.Cursor.firstEnclosingOrThrow (Cursor.java:178)
at org.openrewrite.Tree.printer (Tree.java:73)
at org.openrewrite.Tree.print(Tree.java:81)
at org.openrewrite.Tree.print(Tree.java:77)
at org.openrewrite.java.internal.template.JavaTemplateParser.parseMethod (JavaTemplateParser.java:187)
Ich kann diese Ausnahme reproduzieren, indem ich method.getSelect().print(getCursor()); direkt für die Methode aufrufe, die an die Besuchermethode übergeben wurde.
Fragen:
  • Was mache ich falsch beim Einrichten oder Anwenden des JavaTemplate? ?
  • Könnte das ein Fehler sein (z. B. in org.openrewrite.java.JavaTemplate) oder in der Art und Weise, wie J.MethodInvocation erstellt wird (das Gleiche passiert in einem Komponententest und wenn es „echt“ angewendet wird – was darauf hinweist, dass diese Methode hat keine Quelldatei).
Jede Einsicht oder Anregung wäre sehr dankbar!

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post