Skip to content

Commit

Permalink
added maven plugin for generating schema during build time, updated s…
Browse files Browse the repository at this point in the history
…mallrye and few other dependencies to latest version
  • Loading branch information
Benjamin Kastelic committed Oct 19, 2020
1 parent c5fef2e commit 24b0f97
Show file tree
Hide file tree
Showing 10 changed files with 167 additions and 26 deletions.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -156,4 +156,5 @@ $RECYCLE.BIN/
# Windows shortcuts
*.lnk


# jenv
.java-version
6 changes: 5 additions & 1 deletion core/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,11 @@
</dependency>
<dependency>
<groupId>io.smallrye</groupId>
<artifactId>smallrye-open-api</artifactId>
<artifactId>smallrye-open-api-core</artifactId>
</dependency>
<dependency>
<groupId>io.smallrye</groupId>
<artifactId>smallrye-open-api-jaxrs</artifactId>
</dependency>

<dependency>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
package com.kumuluz.ee.openapi.mp;

import io.smallrye.openapi.api.OpenApiDocument;
import io.smallrye.openapi.runtime.io.Format;
import io.smallrye.openapi.runtime.io.OpenApiSerializer;

import javax.servlet.ServletException;
Expand Down Expand Up @@ -48,19 +49,19 @@ protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws Se
if (OpenApiDocument.INSTANCE.isSet()) {

// by default use yaml
OpenApiSerializer.Format format = OpenApiSerializer.Format.YAML;
Format format = Format.YAML;

// respect Accept header
if (req.getHeader("Accept").equals(MediaType.APPLICATION_JSON)) {
format = OpenApiSerializer.Format.JSON;
format = Format.JSON;
}

// format query parameter can override format
if (req.getParameter("format") != null) {
if (req.getParameter("format").equalsIgnoreCase("json")) {
format = OpenApiSerializer.Format.JSON;
format = Format.JSON;
} else {
format = OpenApiSerializer.Format.YAML;
format = Format.YAML;
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,17 +40,20 @@
import io.smallrye.openapi.api.OpenApiDocument;
import io.smallrye.openapi.runtime.OpenApiProcessor;
import io.smallrye.openapi.runtime.OpenApiStaticFile;
import io.smallrye.openapi.runtime.io.OpenApiSerializer;
import io.smallrye.openapi.runtime.io.Format;
import org.eclipse.microprofile.config.ConfigProvider;
import org.glassfish.jersey.server.ResourceConfig;
import org.jboss.jandex.Index;
import org.jboss.jandex.Indexer;

import java.io.IOException;
import java.io.InputStream;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import java.util.logging.Logger;
import java.util.regex.Pattern;
import java.util.stream.Collectors;

/**
* MicroProfile OpenAPI extension.
Expand All @@ -77,7 +80,7 @@ public void load() {
private OpenApiStaticFile getStaticFiles() {
OpenApiStaticFile staticFile = new OpenApiStaticFile();
ClassLoader classLoader = getClass().getClassLoader();
staticFile.setFormat(OpenApiSerializer.Format.YAML);
staticFile.setFormat(Format.YAML);

InputStream stream = classLoader.getResourceAsStream("META-INF/openapi.yaml");

Expand All @@ -87,7 +90,7 @@ private OpenApiStaticFile getStaticFiles() {

if (stream == null) {
stream = classLoader.getResourceAsStream("META-INF/openapi.json");
staticFile.setFormat(OpenApiSerializer.Format.JSON);
staticFile.setFormat(Format.JSON);
}

if (stream == null) {
Expand Down Expand Up @@ -154,22 +157,26 @@ private Index getIndex(OpenApiConfig config) {
}

// include/exclude according to configuration defined in MP spec
for (String c : config.scanClasses()) {
for (String c : patternToStringArray(config.scanClasses())) {
LOG.info("Including class: " + c);
classGraph.whitelistClasses(c);
classGraph.acceptClasses(c);
}
for (String p : config.scanPackages()) {

for (String p : patternToStringArray(config.scanClasses())) {
LOG.info("Including package: " + p);
classGraph.whitelistPackages(p);
classGraph.acceptPackages(p);
}
for (String c : config.scanExcludeClasses()) {

for (String c : patternToStringArray(config.scanExcludeClasses())) {
LOG.info("Excluding class: " + c);
classGraph.blacklistClasses(c);
classGraph.rejectClasses(c);
}
for (String p : config.scanExcludePackages()) {

for (String p : patternToStringArray(config.scanExcludePackages())) {
LOG.info("Excluding package: " + p);
classGraph.blacklistPackages(p);
classGraph.rejectPackages(p);
}

ScanResult scanResult = classGraph.scan();

ClassInfoList classInfoList = scanResult.getAllClasses();
Expand Down Expand Up @@ -220,4 +227,19 @@ public boolean isEnabled() {
.orElse(config.getBoolean("kumuluzee.openapi-mp.enabled")
.orElse(true));
}

private String[] patternToStringArray(Pattern pattern) {
if (pattern == null) {
return new String[] {};
}

return Arrays.stream(pattern.pattern().split("\\|"))
.map(s -> s.replaceAll("\\(", ""))
.map(s -> s.replaceAll("\\)", ""))
.map(s -> s.replaceAll("\\\\Q", ""))
.map(s -> s.replaceAll("\\\\E", ""))
.filter(s -> !s.isEmpty())
.collect(Collectors.toList())
.toArray(new String[] {});
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,9 @@ public List<String> addLibraries() {
libs.add("com.kumuluz.ee:kumuluzee-jax-rs-jersey:");
libs.add("com.kumuluz.ee.config:kumuluzee-config-mp:" +
versionsBundle.getString("kumuluzee-config-mp.version"));
libs.add("io.smallrye:smallrye-open-api:" +
libs.add("io.smallrye:smallrye-open-api-core:" +
versionsBundle.getString("smallrye-open-api.version"));
libs.add("io.smallrye:smallrye-open-api-jaxrs:" +
versionsBundle.getString("smallrye-open-api.version"));
libs.add("io.github.classgraph:classgraph:" +
versionsBundle.getString("classgraph.version"));
Expand Down
2 changes: 1 addition & 1 deletion core/src/test/resources/arquillian.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
xsi:schemaLocation="http://jboss.org/schema/arquillian http://www.jboss.org/schema/arquillian/arquillian_1_0.xsd">
<container qualifier="KumuluzEE" default="true">
<configuration>
<!--<property name="javaArguments">-Xmx512m -XX:MaxPermSize=128m -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=y</property>-->
<!-- <property name="javaArguments">-Xmx512m -XX:MaxPermSize=128m -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=y</property>-->
</configuration>
</container>
</arquillian>
30 changes: 23 additions & 7 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
<modules>
<module>core</module>
<module>ui</module>
<module>tools</module>
</modules>

<name>KumuluzEE OpenAPI MicroProfile Parent</name>
Expand All @@ -29,14 +30,15 @@

<jaxb-api.version>2.3.1</jaxb-api.version>

<kumuluzee.version>3.10.0</kumuluzee.version>
<kumuluzee.version>3.11.0</kumuluzee.version>
<kumuluzee-config-mp.version>1.4.0</kumuluzee-config-mp.version>
<kumuluzee-arquillian-container.version>1.1.0</kumuluzee-arquillian-container.version>

<microprofile-openapi.version>1.1.2</microprofile-openapi.version>
<smallrye-open-api.version>1.2.4</smallrye-open-api.version>
<classgraph.version>4.8.39</classgraph.version>
<swagger-ui.version>3.30.0</swagger-ui.version>
<smallrye-open-api.version>2.0.12</smallrye-open-api.version>
<classgraph.version>4.8.90</classgraph.version>
<swagger-ui.version>3.35.2</swagger-ui.version>
<maven-project.version>2.2.1</maven-project.version>

<testng.version>6.9.9</testng.version>
<org.mockito.version>3.3.3</org.mockito.version>
Expand Down Expand Up @@ -100,23 +102,37 @@
<artifactId>kumuluzee-config-mp</artifactId>
<version>${kumuluzee-config-mp.version}</version>
</dependency>

<dependency>
<groupId>io.smallrye</groupId>
<artifactId>smallrye-open-api</artifactId>
<artifactId>smallrye-open-api-core</artifactId>
<version>${smallrye-open-api.version}</version>
</dependency>
<dependency>
<groupId>io.smallrye</groupId>
<artifactId>smallrye-open-api-jaxrs</artifactId>
<version>${smallrye-open-api.version}</version>
</dependency>
<dependency>
<groupId>io.smallrye</groupId>
<artifactId>smallrye-open-api-maven-plugin</artifactId>
<version>${smallrye-open-api.version}</version>
</dependency>

<dependency>
<groupId>io.github.classgraph</groupId>
<artifactId>classgraph</artifactId>
<version>${classgraph.version}</version>
</dependency>

<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>${guava.version}</version>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-project</artifactId>
<version>${maven-project.version}</version>
</dependency>

<dependency>
<groupId>org.eclipse.microprofile.openapi</groupId>
Expand Down
50 changes: 50 additions & 0 deletions tools/maven-plugin/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>kumuluzee-openapi-mp-tools</artifactId>
<groupId>com.kumuluz.ee.openapi</groupId>
<version>1.3.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

<artifactId>kumuluzee-openapi-mp-maven-plugin</artifactId>
<packaging>maven-plugin</packaging>

<name>KumuluzEE OpenAPI MicroProfile Maven Plugin</name>

<dependencies>
<dependency>
<groupId>io.smallrye</groupId>
<artifactId>smallrye-open-api-maven-plugin</artifactId>
</dependency>

<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-plugin-api</artifactId>
</dependency>
<dependency>
<groupId>org.apache.maven.plugin-tools</groupId>
<artifactId>maven-plugin-annotations</artifactId>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-project</artifactId>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-plugin-plugin</artifactId>
<version>3.6.0</version>
<configuration>
<goalPrefix>kumuluzee-openapi-mp</goalPrefix>
</configuration>
</plugin>
</plugins>
</build>

</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.kumuluz.ee.openapi.mp.mavenplugin;

import io.smallrye.openapi.mavenplugin.GenerateSchemaMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugins.annotations.LifecyclePhase;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.ResolutionScope;

/**
* @author benjamink, Sunesis ltd.
* @since 1.0.0
*/
@Mojo(
name = "generate",
defaultPhase = LifecyclePhase.PROCESS_CLASSES,
requiresDependencyCollection = ResolutionScope.COMPILE_PLUS_RUNTIME,
requiresDependencyResolution = ResolutionScope.COMPILE_PLUS_RUNTIME
)
public class GenerateMojo extends GenerateSchemaMojo {

@Override
public void execute() throws MojoExecutionException {
super.execute();
}
}
20 changes: 20 additions & 0 deletions tools/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>kumuluzee-openapi-mp-parent</artifactId>
<groupId>com.kumuluz.ee.openapi</groupId>
<version>1.3.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

<artifactId>kumuluzee-openapi-mp-tools</artifactId>
<packaging>pom</packaging>

<name>KumuluzEE OpenAPI MicroProfile Tools</name>
<modules>
<module>maven-plugin</module>
</modules>

</project>

0 comments on commit 24b0f97

Please sign in to comment.