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}