Skip to content

Commit

Permalink
OpenAPI different default content type for pojo return and primitives
Browse files Browse the repository at this point in the history
Signed-off-by: Phillip Kruger <phillip.kruger@gmail.com>
  • Loading branch information
phillip-kruger committed Oct 1, 2023
1 parent 4d8f631 commit 91257a7
Show file tree
Hide file tree
Showing 7 changed files with 71 additions and 3 deletions.
2 changes: 1 addition & 1 deletion bom/application/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@
<smallrye-config.version>3.3.4</smallrye-config.version>
<smallrye-health.version>4.0.4</smallrye-health.version>
<smallrye-metrics.version>4.0.0</smallrye-metrics.version>
<smallrye-open-api.version>3.6.0</smallrye-open-api.version>
<smallrye-open-api.version>3.6.1</smallrye-open-api.version>
<smallrye-graphql.version>2.4.0</smallrye-graphql.version>
<smallrye-opentracing.version>3.0.3</smallrye-opentracing.version>
<smallrye-fault-tolerance.version>6.2.6</smallrye-fault-tolerance.version>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,8 @@ public class SmallRyeOpenApiProcessor {
static {
System.setProperty(io.smallrye.openapi.api.constants.OpenApiConstants.DEFAULT_PRODUCES, "application/json");
System.setProperty(io.smallrye.openapi.api.constants.OpenApiConstants.DEFAULT_CONSUMES, "application/json");
System.setProperty(io.smallrye.openapi.api.constants.OpenApiConstants.DEFAULT_PRODUCES_PRIMITIVES, "plain/text");
System.setProperty(io.smallrye.openapi.api.constants.OpenApiConstants.DEFAULT_CONSUMES_PRIMITIVES, "plain/text");
}

@BuildStep
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,12 @@
@Path("/greeting")
public class DefaultContentTypeResource {

@GET
@Path("/foo")
public String foo() {
return "bar";
}

@GET
@Path("/hello")
public Greeting hello() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@ public void testOpenApiPathAccessResource() {
Matchers.containsString("#/components/schemas/Greeting"))
.body("paths.'/greeting/hello'.get.responses.'200'.content.'application/json'.schema.$ref",
Matchers.containsString("#/components/schemas/Greeting"))
.body("paths.'/greeting/foo'.get.responses.'200'.content.'plain/text'.schema.type",
Matchers.equalTo("string"))
.body("paths.'/greeting/hello'.post.responses.'200'.content.'application/json'.schema.$ref",
Matchers.containsString("#/components/schemas/Greeting"));

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package io.quarkus.smallrye.openapi.test.jaxrs;

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

@Path("/greeting")
public class NoDefaultSecurityResource {

@GET
@Path("/hello")
public Greeting hello() {
return new Greeting("Hello there");
}

@POST
@Path("/hello")
public Greeting hello(Greeting greeting) {
return greeting;
}

@GET
@Path("/goodbye")
@Produces(MediaType.APPLICATION_XML)
public Greeting byebye() {
return new Greeting("Good Bye !");
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package io.quarkus.smallrye.openapi.test.jaxrs;

import org.hamcrest.Matchers;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;

import io.quarkus.test.QuarkusUnitTest;
import io.restassured.RestAssured;

public class NoDefaultSecurityTest {
private static final String OPEN_API_PATH = "/q/openapi";

@RegisterExtension
static QuarkusUnitTest runner = new QuarkusUnitTest()
.withApplicationRoot((jar) -> jar
.addClasses(NoDefaultSecurityResource.class, Greeting.class));

@Test
public void testOpenApiNoSecurity() {
RestAssured.given().queryParam("format", "JSON")
.when().get(OPEN_API_PATH)
.then()
.body("components.securitySchemes.SecurityScheme.type", Matchers.nullValue());
}

}
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package io.quarkus.vertx.http.deployment;

import static io.quarkus.arc.processor.DotNames.APPLICATION_SCOPED;
import static org.jboss.jandex.AnnotationTarget.Kind.CLASS;

import java.security.Permission;
import java.util.HashMap;
Expand Down Expand Up @@ -216,7 +215,9 @@ SyntheticBeanBuildItem initBasicAuth(
&& !buildTimeConfig.auth.basic.orElse(false)) {
//if not explicitly enabled we make this a default bean, so it is the fallback if nothing else is defined
configurator.defaultBean();
securityInformationProducer.produce(SecurityInformationBuildItem.BASIC());
if (buildTimeConfig.auth.basic.isPresent() && buildTimeConfig.auth.basic.get()) {
securityInformationProducer.produce(SecurityInformationBuildItem.BASIC());
}
}

return configurator.done();
Expand Down

0 comments on commit 91257a7

Please sign in to comment.