diff --git a/vpro-shared-swagger/README.adoc b/archived/vpro-shared-swagger/README.adoc similarity index 100% rename from vpro-shared-swagger/README.adoc rename to archived/vpro-shared-swagger/README.adoc diff --git a/vpro-shared-swagger/pom.xml b/archived/vpro-shared-swagger/pom.xml similarity index 100% rename from vpro-shared-swagger/pom.xml rename to archived/vpro-shared-swagger/pom.xml diff --git a/vpro-shared-swagger/src/main/java/nl/vpro/rs/media/WelcomeFilter.java b/archived/vpro-shared-swagger/src/main/java/nl/vpro/rs/media/WelcomeFilter.java similarity index 100% rename from vpro-shared-swagger/src/main/java/nl/vpro/rs/media/WelcomeFilter.java rename to archived/vpro-shared-swagger/src/main/java/nl/vpro/rs/media/WelcomeFilter.java diff --git a/vpro-shared-swagger/src/main/java/nl/vpro/swagger/SwaggerApplication.java b/archived/vpro-shared-swagger/src/main/java/nl/vpro/swagger/SwaggerApplication.java similarity index 100% rename from vpro-shared-swagger/src/main/java/nl/vpro/swagger/SwaggerApplication.java rename to archived/vpro-shared-swagger/src/main/java/nl/vpro/swagger/SwaggerApplication.java diff --git a/vpro-shared-swagger/src/main/java/nl/vpro/swagger/SwaggerFilter.java b/archived/vpro-shared-swagger/src/main/java/nl/vpro/swagger/SwaggerFilter.java similarity index 100% rename from vpro-shared-swagger/src/main/java/nl/vpro/swagger/SwaggerFilter.java rename to archived/vpro-shared-swagger/src/main/java/nl/vpro/swagger/SwaggerFilter.java diff --git a/vpro-shared-swagger/src/main/java/nl/vpro/swagger/SwaggerListingResource.java b/archived/vpro-shared-swagger/src/main/java/nl/vpro/swagger/SwaggerListingResource.java similarity index 100% rename from vpro-shared-swagger/src/main/java/nl/vpro/swagger/SwaggerListingResource.java rename to archived/vpro-shared-swagger/src/main/java/nl/vpro/swagger/SwaggerListingResource.java diff --git a/vpro-shared-swagger/src/main/java/nl/vpro/swagger/model/InstantParamProcessor.java b/archived/vpro-shared-swagger/src/main/java/nl/vpro/swagger/model/InstantParamProcessor.java similarity index 100% rename from vpro-shared-swagger/src/main/java/nl/vpro/swagger/model/InstantParamProcessor.java rename to archived/vpro-shared-swagger/src/main/java/nl/vpro/swagger/model/InstantParamProcessor.java diff --git a/vpro-shared-swagger/src/main/java/nl/vpro/swagger/model/SwaggerReaderListener.java b/archived/vpro-shared-swagger/src/main/java/nl/vpro/swagger/model/SwaggerReaderListener.java similarity index 100% rename from vpro-shared-swagger/src/main/java/nl/vpro/swagger/model/SwaggerReaderListener.java rename to archived/vpro-shared-swagger/src/main/java/nl/vpro/swagger/model/SwaggerReaderListener.java diff --git a/vpro-shared-swagger/src/main/resources/META-INF/swagger.tld b/archived/vpro-shared-swagger/src/main/resources/META-INF/swagger.tld similarity index 100% rename from vpro-shared-swagger/src/main/resources/META-INF/swagger.tld rename to archived/vpro-shared-swagger/src/main/resources/META-INF/swagger.tld diff --git a/vpro-shared-swagger/src/main/resources/META-INF/tags/swagger/head-links.tagx b/archived/vpro-shared-swagger/src/main/resources/META-INF/tags/swagger/head-links.tagx similarity index 100% rename from vpro-shared-swagger/src/main/resources/META-INF/tags/swagger/head-links.tagx rename to archived/vpro-shared-swagger/src/main/resources/META-INF/tags/swagger/head-links.tagx diff --git a/vpro-shared-swagger/src/main/resources/META-INF/tags/swagger/javascript.tagx b/archived/vpro-shared-swagger/src/main/resources/META-INF/tags/swagger/javascript.tagx similarity index 100% rename from vpro-shared-swagger/src/main/resources/META-INF/tags/swagger/javascript.tagx rename to archived/vpro-shared-swagger/src/main/resources/META-INF/tags/swagger/javascript.tagx diff --git a/vpro-shared-swagger/src/main/resources/META-INF/tags/swagger/logo.tagx b/archived/vpro-shared-swagger/src/main/resources/META-INF/tags/swagger/logo.tagx similarity index 100% rename from vpro-shared-swagger/src/main/resources/META-INF/tags/swagger/logo.tagx rename to archived/vpro-shared-swagger/src/main/resources/META-INF/tags/swagger/logo.tagx diff --git a/vpro-shared-swagger/src/main/resources/META-INF/tags/swagger/swaggerbase.tagx b/archived/vpro-shared-swagger/src/main/resources/META-INF/tags/swagger/swaggerbase.tagx similarity index 100% rename from vpro-shared-swagger/src/main/resources/META-INF/tags/swagger/swaggerbase.tagx rename to archived/vpro-shared-swagger/src/main/resources/META-INF/tags/swagger/swaggerbase.tagx diff --git a/vpro-shared-swagger/src/main/resources/META-INF/vpro/swagger-context.xml b/archived/vpro-shared-swagger/src/main/resources/META-INF/vpro/swagger-context.xml similarity index 100% rename from vpro-shared-swagger/src/main/resources/META-INF/vpro/swagger-context.xml rename to archived/vpro-shared-swagger/src/main/resources/META-INF/vpro/swagger-context.xml diff --git a/vpro-shared-swagger/src/test/java/nl/vpro/swagger/SwaggerFilterTest.java b/archived/vpro-shared-swagger/src/test/java/nl/vpro/swagger/SwaggerFilterTest.java similarity index 100% rename from vpro-shared-swagger/src/test/java/nl/vpro/swagger/SwaggerFilterTest.java rename to archived/vpro-shared-swagger/src/test/java/nl/vpro/swagger/SwaggerFilterTest.java diff --git a/pom.xml b/pom.xml index dad66fc4a..98aecdf3e 100644 --- a/pom.xml +++ b/pom.xml @@ -69,7 +69,7 @@ vpro-shared-monitoring vpro-shared-persistence vpro-shared-rs - vpro-shared-swagger + vpro-shared-swagger3 vpro-shared-test vpro-shared-util @@ -81,6 +81,7 @@ vpro-shared-bom - 1.6.9 + + 2.2.8 1.18.24 ${project.build.directory}/delombok @@ -305,15 +304,20 @@ - io.swagger + io.swagger.core.v3 swagger-annotations ${swagger.version} - io.swagger - swagger-jaxrs + io.swagger.core.v3 + swagger-jaxrs2 ${swagger.version} + + io.swagger.core.v3 + swagger-core + ${swagger.version} + nl.vpro.shared vpro-shared-bom diff --git a/vpro-shared-bom/pom.xml b/vpro-shared-bom/pom.xml index 6f4b9335b..58422ffeb 100644 --- a/vpro-shared-bom/pom.xml +++ b/vpro-shared-bom/pom.xml @@ -159,9 +159,11 @@ vpro-shared-xml ${project.version} + + nl.vpro.shared - vpro-shared-swagger + vpro-shared-swagger3 ${project.version} @@ -233,6 +235,11 @@ vpro-shared-resteasy 2.21.0 + + nl.vpro.shared + vpro-shared-swagger + 3.0.1 + diff --git a/vpro-shared-swagger3/README.adoc b/vpro-shared-swagger3/README.adoc new file mode 100644 index 000000000..480cd6c89 --- /dev/null +++ b/vpro-shared-swagger3/README.adoc @@ -0,0 +1,5 @@ += Swagger utilities + +This contains a few utility methods to deal with swagger. + +It has a dependency on a webjars for swagger frontend itself, and supplies a simply taglib to wire that into the actual HTML. diff --git a/vpro-shared-swagger3/pom.xml b/vpro-shared-swagger3/pom.xml new file mode 100644 index 000000000..bb6d18fd0 --- /dev/null +++ b/vpro-shared-swagger3/pom.xml @@ -0,0 +1,71 @@ + + + 4.0.0 + + + vpro-shared-parent + nl.vpro.shared + 3.1-SNAPSHOT + + vpro-shared-swagger3 + 3.1-SNAPSHOT + + + + + + + nl.vpro.shared + vpro-shared-jackson2 + + + nl.vpro.shared + vpro-shared-web + + + + io.swagger.core.v3 + swagger-core + + + io.swagger.core.v3 + swagger-jaxrs2 + + + org.jboss.spec.javax.ws.rs + jboss-jaxrs-api_2.1_spec + 2.0.1.Final + provided + + + jakarta.servlet + jakarta.servlet-api + + + org.webjars + swagger-ui + 4.9.1 + + + org.projectlombok + lombok + + + nl.vpro.shared + vpro-shared-test + test + + + org.meeuw + mihxil-json-grep + + + org.apache.logging.log4j + log4j-core + + + jakarta.annotation + jakarta.annotation-api + + + diff --git a/vpro-shared-swagger3/src/main/java/nl/vpro/rs/media/WelcomeFilter.java b/vpro-shared-swagger3/src/main/java/nl/vpro/rs/media/WelcomeFilter.java new file mode 100644 index 000000000..fcff82dbb --- /dev/null +++ b/vpro-shared-swagger3/src/main/java/nl/vpro/rs/media/WelcomeFilter.java @@ -0,0 +1,35 @@ +package nl.vpro.rs.media; + +import lombok.extern.slf4j.Slf4j; + +import java.io.IOException; + +import javax.servlet.*; +import javax.servlet.http.HttpServletResponse; + +/** + * MSE-4330. Er was gewoon een index.jsp die dat deed, maar dat werkt niet meer, omdat om een of andere reden het resteasy servlet er altijd tussen zat (terwijl niet eens gemapt) + * @author Michiel Meeuwissen + * @since 2.6 + */ +@Slf4j +public class WelcomeFilter implements Filter { + + + + @Override + public void init(FilterConfig filterConfig) { + + } + + @Override + public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException { + ((HttpServletResponse)servletResponse).sendRedirect("docs/api"); + + } + + @Override + public void destroy() { + + } +} diff --git a/vpro-shared-swagger3/src/main/java/nl/vpro/swagger/SwaggerApplication.java b/vpro-shared-swagger3/src/main/java/nl/vpro/swagger/SwaggerApplication.java new file mode 100644 index 000000000..8eb6851e8 --- /dev/null +++ b/vpro-shared-swagger3/src/main/java/nl/vpro/swagger/SwaggerApplication.java @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2013 All rights reserved + * VPRO The Netherlands + */ +package nl.vpro.swagger; + +import lombok.extern.slf4j.Slf4j; + +import java.util.*; + +import javax.annotation.PostConstruct; +import javax.ws.rs.ApplicationPath; +import javax.ws.rs.core.Application; + + +/** + * Static helper to expose a dummy JAX-RS Application. Swagger needs such an application to expose the API docs for + * the given endpoints. + * + * @author Roelof Jan Koekoek + * @since 2.0 + */ +@Slf4j +@ApplicationPath("") +public class SwaggerApplication extends Application { + private static final Set singletons = new HashSet<>(); + + @Override + public Set> getClasses() { + Set> set = new HashSet<>(); + return set; + } + + @Override + public Set getSingletons() { + return singletons; + } + + @PostConstruct + public void init() { + //inject(); + } + + /** + * Inject Swagger annotated JAX-RS api's you want to publish. Swagger only calls #getSingletons on the first + * API documentation request, so you must take care that your services get injected before an application accepts + * web requests. (Using @PostConstruct on your services is a viable solution) + * + * @param services + */ + public static void inject(Object... services) { + singletons.addAll(Arrays.asList(services)); + } + + + +} diff --git a/vpro-shared-swagger3/src/main/java/nl/vpro/swagger/SwaggerFilter.java b/vpro-shared-swagger3/src/main/java/nl/vpro/swagger/SwaggerFilter.java new file mode 100644 index 000000000..257ebba3e --- /dev/null +++ b/vpro-shared-swagger3/src/main/java/nl/vpro/swagger/SwaggerFilter.java @@ -0,0 +1,125 @@ +package nl.vpro.swagger; + +import lombok.extern.slf4j.Slf4j; + +import java.io.IOException; +import java.io.OutputStream; + +import javax.servlet.*; +import javax.servlet.http.*; +import javax.ws.rs.core.MediaType; + +import org.meeuw.json.grep.Sed; +import org.meeuw.json.grep.matching.*; + +import nl.vpro.web.HttpServletRequestUtils; + +/** + * This filter can be used to fill in 'api.basePath' using the request, so you don't have to configure it any more. + * @author Michiel Meeuwissen + * @since 0.21 + */ +@Slf4j +public class SwaggerFilter implements Filter { + + + @Override + public void init(FilterConfig filterConfig) { + + } + + @Override + public void doFilter( + ServletRequest request, + ServletResponse response, FilterChain chain) throws IOException, ServletException { + HttpServletRequest req = (HttpServletRequest) request; + + if (! req.getPathInfo().endsWith(".json")) { + String accept = req.getHeader("accept"); + if (accept != null) { + boolean json = false; + try { + String[] mtypes = accept.split(";", 2)[0].split(","); + for (String mtype : mtypes) { + if (MediaType.valueOf(mtype).isCompatible(MediaType.APPLICATION_JSON_TYPE)) { + json = true; + break; + } + } + } catch (Exception e) { + log.warn(e.getMessage()); + } + if (!json) { + log.debug("Not json"); + chain.doFilter(request, response); + return; + } + } + } + + PathMatcher matcher = getPathMatcher(req); + + final ServletOutputStream servletOutputStream = response.getOutputStream(); + final OutputStream out = transform(servletOutputStream, matcher); + HttpServletResponseWrapper wrapped = new HttpServletResponseWrapper((HttpServletResponse) response) { + @Override + public ServletOutputStream getOutputStream() { + return new ServletOutputStream() { + @Override + public boolean isReady() { + return servletOutputStream.isReady(); + + } + + @Override + public void setWriteListener(WriteListener writeListener) { + servletOutputStream.setWriteListener(writeListener); + } + + @Override + public void write(int b) throws IOException { + out.write(b); + + } + + @Override + public void write(byte[] b) throws IOException { + out.write(b); + } + + @Override + public void write(byte[] b, int off, int len) throws IOException { + out.write(b, off, len); + } + }; + } + }; + + chain.doFilter(request, wrapped); + out.close(); + + } + + + PathMatcher getPathMatcher(HttpServletRequest req) { + String host = req.getServerName() + HttpServletRequestUtils.getPortPostFixIfNeeded(req); + String basePath = req.getContextPath() + "/api"; + return getPathMatcher(basePath, host); + } + + PathMatcher getPathMatcher(String basePath, String host) { + return new PathMatcherOrChain( + new PathMatcherAndChain( + new SinglePathMatcher(new PreciseMatch("servers"), new ArrayEntryMatch(), new PreciseMatch("url")), + new ScalarEqualsMatcher("${api.basePath}", basePath) + ) + ); + } + + public OutputStream transform(OutputStream to, PathMatcher pathMatcher) throws IOException { + return Sed.transform(to, pathMatcher); + } + + + +} diff --git a/vpro-shared-swagger3/src/main/java/nl/vpro/swagger/SwaggerListingResource.java b/vpro-shared-swagger3/src/main/java/nl/vpro/swagger/SwaggerListingResource.java new file mode 100644 index 000000000..52c48847d --- /dev/null +++ b/vpro-shared-swagger3/src/main/java/nl/vpro/swagger/SwaggerListingResource.java @@ -0,0 +1,40 @@ +package nl.vpro.swagger; + + +import io.swagger.v3.jaxrs2.integration.resources.OpenApiResource; + +import java.time.Duration; + +import javax.servlet.ServletContext; +import javax.ws.rs.Path; +import javax.ws.rs.core.Context; + +import org.checkerframework.checker.nullness.qual.Nullable; + + +/** + * The provided implementations by swagger don't work or give in log: + * 2016-12-09 10:51:13,933 WARN - 0:0:0:0:0:0:0:1 GET /api/swagger.json RESTEASY002142: Multiple resource methods match request "GET /swagger". Selecting one. Matching methods: [public javax.ws.rs.core.Response io.swagger.jaxrs.listing.AcceptHeaderApiListingResource.getListingJson(javax.ws.rs.core.Application,javax.servlet.ServletConfig,javax.ws.rs.core.HttpHeaders,javax.ws.rs.core.UriInfo), public javax.ws.rs.core.Response io.swagger.jaxrs.listing.AcceptHeaderApiListingResource.getListingYaml(javax.ws.rs.core.Application,javax.servlet.ServletConfig,javax.ws.rs.core.HttpHeaders,javax.ws.rs.core.UriInfo)] [ org.jboss.resteasy.resteasy_jaxrs.i18n - http-nio-8070-exec-1 ] + * + * Probably caused by setting in our web.xml, but anyway. + * + * @author Michiel Meeuwissen + * @since 1.60 + */ +@Path("/openapi") +public class SwaggerListingResource extends OpenApiResource { + + @Context + ServletContext context; + + Duration maxAge = Duration.ofMinutes(15); + + public SwaggerListingResource() { + } + + public SwaggerListingResource(@Nullable Duration maxAge) { + this.maxAge = maxAge == null ? this.maxAge : maxAge; + } + + +} diff --git a/vpro-shared-swagger3/src/main/java/nl/vpro/swagger/model/InstantParamProcessor.java b/vpro-shared-swagger3/src/main/java/nl/vpro/swagger/model/InstantParamProcessor.java new file mode 100644 index 000000000..09abd40e5 --- /dev/null +++ b/vpro-shared-swagger3/src/main/java/nl/vpro/swagger/model/InstantParamProcessor.java @@ -0,0 +1,14 @@ +package nl.vpro.swagger.model; + + +import io.swagger.v3.core.util.ParameterProcessor; + +/** + * @author Michiel Meeuwissen + * @since 0.49 + */ +public class InstantParamProcessor extends ParameterProcessor { + public InstantParamProcessor() { + } + +} diff --git a/vpro-shared-swagger3/src/main/java/nl/vpro/swagger/model/SwaggerReaderListener.java b/vpro-shared-swagger3/src/main/java/nl/vpro/swagger/model/SwaggerReaderListener.java new file mode 100644 index 000000000..bd48c97f5 --- /dev/null +++ b/vpro-shared-swagger3/src/main/java/nl/vpro/swagger/model/SwaggerReaderListener.java @@ -0,0 +1,33 @@ +package nl.vpro.swagger.model; + +import io.swagger.v3.jaxrs2.ReaderListener; +import io.swagger.v3.oas.integration.api.OpenApiReader; +import io.swagger.v3.oas.models.OpenAPI; +import lombok.extern.log4j.Log4j2; + +/** + * @author Michiel Meeuwissen + * @since 0.49 + */ +@Log4j2 +public class SwaggerReaderListener implements ReaderListener { + + { + //SwaggerApplication.inject(this); + } + @Override + public void beforeScan(OpenApiReader reader, OpenAPI swagger) { + //swagger.get + log.info("Hoi"); + } + + @Override + public void afterScan(OpenApiReader reader, OpenAPI swagger) { + + //swagger.getExtensions().get("Locale").getProperties().clear(); + //swagger.getDefinitions().get("Locale").setExample("nl-NL"); + //swagger.getDefinitions().get("Locale").setDescription("ISO 639 language codes"); + + + } +} diff --git a/vpro-shared-swagger3/src/main/resources/META-INF/resources/webjars/swagger-ui/swagger_icon.svg b/vpro-shared-swagger3/src/main/resources/META-INF/resources/webjars/swagger-ui/swagger_icon.svg new file mode 100644 index 000000000..c8321a2b8 --- /dev/null +++ b/vpro-shared-swagger3/src/main/resources/META-INF/resources/webjars/swagger-ui/swagger_icon.svg @@ -0,0 +1 @@ +file_type_swagger \ No newline at end of file diff --git a/vpro-shared-swagger3/src/main/resources/META-INF/swagger.tld b/vpro-shared-swagger3/src/main/resources/META-INF/swagger.tld new file mode 100644 index 000000000..375763883 --- /dev/null +++ b/vpro-shared-swagger3/src/main/resources/META-INF/swagger.tld @@ -0,0 +1,31 @@ + + + 1.0 + swagger + https://www.vpro.nl/shared/tags/swagger + + + head-links + /META-INF/tags/swagger/head-links.tagx + + + javascript + /META-INF/tags/swagger/javascript.tagx + + + body + /META-INF/tags/swagger/body.tagx + + + logo + /META-INF/tags/swagger/logo.tagx + + + swaggerbase + /META-INF/tags/swagger/swaggerbase.tagx + + + diff --git a/vpro-shared-swagger3/src/main/resources/META-INF/tags/swagger/body.tagx b/vpro-shared-swagger3/src/main/resources/META-INF/tags/swagger/body.tagx new file mode 100644 index 000000000..601054e3c --- /dev/null +++ b/vpro-shared-swagger3/src/main/resources/META-INF/tags/swagger/body.tagx @@ -0,0 +1,21 @@ + + + + + + + +
+ +
+ + + + +
diff --git a/vpro-shared-swagger3/src/main/resources/META-INF/tags/swagger/head-links.tagx b/vpro-shared-swagger3/src/main/resources/META-INF/tags/swagger/head-links.tagx new file mode 100644 index 000000000..f326c83a7 --- /dev/null +++ b/vpro-shared-swagger3/src/main/resources/META-INF/tags/swagger/head-links.tagx @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + diff --git a/vpro-shared-swagger3/src/main/resources/META-INF/tags/swagger/javascript.tagx b/vpro-shared-swagger3/src/main/resources/META-INF/tags/swagger/javascript.tagx new file mode 100644 index 000000000..f1406216b --- /dev/null +++ b/vpro-shared-swagger3/src/main/resources/META-INF/tags/swagger/javascript.tagx @@ -0,0 +1,43 @@ + + + + + + + if (url == null || url.length() == 0) { + url = "/api/openapi.json"; + } + if (url.startsWith("/")) { + url = request.getServletContext().getContextPath() + url; + } + request.setAttribute("swaggerjson", url); + + + + + + diff --git a/vpro-shared-swagger3/src/main/resources/META-INF/tags/swagger/logo.tagx b/vpro-shared-swagger3/src/main/resources/META-INF/tags/swagger/logo.tagx new file mode 100644 index 000000000..9b669b115 --- /dev/null +++ b/vpro-shared-swagger3/src/main/resources/META-INF/tags/swagger/logo.tagx @@ -0,0 +1,11 @@ + + + + + diff --git a/vpro-shared-swagger3/src/main/resources/META-INF/tags/swagger/swaggerbase.tagx b/vpro-shared-swagger3/src/main/resources/META-INF/tags/swagger/swaggerbase.tagx new file mode 100644 index 000000000..5363761cd --- /dev/null +++ b/vpro-shared-swagger3/src/main/resources/META-INF/tags/swagger/swaggerbase.tagx @@ -0,0 +1,7 @@ + + request.setAttribute("webjars", request.getContextPath() + "/webjars"); + request.setAttribute("swaggerbase", request.getAttribute("webjars") + "/swagger-ui/4.9.1/"); + diff --git a/vpro-shared-swagger3/src/main/resources/META-INF/vpro/swagger-context.xml b/vpro-shared-swagger3/src/main/resources/META-INF/vpro/swagger-context.xml new file mode 100644 index 000000000..25f41d218 --- /dev/null +++ b/vpro-shared-swagger3/src/main/resources/META-INF/vpro/swagger-context.xml @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/vpro-shared-swagger3/src/test/java/nl/vpro/swagger/SwaggerFilterTest.java b/vpro-shared-swagger3/src/test/java/nl/vpro/swagger/SwaggerFilterTest.java new file mode 100644 index 000000000..714700204 --- /dev/null +++ b/vpro-shared-swagger3/src/test/java/nl/vpro/swagger/SwaggerFilterTest.java @@ -0,0 +1,50 @@ +package nl.vpro.swagger; + +import java.io.*; + +import org.junit.jupiter.api.Test; +import org.meeuw.json.grep.matching.PathMatcher; + +import nl.vpro.test.util.jackson2.Jackson2TestUtil; + +public class SwaggerFilterTest { + + @Test + public void testFilter() throws IOException { + String input = "{" + + " \"openapi\": \"3.0.1\",\n" + + " \"externalDocs\": {\n" + + " \"description\": \"NPO Frontend API WIKI\",\n" + + " \"url\": \"https://wiki.publiekeomroep.nl/display/npoapi/\"\n" + + " },\n" + + " \"servers\": [\n" + + " {\n" + + " \"url\": \"${api.basePath}\"\n" + + " }\n" + + " ]\n" + + "}"; + + SwaggerFilter filter = new SwaggerFilter(); + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + + PathMatcher matcher = filter.getPathMatcher("/v3/api", "rs.poms.omroep.nl"); + try (OutputStream out = filter.transform(outputStream, matcher)) { + out.write(input.getBytes()); + } + Jackson2TestUtil.assertThatJson(outputStream.toString()).isSimilarTo("{\n" + + " \"openapi\" : \"3.0.1\",\n" + + " \"externalDocs\" : {\n" + + " \"description\" : \"NPO Frontend API WIKI\",\n" + + " \"url\" : \"https://wiki.publiekeomroep.nl/display/npoapi/\"\n" + + " },\n" + + " \"servers\" : [ {\n" + + " \"url\" : \"/v3/api\"\n" + + " } ]\n" + + " }"); + + + + + } + +} diff --git a/vpro-shared-test/pom.xml b/vpro-shared-test/pom.xml index 7f7c8c96f..3e5dcb9ec 100644 --- a/vpro-shared-test/pom.xml +++ b/vpro-shared-test/pom.xml @@ -1,5 +1,4 @@ - 4.0.0