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 <[email protected]>
  • Loading branch information
phillip-kruger committed Oct 1, 2023
1 parent 1c87e6f commit 29f26d3
Show file tree
Hide file tree
Showing 8 changed files with 74 additions and 4 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
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
public class OpenApiTestCase {

private static final String DEFAULT_MEDIA_TYPE = "application/json";
private static final String DEFAULT_MEDIA_TYPE_PRIMITAVE = "plain/text";

@TestHTTPResource("q/openapi")
URL uri;
Expand Down Expand Up @@ -63,7 +64,8 @@ public void testOpenAPIJSON() throws Exception {
// test RESTEasy extensions

JsonObject schemasObj = obj.getJsonObject("components").getJsonObject("schemas");
String testSchemaType = schemaType("200", DEFAULT_MEDIA_TYPE, testObj.getJsonObject("get").getJsonObject("responses"),
String testSchemaType = schemaType("200", DEFAULT_MEDIA_TYPE_PRIMITAVE,
testObj.getJsonObject("get").getJsonObject("responses"),
schemasObj);
String rxSchemaType = schemaType("200", DEFAULT_MEDIA_TYPE,
injectionObj.getJsonObject("get").getJsonObject("responses"),
Expand Down

0 comments on commit 29f26d3

Please sign in to comment.