Skip to content

Commit 8fe71bd

Browse files
authored
Merge pull request #231 from SentryMan/jsonb-module
Fix Jsonb Controller for modular projects without compiler plugin
2 parents 5f541b1 + 05f8f76 commit 8fe71bd

File tree

9 files changed

+49
-75
lines changed

9 files changed

+49
-75
lines changed

README.md

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,6 @@ public class WidgetController$Route implements WebRoutes {
159159
});
160160

161161
}
162-
163162
}
164163
```
165164

@@ -190,7 +189,6 @@ public class WidgetController$Route implements Service {
190189
private void _getAll(ServerRequest req, ServerResponse res) {
191190
res.send(controller.getAll());
192191
}
193-
194192
}
195193
```
196194

@@ -224,7 +222,6 @@ public class WidgetController$Route implements HttpService {
224222
var result = controller.getAll();
225223
res.send(result);
226224
}
227-
228225
}
229226
```
230227

@@ -264,7 +261,6 @@ public class WidgetController$Route implements WebRoutes {
264261
});
265262

266263
}
267-
268264
}
269265
```
270266

@@ -296,16 +292,15 @@ public class WidgetController$Route implements HttpService {
296292
var pathParams = req.path().pathParameters();
297293
int id = asInt(pathParams.first("id").get());
298294
var result = controller.getById(id);
299-
res.headers().contentType(io.helidon.common.http.HttpMediaType.APPLICATION_JSON);
300-
widgetJsonType.toJson(result, res.outputStream());
295+
res.headers().contentType(HttpMediaType.APPLICATION_JSON);
296+
widgetJsonType.toJson(result, JsonOutput.of(res));
301297
}
302298

303299
private void _getAll(ServerRequest req, ServerResponse res) {
304300
var pathParams = req.path().pathParameters();
305301
var result = controller.getAll();
306-
res.headers().contentType(io.helidon.common.http.HttpMediaType.APPLICATION_JSON);
307-
listWidgetJsonType.toJson(result, res.outputStream());
302+
res.headers().contentType(HttpMediaType.APPLICATION_JSON);
303+
listWidgetJsonType.toJson(result, JsonOutput.of(res));
308304
}
309-
310305
}
311306
```

http-generator-client/src/main/java/io/avaje/http/generator/client/ClientProcessor.java

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,28 +20,19 @@
2020
import io.avaje.http.generator.core.ClientPrism;
2121
import io.avaje.http.generator.core.ControllerReader;
2222
import io.avaje.http.generator.core.ImportPrism;
23-
import io.avaje.http.generator.core.JsonBUtil;
2423
import io.avaje.http.generator.core.ProcessingContext;
2524

2625
@SupportedAnnotationTypes({ClientPrism.PRISM_TYPE, ImportPrism.PRISM_TYPE})
2726
public class ClientProcessor extends AbstractProcessor {
2827

2928
private final ComponentMetaData metaData = new ComponentMetaData();
3029

31-
private final boolean useJsonB;
30+
private boolean useJsonB;
3231

3332
private SimpleComponentWriter componentWriter;
3433

3534
private boolean readModuleInfo;
3635

37-
public ClientProcessor() {
38-
useJsonB = JsonBUtil.detectJsonb();
39-
}
40-
41-
public ClientProcessor(boolean useJsonb) {
42-
useJsonB = useJsonb;
43-
}
44-
4536
@Override
4637
public SourceVersion getSupportedSourceVersion() {
4738
return SourceVersion.latest();
@@ -52,8 +43,8 @@ public synchronized void init(ProcessingEnvironment processingEnv) {
5243
super.init(processingEnv);
5344
this.processingEnv = processingEnv;
5445
ProcessingContext.init(processingEnv, new ClientPlatformAdapter(), false);
55-
5646
this.componentWriter = new SimpleComponentWriter(metaData);
47+
useJsonB = ProcessingContext.useJsonb();
5748
}
5849

5950
@Override

http-generator-core/src/main/java/io/avaje/http/generator/core/BaseProcessor.java

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
@SupportedOptions({"useJavax", "useSingleton", "instrumentRequests","disableDirectWrites"})
1515
public abstract class BaseProcessor extends AbstractProcessor {
1616

17+
protected boolean useJsonB;
18+
1719
@Override
1820
public SourceVersion getSupportedSourceVersion() {
1921
return SourceVersion.latest();
@@ -28,6 +30,7 @@ public Set<String> getSupportedAnnotationTypes() {
2830
public synchronized void init(ProcessingEnvironment processingEnv) {
2931
super.init(processingEnv);
3032
ProcessingContext.init(processingEnv, providePlatformAdapter());
33+
useJsonB = ProcessingContext.useJsonb();
3134
}
3235

3336
/** Provide the platform specific adapter to use for Javalin, Helidon etc. */
@@ -44,7 +47,7 @@ public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment
4447

4548
final Set<? extends Element> controllers =
4649
round.getElementsAnnotatedWith(typeElement(ControllerPrism.PRISM_TYPE));
47-
for (Element controller : controllers) {
50+
for (final Element controller : controllers) {
4851
writeAdapter(controller);
4952
}
5053

@@ -57,32 +60,32 @@ public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment
5760
private void readOpenApiDefinition(RoundEnvironment round) {
5861
final Set<? extends Element> elements =
5962
round.getElementsAnnotatedWith(typeElement(OpenAPIDefinitionPrism.PRISM_TYPE));
60-
for (Element element : elements) {
63+
for (final Element element : elements) {
6164
doc().readApiDefinition(element);
6265
}
6366
}
6467

6568
private void readTagDefinitions(RoundEnvironment round) {
6669
Set<? extends Element> elements =
6770
round.getElementsAnnotatedWith(typeElement(TagPrism.PRISM_TYPE));
68-
for (Element element : elements) {
71+
for (final Element element : elements) {
6972
doc().addTagDefinition(element);
7073
}
7174

7275
elements = round.getElementsAnnotatedWith(typeElement(TagsPrism.PRISM_TYPE));
73-
for (Element element : elements) {
76+
for (final Element element : elements) {
7477
doc().addTagsDefinition(element);
7578
}
7679
}
7780

7881
private void readSecuritySchemes(RoundEnvironment round) {
7982
Set<? extends Element> elements = round.getElementsAnnotatedWith(typeElement(SecuritySchemePrism.PRISM_TYPE));
80-
for (Element element : elements) {
83+
for (final Element element : elements) {
8184
doc().addSecurityScheme(element);
8285
}
8386

8487
elements = round.getElementsAnnotatedWith(typeElement(SecuritySchemesPrism.PRISM_TYPE));
85-
for (Element element : elements) {
88+
for (final Element element : elements) {
8689
doc().addSecuritySchemes(element);
8790
}
8891
}
@@ -93,11 +96,11 @@ private void writeOpenAPI() {
9396

9497
private void writeAdapter(Element controller) {
9598
if (controller instanceof TypeElement) {
96-
ControllerReader reader = new ControllerReader((TypeElement) controller);
99+
final ControllerReader reader = new ControllerReader((TypeElement) controller);
97100
reader.read(true);
98101
try {
99102
writeControllerAdapter(reader);
100-
} catch (Throwable e) {
103+
} catch (final Throwable e) {
101104
e.printStackTrace();
102105
logError(reader.beanType(), "Failed to write $Route class " + e);
103106
}

http-generator-core/src/main/java/io/avaje/http/generator/core/JsonBUtil.java

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,6 @@
88
public class JsonBUtil {
99
private JsonBUtil() {}
1010

11-
/**
12-
* Return true if avaje-jsonb is detected in the classpath.
13-
*/
14-
public static boolean detectJsonb() {
15-
try {
16-
Class.forName("io.avaje.jsonb.Jsonb");
17-
return true;
18-
} catch (final ClassNotFoundException e) {
19-
return false;
20-
}
21-
}
22-
2311
public static Map<String, UType> jsonTypes(ControllerReader reader) {
2412

2513
final Map<String, UType> jsonTypes = new LinkedHashMap<>();

http-generator-core/src/main/java/io/avaje/http/generator/core/ProcessingContext.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ private static final class Ctx {
4242
private final String diAnnotation;
4343
private final boolean instrumentAllMethods;
4444
private final boolean disableDirectWrites;
45+
private final boolean useJsonb;
4546

4647
Ctx(ProcessingEnvironment env, PlatformAdapter adapter, boolean generateOpenAPI) {
4748
readAdapter = adapter;
@@ -65,7 +66,7 @@ private static final class Ctx {
6566
useComponent = elementUtils.getTypeElement(Constants.COMPONENT) != null;
6667
}
6768
diAnnotation = (useComponent ? "@Component" : "@Singleton");
68-
69+
useJsonb = elementUtils.getTypeElement("io.avaje.jsonb.Jsonb") != null;
6970
final var javax = elementUtils.getTypeElement(Constants.SINGLETON_JAVAX) != null;
7071
final var jakarta = elementUtils.getTypeElement(Constants.SINGLETON_JAKARTA) != null;
7172
final var override = options.get("useJavax");
@@ -186,6 +187,10 @@ public static boolean instrumentAllWebMethods() {
186187
return CTX.get().instrumentAllMethods;
187188
}
188189

190+
public static boolean useJsonb() {
191+
return CTX.get().useJsonb;
192+
}
193+
189194
public static boolean disabledDirectWrites() {
190195
return CTX.get().disableDirectWrites;
191196
}

http-generator-javalin/src/main/java/io/avaje/http/generator/javalin/JavalinProcessor.java

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,6 @@
66

77
public class JavalinProcessor extends BaseProcessor {
88

9-
private final boolean useJsonB;
10-
11-
public JavalinProcessor() {
12-
useJsonB = JsonBUtil.detectJsonb();
13-
}
14-
15-
public JavalinProcessor(boolean useJsonb) {
16-
useJsonB = useJsonb;
17-
}
18-
199
@Override
2010
protected PlatformAdapter providePlatformAdapter() {
2111
return new JavalinAdapter(useJsonB);

http-generator-nima/src/main/java/io/avaje/http/generator/helidon/nima/NimaProcessor.java

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,23 +6,13 @@
66

77
public class NimaProcessor extends BaseProcessor {
88

9-
private final boolean jsonB;
10-
11-
public NimaProcessor() {
12-
jsonB = JsonBUtil.detectJsonb();
13-
}
14-
15-
public NimaProcessor(boolean useJsonb) {
16-
jsonB = useJsonb;
17-
}
18-
199
@Override
2010
protected PlatformAdapter providePlatformAdapter() {
2111
return new NimaPlatformAdapter();
2212
}
2313

2414
@Override
2515
public void writeControllerAdapter(ControllerReader reader) throws IOException {
26-
new ControllerWriter(reader, jsonB).write();
16+
new ControllerWriter(reader, useJsonB).write();
2717
}
2818
}

tests/test-javalin-jsonb/src/test/java/io/avaje/http/generator/JavalinProcessorTest.java

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,12 @@ public void runAnnotationProcessor() throws Exception {
5151

5252
final var task =
5353
compiler.getTask(
54-
new PrintWriter(System.out), null, null, List.of("--release=11"), null, files);
54+
new PrintWriter(System.out),
55+
null,
56+
null,
57+
List.of("--release=11", "-AdisableDirectWrites=true"),
58+
null,
59+
files);
5560
task.setProcessors(List.of(new JavalinProcessor()));
5661

5762
assertThat(task.call()).isTrue();
@@ -71,7 +76,7 @@ public void runAnnotationProcessorJsonB() throws Exception {
7176
final var task =
7277
compiler.getTask(
7378
new PrintWriter(System.out), null, null, List.of("--release=11"), null, files);
74-
task.setProcessors(List.of(new JavalinProcessor(true), new Processor()));
79+
task.setProcessors(List.of(new JavalinProcessor(), new Processor()));
7580

7681
assertThat(task.call()).isTrue();
7782
assert Files.readString(
@@ -92,10 +97,14 @@ public void runAnnotationProcessorJavax() throws Exception {
9297
new PrintWriter(System.out),
9398
null,
9499
null,
95-
List.of("--release=11", "-AuseJavax=true", "-AuseSingleton=true"),
100+
List.of(
101+
"--release=11",
102+
"-AuseJavax=true",
103+
"-AuseSingleton=true",
104+
"-AdisableDirectWrites=true"),
96105
null,
97106
files);
98-
task.setProcessors(List.of(new JavalinProcessor(false), new Processor()));
107+
task.setProcessors(List.of(new JavalinProcessor(), new Processor()));
99108
// we don't have javax on the cp
100109
assertThat(task.call()).isFalse();
101110

@@ -117,10 +126,14 @@ public void runAnnotationProcessorJakarta() throws Exception {
117126
new PrintWriter(System.out),
118127
null,
119128
null,
120-
List.of("--release=11", "-AuseJavax=false", "-AuseSingleton=true"),
129+
List.of(
130+
"--release=11",
131+
"-AuseJavax=false",
132+
"-AuseSingleton=true",
133+
"-AdisableDirectWrites=true"),
121134
null,
122135
files);
123-
task.setProcessors(List.of(new JavalinProcessor(false), new Processor()));
136+
task.setProcessors(List.of(new JavalinProcessor(), new Processor()));
124137

125138
assertThat(task.call()).isTrue();
126139

@@ -147,10 +160,10 @@ public void testOpenAPIGeneration() throws Exception {
147160
new PrintWriter(System.out),
148161
null,
149162
null,
150-
List.of("--release=11"),
163+
List.of("--release=11", "-AdisableDirectWrites=true"),
151164
null,
152165
openAPIController);
153-
task.setProcessors(List.of(new JavalinProcessor(false), new Processor()));
166+
task.setProcessors(List.of(new JavalinProcessor(), new Processor()));
154167

155168
assertThat(task.call()).isTrue();
156169

@@ -181,10 +194,10 @@ public void testInheritableOpenAPIGeneration() throws Exception {
181194
new PrintWriter(System.out),
182195
null,
183196
null,
184-
List.of("--release=11"),
197+
List.of("--release=11", "-AdisableDirectWrites=true"),
185198
null,
186199
openAPIController);
187-
task.setProcessors(List.of(new JavalinProcessor(false), new Processor()));
200+
task.setProcessors(List.of(new JavalinProcessor(), new Processor()));
188201

189202
assertThat(task.call()).isTrue();
190203

@@ -196,7 +209,6 @@ public void testInheritableOpenAPIGeneration() throws Exception {
196209
assert expectedOpenApiJson.equals(generatedOpenApi);
197210
}
198211

199-
200212
private Iterable<JavaFileObject> getSourceFiles(String source) throws Exception {
201213
final var compiler = ToolProvider.getSystemJavaCompiler();
202214
final var files = compiler.getStandardFileManager(null, null, null);

tests/test-nima-jsonb/src/test/java/io/avaje/http/generator/NimaProcessorTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,8 @@ void runAnnotationProcessor() throws Exception {
4545

4646
final var task =
4747
compiler.getTask(
48-
new PrintWriter(System.out), null, null, List.of("--release=19"), null, files);
49-
task.setProcessors(List.of(new NimaProcessor(false)));
48+
new PrintWriter(System.out), null, null, List.of("--release=20", "-AdisableDirectWrites=true"), null, files);
49+
task.setProcessors(List.of(new NimaProcessor()));
5050

5151
assertThat(task.call()).isTrue();
5252
}

0 commit comments

Comments
 (0)