diff --git a/headless-pd/headless-pd-sample/pom.xml b/headless-pd/headless-pd-sample/pom.xml
index 39c4013..192de8f 100644
--- a/headless-pd/headless-pd-sample/pom.xml
+++ b/headless-pd/headless-pd-sample/pom.xml
@@ -14,10 +14,8 @@
Sample Processing Definition Module
-
${project.artifactId}
-
src/main/resources
@@ -26,7 +24,6 @@
${project.build.directory}/generated-resources
-
org.codehaus.mojo
@@ -52,7 +49,6 @@
-
org.apache.maven.plugins
maven-jar-plugin
diff --git a/headless-pd/pom.xml b/headless-pd/pom.xml
index 09210ce..34bbc76 100644
--- a/headless-pd/pom.xml
+++ b/headless-pd/pom.xml
@@ -15,7 +15,6 @@
Headless Server Processing Definition Module Parent
-
headless-pd-sample
diff --git a/headless-performance-test/pom.xml b/headless-performance-test/pom.xml
index 7ddcae0..943b81a 100644
--- a/headless-performance-test/pom.xml
+++ b/headless-performance-test/pom.xml
@@ -29,6 +29,36 @@
0.8.0-RC1
+
+
+
+ org.scala-lang
+ scala-library
+ ${scala.version}
+
+
+ org.scala-lang
+ scala-reflect
+ ${scala.version}
+
+
+ com.typesafe.akka
+ akka-actor_2.11
+ ${akka.actor.version}
+
+
+ io.netty
+ netty-handler
+ ${netty.version}
+
+
+ org.scala-lang.modules
+ scala-java8-compat_2.11
+ ${scala.java8.compat.version}
+
+
+
+
${project.groupId}
@@ -37,7 +67,6 @@
war
test
-
io.gatling.highcharts
gatling-charts-highcharts
@@ -81,36 +110,6 @@
-
-
-
- org.scala-lang
- scala-library
- ${scala.version}
-
-
- org.scala-lang
- scala-reflect
- ${scala.version}
-
-
- com.typesafe.akka
- akka-actor_2.11
- ${akka.actor.version}
-
-
- io.netty
- netty-handler
- ${netty.version}
-
-
- org.scala-lang.modules
- scala-java8-compat_2.11
- ${scala.java8.compat.version}
-
-
-
-
@@ -125,9 +124,7 @@
-
+
performance-test
diff --git a/headless-server-app/pom.xml b/headless-server-app/pom.xml
index 2a29d50..dbf6cd7 100644
--- a/headless-server-app/pom.xml
+++ b/headless-server-app/pom.xml
@@ -21,6 +21,11 @@
headless-server-core
${project.version}
+
+ ${project.groupId}
+ headless-server-doc
+ ${project.version}
+
org.springframework.boot
diff --git a/headless-server-core/pom.xml b/headless-server-core/pom.xml
index 13632e1..18dc62a 100644
--- a/headless-server-core/pom.xml
+++ b/headless-server-core/pom.xml
@@ -77,10 +77,9 @@
javax.servlet
javax.servlet-api
- 3.1.0
provided
-
+
org.springframework.cloud
spring-cloud-starter-spectator
diff --git a/headless-server-core/src/main/java/com/coremedia/caas/CaasConfig.java b/headless-server-core/src/main/java/com/coremedia/caas/CaasConfig.java
index 9284da7..340e93b 100644
--- a/headless-server-core/src/main/java/com/coremedia/caas/CaasConfig.java
+++ b/headless-server-core/src/main/java/com/coremedia/caas/CaasConfig.java
@@ -23,6 +23,7 @@
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.filter.CommonsRequestLoggingFilter;
import org.springframework.web.servlet.config.annotation.PathMatchConfigurer;
+import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import javax.servlet.Filter;
@@ -47,6 +48,15 @@ public void configurePathMatch(PathMatchConfigurer matcher) {
matcher.setUseSuffixPatternMatch(false);
}
+
+ @Override
+ public void addResourceHandlers(ResourceHandlerRegistry registry) {
+ registry.addResourceHandler("/docs/**")
+ .addResourceLocations("classpath:/static/docs/");
+ super.addResourceHandlers(registry);
+ }
+
+
@Bean
public Filter logFilter() {
CommonsRequestLoggingFilter filter = new CommonsRequestLoggingFilter() {
diff --git a/headless-server-doc/pom.xml b/headless-server-doc/pom.xml
new file mode 100644
index 0000000..481988e
--- /dev/null
+++ b/headless-server-doc/pom.xml
@@ -0,0 +1,221 @@
+
+
+ 4.0.0
+
+
+ com.coremedia.labs
+ headless-server
+ 1-SNAPSHOT
+
+
+ headless-server-doc
+
+ Headless Server API Documentation
+
+
+ 1.5.0-alpha.16
+ 1.5.6
+ 9.1.15.0
+ 1.3.1
+
+ ${project.build.directory}/swagger
+ ${project.build.directory}/asciidoc/snippets
+ ${swagger.output.dir}/swagger.json
+ ${project.basedir}/src/docs/asciidoc
+ ${project.build.directory}/asciidoc/generated
+ ${project.build.directory}/asciidoc/html
+ ${project.build.directory}/asciidoc/pdf
+
+
+
+
+
+ javax.servlet
+ javax.servlet-api
+ provided
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+ com.vaadin.external.google
+ android-json
+
+
+
+
+ org.springframework.restdocs
+ spring-restdocs-mockmvc
+ ${spring-restdocs.version}
+ test
+
+
+ junit
+ junit
+ test
+
+
+ com.coremedia.labs
+ headless-server-core
+ ${project.version}
+ test
+
+
+
+
+ ${project.artifactId}
+
+
+ ${asciidoctor.html.output.directory}
+
+
+ ${asciidoctor.pdf.output.directory}
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+
+ ${installation.server.host}
+ ${installation.server.port}
+ ${swagger.output.dir}
+ ${swagger.snippetOutput.dir}
+
+
+
+
+
+ io.github.swagger2markup
+ swagger2markup-maven-plugin
+ ${swagger2markup.version}
+
+
+ io.github.swagger2markup
+ swagger2markup-import-files-ext
+ ${swagger2markup.version}
+
+
+ io.github.swagger2markup
+ swagger2markup-spring-restdocs-ext
+ ${swagger2markup.version}
+
+
+
+ ${swagger.input}
+ ${asciidoc.generated.output.directory}
+
+ ASCIIDOC
+ TAGS
+ ${project.basedir}/src/docs/asciidoc/extensions/overview
+ ${project.basedir}/src/docs/asciidoc/extensions/definitions
+ ${project.basedir}/src/docs/asciidoc/extensions/paths
+ ${project.basedir}src/docs/asciidoc/extensions/security/
+ ${swagger.snippetOutput.dir}
+ true
+
+
+
+
+ test
+
+ convertSwagger2markup
+
+
+
+
+
+
+ org.asciidoctor
+ asciidoctor-maven-plugin
+ ${asciidoctor-maven-plugin.version}
+
+
+ org.asciidoctor
+ asciidoctorj-pdf
+ ${asciidoctorj-pdf.version}
+
+
+ org.jruby
+ jruby-complete
+ ${jruby.version}
+
+
+
+
+ ${asciidoctor.input.directory}
+ index.adoc
+
+ book
+ left
+ 3
+
+
+
+
+ ${asciidoc.generated.output.directory}
+
+
+
+
+
+ output-html
+ test
+
+ process-asciidoc
+
+
+ html5
+ ${asciidoctor.html.output.directory}
+
+
+
+ output-pdf
+ test
+
+ process-asciidoc
+
+
+ pdf
+ ${asciidoctor.pdf.output.directory}
+
+
+
+
+
+
+ maven-resources-plugin
+
+
+ copy-resources
+ prepare-package
+
+ copy-resources
+
+
+ ${project.build.outputDirectory}/static/docs
+
+
+ ${asciidoctor.html.output.directory}
+
+
+ ${asciidoctor.pdf.output.directory}
+
+
+ ${swagger.output.dir}
+
+
+
+
+
+
+
+
+
+
diff --git a/headless-server-doc/src/docs/asciidoc/index.adoc b/headless-server-doc/src/docs/asciidoc/index.adoc
new file mode 100644
index 0000000..e254336
--- /dev/null
+++ b/headless-server-doc/src/docs/asciidoc/index.adoc
@@ -0,0 +1,4 @@
+include::{generated}/overview.adoc[]
+include::{generated}/paths.adoc[]
+include::{generated}/security.adoc[]
+include::{generated}/definitions.adoc[]
diff --git a/headless-server-doc/src/test/java/com/coremedia/caas/SwaggerOpenApiTest.java b/headless-server-doc/src/test/java/com/coremedia/caas/SwaggerOpenApiTest.java
new file mode 100644
index 0000000..3d121e4
--- /dev/null
+++ b/headless-server-doc/src/test/java/com/coremedia/caas/SwaggerOpenApiTest.java
@@ -0,0 +1,47 @@
+package com.coremedia.caas;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.autoconfigure.restdocs.AutoConfigureRestDocs;
+import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.http.MediaType;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+import org.springframework.test.context.web.WebAppConfiguration;
+import org.springframework.test.web.servlet.MockMvc;
+import org.springframework.test.web.servlet.MvcResult;
+
+import java.io.BufferedWriter;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
+
+@WebAppConfiguration
+@RunWith(SpringJUnit4ClassRunner.class)
+@AutoConfigureRestDocs(outputDir = "target/asciidoc/snippets")
+@AutoConfigureMockMvc
+@SpringBootTest(classes = {CaasServletInitializer.class})
+public class SwaggerOpenApiTest {
+
+ @Autowired
+ private MockMvc mockMvc;
+
+
+ @Test
+ public void createOpenApiJson() throws Exception {
+ String outputDir = System.getProperty("io.springfox.staticdocs.outputDir");
+ MvcResult mvcResult = this.mockMvc
+ .perform(get("/v2/api-docs?group=caas").accept(MediaType.APPLICATION_JSON))
+ .andExpect(status().isOk())
+ .andReturn();
+
+ Files.createDirectories(Paths.get(outputDir));
+ try (BufferedWriter writer = Files.newBufferedWriter(Paths.get(outputDir, "swagger.json"), StandardCharsets.UTF_8)) {
+ writer.write(mvcResult.getResponse().getContentAsString());
+ }
+ }
+}
diff --git a/headless-server-lib/pom.xml b/headless-server-lib/pom.xml
index c4ee78a..c4cdd08 100644
--- a/headless-server-lib/pom.xml
+++ b/headless-server-lib/pom.xml
@@ -14,7 +14,6 @@
Headless Server Library
-
com.coremedia.cms
@@ -26,7 +25,6 @@
cap-client-base
${coremedia.version}
-
com.coremedia.blueprint.base
bpbase-multisite-api
@@ -47,24 +45,19 @@
bpbase-settings-api
${coremedia.version}
-
-
commons-beanutils
commons-beanutils
-
com.graphql-java
graphql-java
-
org.yaml
snakeyaml
-
javax.validation
validation-api
diff --git a/headless-server-webapp/pom.xml b/headless-server-webapp/pom.xml
index 11ed430..5f5717b 100644
--- a/headless-server-webapp/pom.xml
+++ b/headless-server-webapp/pom.xml
@@ -27,6 +27,11 @@
headless-server-core
${project.version}
+
+ ${project.groupId}
+ headless-server-doc
+ ${project.version}
+
org.springframework.boot
diff --git a/pom.xml b/pom.xml
index 5c72b56..64c2c35 100644
--- a/pom.xml
+++ b/pom.xml
@@ -31,7 +31,9 @@
4.2
1.18
2.7.0
- 2.0.0.Final
+ 3.1.0
+ 2.0.0.Final
+ 2.0.0.RELEASE
1.3.5.RELEASE
0.58.2
3.2.3
@@ -63,6 +65,7 @@
headless-pd
headless-server-lib
headless-server-core
+ headless-server-doc
headless-server-app
headless-server-webapp
headless-performance-test
@@ -130,7 +133,12 @@
javax.validation
validation-api
- ${validation.api.version}
+ ${javax.validation-api.version}
+
+
+ javax.servlet
+ javax.servlet-api
+ ${javax.servlet-api.version}