Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -276,7 +276,8 @@ JaxRsResourceIndexBuildItem resourceIndex(CombinedIndexBuildItem combinedIndex,
for (GeneratedJaxRsResourceBuildItem generatedJaxRsResource : generatedJaxRsResources) {
indexer.index(new ByteArrayInputStream(generatedJaxRsResource.getData()));
generatedBeansProducer
.produce(new GeneratedBeanBuildItem(generatedJaxRsResource.getName(), generatedJaxRsResource.getData()));
.produce(new GeneratedBeanBuildItem(generatedJaxRsResource.internalName(),
generatedJaxRsResource.getData()));
}
return new JaxRsResourceIndexBuildItem(CompositeIndex.create(combinedIndex.getComputingIndex(), indexer.complete()));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,38 @@
*/
public final class GeneratedJaxRsResourceBuildItem extends MultiBuildItem {

private final String name;
private final String binaryName;
private final String internalName;
private final byte[] data;

public GeneratedJaxRsResourceBuildItem(String name, byte[] data) {
this.name = name;
this.internalName = name.replace('.', '/');
this.binaryName = name.replace('/', '.');
Comment on lines +16 to +17
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This change is to make things more consistent with GeneratedClassBuildItem and have the same methods available.

this.data = data;
}

/**
* @return the internal name for this class
*
* @deprecated Use {@link #internalName()} instead.
*/
@Deprecated(since = "3.23", forRemoval = true)
public String getName() {
return name;
return internalName;
}

/**
* {@return the <em>binary name</em> of the class, which is delimited by <code>.</code> characters}
*/
public String binaryName() {
return binaryName;
}

/**
* {@return the <em>internal name</em> of the class, which is delimited by <code>/</code> characters}
*/
public String internalName() {
return internalName;
}

public byte[] getData() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import java.lang.reflect.Modifier;
import java.util.Arrays;
import java.util.function.Predicate;
import java.util.function.Supplier;

import org.jboss.jandex.ClassInfo;
Expand All @@ -22,11 +23,14 @@

public class QuarkusInvokerFactory implements EndpointInvokerFactory {

private final Predicate<String> applicationClassPredicate;
final BuildProducer<GeneratedClassBuildItem> generatedClassBuildItemBuildProducer;
final ResteasyReactiveRecorder recorder;

public QuarkusInvokerFactory(BuildProducer<GeneratedClassBuildItem> generatedClassBuildItemBuildProducer,
public QuarkusInvokerFactory(Predicate<String> applicationClassPredicate,
BuildProducer<GeneratedClassBuildItem> generatedClassBuildItemBuildProducer,
ResteasyReactiveRecorder recorder) {
this.applicationClassPredicate = applicationClassPredicate;
this.generatedClassBuildItemBuildProducer = generatedClassBuildItemBuildProducer;
this.recorder = recorder;
}
Expand All @@ -43,7 +47,9 @@ public Supplier<EndpointInvoker> create(ResourceMethod method, ClassInfo current
String baseName = currentClassInfo.name() + "$quarkusrestinvoker$" + method.getName() + "_"
+ HashUtil.sha1(endpointIdentifier);
try (ClassCreator classCreator = new ClassCreator(
new GeneratedClassGizmoAdaptor(generatedClassBuildItemBuildProducer, true), baseName, null,
new GeneratedClassGizmoAdaptor(generatedClassBuildItemBuildProducer,
applicationClassPredicate.test(currentClassInfo.name().toString())),
baseName, null,
Object.class.getName(), EndpointInvoker.class.getName())) {
MethodCreator mc = classCreator.getMethodCreator("invoke", Object.class, Object.class, Object[].class);
ResultHandle[] args = new ResultHandle[method.getParameters().length];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -204,6 +204,7 @@
import io.quarkus.resteasy.reactive.spi.DynamicFeatureBuildItem;
import io.quarkus.resteasy.reactive.spi.EndpointValidationPredicatesBuildItem;
import io.quarkus.resteasy.reactive.spi.ExceptionMapperBuildItem;
import io.quarkus.resteasy.reactive.spi.GeneratedJaxRsResourceBuildItem;
import io.quarkus.resteasy.reactive.spi.JaxrsFeatureBuildItem;
import io.quarkus.resteasy.reactive.spi.MessageBodyReaderBuildItem;
import io.quarkus.resteasy.reactive.spi.MessageBodyReaderOverrideBuildItem;
Expand Down Expand Up @@ -474,7 +475,8 @@ public void setupEndpoints(ApplicationIndexBuildItem applicationIndexBuildItem,
ResourceInterceptorsBuildItem resourceInterceptorsBuildItem,
Capabilities capabilities,
Optional<AllowNotRestParametersBuildItem> allowNotRestParametersBuildItem,
List<EndpointValidationPredicatesBuildItem> validationPredicatesBuildItems) {
List<EndpointValidationPredicatesBuildItem> validationPredicatesBuildItems,
List<GeneratedJaxRsResourceBuildItem> generatedJaxRsResourcesBuildItems) {

if (!resourceScanningResultBuildItem.isPresent()) {
// no detected @Path, bail out
Expand Down Expand Up @@ -512,13 +514,18 @@ public void setupEndpoints(ApplicationIndexBuildItem applicationIndexBuildItem,

List<ResteasyReactiveResourceMethodEntriesBuildItem.Entry> resourceMethodEntries = new ArrayList<>();

// Generated JAX-RS resources are application classes
Set<String> applicationGeneratedJaxRsResources = generatedJaxRsResourcesBuildItems.stream()
.map(r -> r.binaryName())
.collect(Collectors.toSet());

Predicate<String> applicationClassPredicate = s -> {
for (ApplicationClassPredicateBuildItem i : applicationClassPredicateBuildItems) {
if (i.test(s)) {
return true;
}
}
return false;
return applicationGeneratedJaxRsResources.contains(s);
};

final boolean filtersAccessResourceMethod = filtersAccessResourceMethod(
Expand All @@ -537,7 +544,8 @@ public void setupEndpoints(ApplicationIndexBuildItem applicationIndexBuildItem,
.addContextTypes(additionalContextTypes(contextTypeBuildItems))
.setFactoryCreator(new QuarkusFactoryCreator(recorder, beanContainerBuildItem.getValue()))
.setEndpointInvokerFactory(
new QuarkusInvokerFactory(generatedClassBuildItemBuildProducer, recorder))
new QuarkusInvokerFactory(applicationClassPredicate, generatedClassBuildItemBuildProducer,
recorder))
.setGeneratedClassBuildItemBuildProducer(generatedClassBuildItemBuildProducer)
.setExistingConverters(existingConverters)
.setScannedResourcePaths(scannedResourcePaths)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1701,6 +1701,7 @@ public void testResteasyReactiveExternalArtifact() throws Exception {

Assertions.assertEquals("Quarkus", devModeClient.getHttpResponse("/hello/Quarkus"));
Assertions.assertEquals("OK", devModeClient.getHttpResponse("/hello/parameterized-type-external"));
Assertions.assertEquals("Hello from Quarkus REST", devModeClient.getHttpResponse("/greet"));
}

@Test
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
!lib
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,19 @@
<artifactId>maven-jar-plugin</artifactId>
<version>\${maven.jar.plugin.version}</version>
</plugin>
<plugin>
<groupId>io.smallrye</groupId>
<artifactId>jandex-maven-plugin</artifactId>
<version>${jandex.version}</version>
<executions>
<execution>
<id>make-index</id>
<goals>
<goal>jandex</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package org.acme.lib;

import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.core.MediaType;

@Path("/greet")
class GreetingResource {

@GET
@Produces(MediaType.TEXT_PLAIN)
public String greet() {
return "Hello from Quarkus REST";
}
}
Loading