diff --git a/http-generator-core/src/main/java/io/avaje/http/generator/core/BaseProcessor.java b/http-generator-core/src/main/java/io/avaje/http/generator/core/BaseProcessor.java index 02bc89ec..8ea2f187 100644 --- a/http-generator-core/src/main/java/io/avaje/http/generator/core/BaseProcessor.java +++ b/http-generator-core/src/main/java/io/avaje/http/generator/core/BaseProcessor.java @@ -187,8 +187,8 @@ private void writeClientAdapter(ControllerReader reader) { try { if (reader.beanType().getInterfaces().isEmpty() - && "java.lang.Object".equals(reader.beanType().getSuperclass().toString())) { - new TestClientWriter(reader).write(); + && "java.lang.Object".equals(reader.beanType().getSuperclass().toString()) + && new TestClientWriter(reader).write()) { clientFQNs.add(reader.beanType().getQualifiedName().toString() + "TestAPI"); } } catch (final IOException e) { diff --git a/http-generator-core/src/main/java/io/avaje/http/generator/core/TestClientWriter.java b/http-generator-core/src/main/java/io/avaje/http/generator/core/TestClientWriter.java index a85c50a6..4ea2c74c 100644 --- a/http-generator-core/src/main/java/io/avaje/http/generator/core/TestClientWriter.java +++ b/http-generator-core/src/main/java/io/avaje/http/generator/core/TestClientWriter.java @@ -54,12 +54,13 @@ protected String initPackageName(String originName) { return dp > -1 ? originName.substring(0, dp) : null; } - void write() { - if (methods.isEmpty()) return; + boolean write() { + if (methods.isEmpty()) return false; writePackage(); writeImports(); writeClassStart(); writeAddRoutes(); + return true; } protected void writePackage() { diff --git a/tests/test-jex/src/main/java/org/example/web/ErrorController.java b/tests/test-jex/src/main/java/org/example/web/ErrorController.java new file mode 100644 index 00000000..4ebeeaa6 --- /dev/null +++ b/tests/test-jex/src/main/java/org/example/web/ErrorController.java @@ -0,0 +1,29 @@ +package org.example.web; + +import io.avaje.http.api.Controller; +import io.avaje.http.api.ExceptionHandler; +import io.avaje.http.api.Filter; +import io.avaje.http.api.Produces; +import io.avaje.jex.http.Context; +import io.avaje.jex.http.HttpFilter.FilterChain; + +@Controller +public class ErrorController { + + @Filter + void filter(FilterChain chain) { + // do nothing + chain.proceed(); + } + + @ExceptionHandler + String exception(RuntimeException ex) { + return "Err: " + ex; + } + + @Produces(statusCode = 501) + @ExceptionHandler + HelloDto exceptionCtx(IllegalAccessException ex, Context ctx) { + return null; + } +}