Skip to content

Commit f00d79b

Browse files
vojtechhabartamohasarc
authored andcommitted
Jakarta JAX-RS 3.0 (vojtechhabarta#645)
1 parent 6517c77 commit f00d79b

File tree

7 files changed

+4464
-2119
lines changed

7 files changed

+4464
-2119
lines changed

typescript-generator-core/pom.xml

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,11 @@
5959
<artifactId>javax.ws.rs-api</artifactId>
6060
<version>2.1.1</version>
6161
</dependency>
62+
<dependency>
63+
<groupId>jakarta.ws.rs</groupId>
64+
<artifactId>jakarta.ws.rs-api</artifactId>
65+
<version>3.0.0</version>
66+
</dependency>
6267
<dependency>
6368
<groupId>io.github.classgraph</groupId>
6469
<artifactId>classgraph</artifactId>
@@ -233,6 +238,47 @@
233238
</execution>
234239
</executions>
235240
</plugin>
241+
<plugin>
242+
<groupId>org.apache.maven.plugins</groupId>
243+
<artifactId>maven-antrun-plugin</artifactId>
244+
<version>3.0.0</version>
245+
<executions>
246+
<execution>
247+
<id>jaxrs-v2-test</id>
248+
<phase>generate-test-sources</phase>
249+
<goals>
250+
<goal>run</goal>
251+
</goals>
252+
<configuration>
253+
<target>
254+
<copy
255+
file="src/test/java/cz/habarta/typescript/generator/JaxrsApplicationTest.java"
256+
tofile="src/test/java/cz/habarta/typescript/generator/JaxrsV2ApplicationTest.java"/>
257+
<replace
258+
file="src/test/java/cz/habarta/typescript/generator/JaxrsV2ApplicationTest.java"
259+
token="JaxrsApplicationTest"
260+
value="JaxrsV2ApplicationTest"/>
261+
<replace
262+
file="src/test/java/cz/habarta/typescript/generator/JaxrsV2ApplicationTest.java"
263+
token="jakarta.ws.rs"
264+
value="javax.ws.rs"/>
265+
</target>
266+
</configuration>
267+
</execution>
268+
<execution>
269+
<id>jaxrs-v2-test-delete</id>
270+
<phase>prepare-package</phase>
271+
<goals>
272+
<goal>run</goal>
273+
</goals>
274+
<configuration>
275+
<target>
276+
<delete file="src/test/java/cz/habarta/typescript/generator/JaxrsV2ApplicationTest.java"/>
277+
</target>
278+
</configuration>
279+
</execution>
280+
</executions>
281+
</plugin>
236282
<plugin>
237283
<groupId>org.apache.maven.plugins</groupId>
238284
<artifactId>maven-jar-plugin</artifactId>

typescript-generator-core/src/main/java/cz/habarta/typescript/generator/JaxrsApplicationScanner.java

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,15 @@
22
package cz.habarta.typescript.generator;
33

44
import cz.habarta.typescript.generator.parser.SourceType;
5+
import cz.habarta.typescript.generator.util.Utils;
56
import io.github.classgraph.ScanResult;
67
import java.lang.reflect.Constructor;
78
import java.lang.reflect.Type;
89
import java.util.ArrayList;
910
import java.util.Collections;
10-
import java.util.Comparator;
1111
import java.util.List;
12+
import java.util.Set;
1213
import java.util.function.Predicate;
13-
import javax.ws.rs.Path;
14-
import javax.ws.rs.core.Application;
1514

1615

1716
public class JaxrsApplicationScanner {
@@ -23,10 +22,18 @@ public static List<SourceType<Type>> scanJaxrsApplication(Class<?> jaxrsApplicat
2322
TypeScriptGenerator.getLogger().info("Scanning JAX-RS application: " + jaxrsApplicationClass.getName());
2423
final Constructor<?> constructor = jaxrsApplicationClass.getDeclaredConstructor();
2524
constructor.setAccessible(true);
26-
final Application application = (Application) constructor.newInstance();
25+
final Object instance = constructor.newInstance();
26+
final Set<Class<?>> applicationClasses;
27+
if (instance instanceof jakarta.ws.rs.core.Application) {
28+
applicationClasses = ((jakarta.ws.rs.core.Application) instance).getClasses();
29+
} else if (instance instanceof javax.ws.rs.core.Application) {
30+
applicationClasses = ((javax.ws.rs.core.Application) instance).getClasses();
31+
} else {
32+
applicationClasses = Collections.emptySet();
33+
}
2734
final List<Class<?>> resourceClasses = new ArrayList<>();
28-
for (Class<?> cls : application.getClasses()) {
29-
if (cls.isAnnotationPresent(Path.class)) {
35+
for (Class<?> cls : applicationClasses) {
36+
if (cls.isAnnotationPresent(jakarta.ws.rs.Path.class) || cls.isAnnotationPresent(javax.ws.rs.Path.class)) {
3037
resourceClasses.add(cls);
3138
}
3239
}
@@ -39,7 +46,10 @@ public static List<SourceType<Type>> scanJaxrsApplication(Class<?> jaxrsApplicat
3946
}
4047

4148
public static List<SourceType<Type>> scanAutomaticJaxrsApplication(ScanResult scanResult, Predicate<String> isClassNameExcluded) {
42-
final List<String> namesOfResourceClasses = scanResult.getClassesWithAnnotation(Path.class.getName()).getNames();
49+
final List<String> namesOfResourceClasses = Utils.concat(
50+
scanResult.getClassesWithAnnotation(jakarta.ws.rs.Path.class.getName()).getNames(),
51+
scanResult.getClassesWithAnnotation(javax.ws.rs.Path.class.getName()).getNames()
52+
);
4353
final List<Class<?>> resourceClasses = Input.loadClasses(namesOfResourceClasses);
4454
TypeScriptGenerator.getLogger().info(String.format("Found %d root resources.", resourceClasses.size()));
4555
return new JaxrsApplicationScanner().scanJaxrsApplication(null, resourceClasses, isClassNameExcluded);
@@ -53,19 +63,14 @@ private static RuntimeException reportError(ReflectiveOperationException e) {
5363
}
5464

5565
List<SourceType<Type>> scanJaxrsApplication(Class<?> applicationClass, List<Class<?>> resourceClasses, Predicate<String> isClassNameExcluded) {
56-
Collections.sort(resourceClasses, new Comparator<Class<?>>() {
57-
@Override
58-
public int compare(Class<?> o1, Class<?> o2) {
59-
return o1.getName().compareToIgnoreCase(o2.getName());
60-
}
61-
});
66+
Collections.sort(resourceClasses, (o1, o2) -> o1.getName().compareToIgnoreCase(o2.getName()));
6267
final List<SourceType<Type>> sourceTypes = new ArrayList<>();
6368
if (applicationClass != null) {
64-
sourceTypes.add(new SourceType<Type>(applicationClass));
69+
sourceTypes.add(new SourceType<>(applicationClass));
6570
}
6671
for (Class<?> resourceClass : resourceClasses) {
6772
if (isClassNameExcluded == null || !isClassNameExcluded.test(resourceClass.getName())) {
68-
sourceTypes.add(new SourceType<Type>(resourceClass));
73+
sourceTypes.add(new SourceType<>(resourceClass));
6974
}
7075
}
7176
return sourceTypes;

0 commit comments

Comments
 (0)