This is an automated email from the ASF dual-hosted git repository.
jsinovassinnaik pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/unomi.git
The following commit(s) were added to refs/heads/master by this push:
new 8cff171ef [UNOMI-899] Replace jaxrs-analyzer-maven-plugin with an
alternative for Swagger documentation generation (#732)
8cff171ef is described below
commit 8cff171ef81ad13e602be91a9bd624cc26ae4142
Author: Jerome Blanchard <[email protected]>
AuthorDate: Tue Sep 23 09:44:28 2025 +0200
[UNOMI-899] Replace jaxrs-analyzer-maven-plugin with an alternative for
Swagger documentation generation (#732)
* UNOMI-906: Add build info file at root of tar.gz
* UNOMI-899: Remove jaxrs-analyzer and fix swagger-ui openapi doc.
* UNOMI-899: Use karaf features for jackson.
---
docker/src/main/docker/docker-compose-build.yml | 29 +++++++-----
...ompose-build.yml => docker-compose-cluster.yml} | 51 +++++++++++++++++-----
docker/src/main/docker/docker-compose.yml | 29 +++++++-----
kar/src/main/feature/feature.xml | 11 ++---
package/pom.xml | 48 ++++++++++++++++++++
package/src/main/resources/BUILD | 3 ++
pom.xml | 6 +--
.../org/apache/unomi/rest/server/RestServer.java | 3 ++
.../swagger-ui/5.27.1/swagger-initializer.js | 31 +++++++++++++
9 files changed, 171 insertions(+), 40 deletions(-)
diff --git a/docker/src/main/docker/docker-compose-build.yml
b/docker/src/main/docker/docker-compose-build.yml
index 9aff5df9b..e80f55eef 100644
--- a/docker/src/main/docker/docker-compose-build.yml
+++ b/docker/src/main/docker/docker-compose-build.yml
@@ -17,34 +17,43 @@
version: '2.4'
services:
elasticsearch:
- image: docker.elastic.co/elasticsearch/elasticsearch:7.17.28
- volumes: # Persist ES data in seperate "esdata" volume
- - esdata1:/usr/share/elasticsearch/data
+ image: docker.elastic.co/elasticsearch/elasticsearch:9.1.3
+ volumes:
+ - unomi-3-elasticsearch-data:/usr/share/elasticsearch/data
environment:
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms1G -Xmx1G"
- discovery.type=single-node
- xpack.security.enabled=false
- cluster.name=contextElasticSearch
- ports: # Expose Elasticsearch ports
- - "9200:9200"
+ networks:
+ - unomi-3
+ ports:
+ - 9200:9200
- unomi:
+ node-1:
build: .
image: apache/unomi:${project.version}
- container_name: unomi
environment:
- UNOMI_ELASTICSEARCH_ADDRESSES=elasticsearch:9200
ports:
- 8181:8181
- 9443:9443
- 8102:8102
+ networks:
+ - unomi-3
links:
- elasticsearch
depends_on:
- elasticsearch
-
-volumes: # Define seperate volume for Elasticsearch data
- esdata1:
+volumes:
+ unomi-3-elasticsearch-data:
driver: local
+
+networks:
+ unomi-3:
+ name: unomi-3
+ ipam:
+ config:
+ - subnet: 172.24.32.0/24
diff --git a/docker/src/main/docker/docker-compose-build.yml
b/docker/src/main/docker/docker-compose-cluster.yml
similarity index 61%
copy from docker/src/main/docker/docker-compose-build.yml
copy to docker/src/main/docker/docker-compose-cluster.yml
index 9aff5df9b..0eca8d6d5 100644
--- a/docker/src/main/docker/docker-compose-build.yml
+++ b/docker/src/main/docker/docker-compose-cluster.yml
@@ -17,34 +17,65 @@
version: '2.4'
services:
elasticsearch:
- image: docker.elastic.co/elasticsearch/elasticsearch:7.17.28
- volumes: # Persist ES data in seperate "esdata" volume
- - esdata1:/usr/share/elasticsearch/data
+ image: docker.elastic.co/elasticsearch/elasticsearch:9.1.3
+ volumes:
+ - unomi-3-elasticsearch-data:/usr/share/elasticsearch/data
environment:
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms1G -Xmx1G"
- discovery.type=single-node
- xpack.security.enabled=false
- cluster.name=contextElasticSearch
- ports: # Expose Elasticsearch ports
- - "9200:9200"
+ networks:
+ - unomi-3
+ ports:
+ - 9200:9200
- unomi:
- build: .
+ node-1:
image: apache/unomi:${project.version}
- container_name: unomi
environment:
- UNOMI_ELASTICSEARCH_ADDRESSES=elasticsearch:9200
+ - UNOMI_CLUSTER_NODEID=unomi-3-node-1
ports:
- 8181:8181
- 9443:9443
- 8102:8102
+ networks:
+ - unomi-3
links:
- elasticsearch
depends_on:
- elasticsearch
+ wait-for-node-1:
+ image: alpine:latest
+ command: sh -c "echo 'Wait 3 minutes before starting unomi-3-node-2...' &&
sleep 180"
+ depends_on:
+ - node-1
-volumes: # Define seperate volume for Elasticsearch data
- esdata1:
+ node-2:
+ image: apache/unomi:${project.version}
+ environment:
+ - UNOMI_ELASTICSEARCH_ADDRESSES=elasticsearch:9200
+ - UNOMI_CLUSTER_NODEID=unomi-3-node-2
+ ports:
+ - 8182:8181
+ - 9444:9443
+ - 8103:8102
+ networks:
+ - unomi-3
+ links:
+ - elasticsearch
+ depends_on:
+ - wait-for-node-1
+
+volumes:
+ unomi-3-elasticsearch-data:
driver: local
+
+networks:
+ unomi-3:
+ name: unomi-3
+ ipam:
+ config:
+ - subnet: 172.24.32.0/24
diff --git a/docker/src/main/docker/docker-compose.yml
b/docker/src/main/docker/docker-compose.yml
index c8fc543cc..f1b95ba47 100644
--- a/docker/src/main/docker/docker-compose.yml
+++ b/docker/src/main/docker/docker-compose.yml
@@ -17,33 +17,42 @@
version: '2.4'
services:
elasticsearch:
- image: docker.elastic.co/elasticsearch/elasticsearch:7.17.28
- volumes: # Persist ES data in separate "esdata" volume
- - esdata1:/usr/share/elasticsearch/data
+ image: docker.elastic.co/elasticsearch/elasticsearch:9.1.3
+ volumes:
+ - unomi-3-elasticsearch-data:/usr/share/elasticsearch/data
environment:
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms1G -Xmx1G"
- discovery.type=single-node
- xpack.security.enabled=false
- cluster.name=contextElasticSearch
- ports: # Expose Elasticsearch ports
- - "9200:9200"
+ networks:
+ - unomi-3
+ ports:
+ - 9200:9200
- unomi:
+ node-1:
image: apache/unomi:${project.version}
- container_name: unomi
environment:
- UNOMI_ELASTICSEARCH_ADDRESSES=elasticsearch:9200
ports:
- 8181:8181
- 9443:9443
- 8102:8102
+ networks:
+ - unomi-3
links:
- elasticsearch
depends_on:
- elasticsearch
-
-volumes: # Define separate volume for Elasticsearch data
- esdata1:
+volumes:
+ unomi-3-elasticsearch-data:
driver: local
+
+networks:
+ unomi-3:
+ name: unomi-3
+ ipam:
+ config:
+ - subnet: 172.24.32.0/24
diff --git a/kar/src/main/feature/feature.xml b/kar/src/main/feature/feature.xml
index 16cf2e8b8..73222a0e0 100644
--- a/kar/src/main/feature/feature.xml
+++ b/kar/src/main/feature/feature.xml
@@ -38,6 +38,8 @@
<feature>feature</feature>
<feature>spifly</feature>
<feature>shell-compat</feature>
+ <feature>jackson</feature>
+ <feature>jackson-jaxrs</feature>
<configfile
finalname="/etc/org.apache.unomi.web.cfg">mvn:org.apache.unomi/unomi-wab/${project.version}/cfg/unomicfg</configfile>
<configfile
finalname="/etc/org.apache.unomi.persistence.elasticsearch.cfg">mvn:org.apache.unomi/unomi-persistence-elasticsearch-core/${project.version}/cfg/elasticsearchcfg</configfile>
<configfile
finalname="/etc/org.apache.unomi.services.cfg">mvn:org.apache.unomi/unomi-services/${project.version}/cfg/servicescfg</configfile>
@@ -54,21 +56,16 @@
<bundle
start-level="55">mvn:org.apache.httpcomponents/httpcore-osgi/${httpcore-osgi.version}</bundle>
<bundle
start-level="55">mvn:org.apache.httpcomponents/httpclient-osgi/${httpclient-osgi.version}</bundle>
<bundle
start-level="55">mvn:javax.validation/validation-api/${javax-validation.version}</bundle>
- <bundle
start-level="55">mvn:com.fasterxml.jackson.core/jackson-core/${jackson.version}</bundle>
- <bundle
start-level="55">mvn:com.fasterxml.jackson.core/jackson-databind/${jackson.version}</bundle>
- <bundle
start-level="55">mvn:com.fasterxml.jackson.core/jackson-annotations/${jackson.version}</bundle>
- <bundle
start-level="55">mvn:com.fasterxml.jackson.dataformat/jackson-dataformat-yaml/${jackson.version}</bundle>
+ <!-- Jackson bundles not included in any karaf feature -->
<bundle
start-level="55">mvn:com.fasterxml.jackson.datatype/jackson-datatype-jsr310/${jackson.version}</bundle>
<bundle
start-level="55">mvn:com.fasterxml.jackson.module/jackson-module-jaxb-annotations/${jackson.version}</bundle>
- <bundle
start-level="55">mvn:com.fasterxml.jackson.jaxrs/jackson-jaxrs-base/${jackson.version}</bundle>
- <bundle
start-level="55">mvn:com.fasterxml.jackson.jaxrs/jackson-jaxrs-json-provider/${jackson.version}</bundle>
+
<bundle
start-level="55">mvn:com.github.java-json-tools/btf/${btf.version}</bundle>
<bundle
start-level="55">mvn:com.github.java-json-tools/msg-simple/${msg-simple.version}</bundle>
<bundle
start-level="55">mvn:com.github.java-json-tools/jackson-coreutils/${jackson-coreutils.version}</bundle>
<bundle
start-level="55">mvn:com.github.java-json-tools/json-patch/${json-patch.version}</bundle>
<bundle
start-level="55">mvn:com.google.guava/guava/${guava.version}</bundle>
<bundle start-level="55">mvn:org.json/json/${org-json.version}</bundle>
- <bundle
start-level="55">mvn:org.yaml/snakeyaml/${snakeyaml.version}</bundle>
<bundle
start-level="55">mvn:joda-time/joda-time/${joda-time.version}</bundle>
<bundle
start-level="55">mvn:jakarta.annotation/jakarta.annotation-api/${jakarta-annotation-api.version}</bundle>
<bundle
start-level="55">mvn:com.google.code.findbugs/jsr305/${jsr305.version}</bundle>
diff --git a/package/pom.xml b/package/pom.xml
index 6f16886e8..db1fdc9d1 100644
--- a/package/pom.xml
+++ b/package/pom.xml
@@ -43,6 +43,7 @@
<properties>
<appendedResourcesDirectory>${basedir}/../etc/appended-resources</appendedResourcesDirectory>
+ <maven.build.timestamp.format>yyyy-MM-dd
HH:mm:ss</maven.build.timestamp.format>
</properties>
<dependencies>
@@ -134,6 +135,53 @@
</resource>
</resources>
<plugins>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>buildnumber-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <phase>validate</phase>
+ <goals>
+ <goal>create</goal>
+ </goals>
+ </execution>
+ </executions>
+ <configuration>
+ <doCheck>false</doCheck>
+ <doUpdate>false</doUpdate>
+ <shortRevisionLength>8</shortRevisionLength>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-resources-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>process-resources</id>
+ <goals>
+ <goal>resources</goal>
+ </goals>
+ <configuration>
+ <resources>
+ <resource>
+
<directory>${project.basedir}/src/main/resources</directory>
+ <filtering>true</filtering>
+ <includes>
+ <include>BUILD</include>
+ </includes>
+ </resource>
+ <resource>
+
<directory>${project.basedir}/src/main/resources</directory>
+ <filtering>false</filtering>
+ <excludes>
+ <exclude>BUILD</exclude>
+ </excludes>
+ </resource>
+ </resources>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
diff --git a/package/src/main/resources/BUILD b/package/src/main/resources/BUILD
new file mode 100644
index 000000000..79751d2fc
--- /dev/null
+++ b/package/src/main/resources/BUILD
@@ -0,0 +1,3 @@
+Version: ${project.version}
+Build tag: ${buildNumber}
+Build timestamp: ${maven.build.timestamp}
diff --git a/pom.xml b/pom.xml
index bfa0d0355..f50f9358b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -64,7 +64,7 @@
<maven.compiler.release>${java.version}</maven.compiler.release>
<karaf.version>4.4.8</karaf.version>
- <elasticsearch.version>9.0.3</elasticsearch.version>
+ <elasticsearch.version>9.1.3</elasticsearch.version>
<elasticsearch.test.version>9.1.3</elasticsearch.test.version>
<javax-validation.version>1.1.0.Final</javax-validation.version>
<commons-lang3.version>3.18.0</commons-lang3.version>
@@ -73,7 +73,7 @@
<commons-beanutils.version>1.11.0</commons-beanutils.version>
<commons-collections.version>3.2.2</commons-collections.version>
<mvel2.version>2.5.2.Final</mvel2.version>
- <snakeyaml.version>2.4</snakeyaml.version>
+ <snakeyaml.version>2.3</snakeyaml.version>
<opencsv.version>3.10</opencsv.version>
<log4j.version>2.19.0</log4j.version>
<lucene.version>9.12.2</lucene.version>
@@ -92,7 +92,7 @@
<jakarta-annotation-api.version>3.0.0</jakarta-annotation-api.version>
<jakarta-json-api.version>2.1.2</jakarta-json-api.version>
<swagger-ui.version>5.27.1</swagger-ui.version>
- <cxf.version>3.6.5</cxf.version>
+ <cxf.version>3.6.8</cxf.version>
<rs-api.version>2.1</rs-api.version>
<groovy.version>4.0.28</groovy.version>
<httpclient-osgi.version>4.5.14</httpclient-osgi.version>
diff --git a/rest/src/main/java/org/apache/unomi/rest/server/RestServer.java
b/rest/src/main/java/org/apache/unomi/rest/server/RestServer.java
index 1ec0c2a36..3431f6453 100644
--- a/rest/src/main/java/org/apache/unomi/rest/server/RestServer.java
+++ b/rest/src/main/java/org/apache/unomi/rest/server/RestServer.java
@@ -26,6 +26,7 @@ import org.apache.cxf.jaxrs.JAXRSServerFactoryBean;
import org.apache.cxf.jaxrs.openapi.OpenApiCustomizer;
import org.apache.cxf.jaxrs.openapi.OpenApiFeature;
import org.apache.cxf.jaxrs.security.SimpleAuthorizingFilter;
+import org.apache.cxf.jaxrs.swagger.ui.SwaggerUiConfig;
import org.apache.cxf.message.Message;
import org.apache.cxf.rs.security.cors.CrossOriginResourceSharingFilter;
import org.apache.unomi.api.ContextRequest;
@@ -236,6 +237,8 @@ public class RestServer {
openApiFeature.setLicenseUrl("http://www.apache.org/licenses/LICENSE-2.0.html");
openApiFeature.setScan(false);
openApiFeature.setUseContextBasedConfig(true);
+ SwaggerUiConfig swaggerUiConfig = new
SwaggerUiConfig().url("openapi.json").deepLinking(true).queryConfigEnabled(false);
+ openApiFeature.setSwaggerUiConfig(swaggerUiConfig);
OpenApiCustomizer customizer = new OpenApiCustomizer();
customizer.setDynamicBasePath(true);
openApiFeature.setCustomizer(customizer);
diff --git
a/rest/src/main/resources/META-INF/resources/webjars/swagger-ui/5.27.1/swagger-initializer.js
b/rest/src/main/resources/META-INF/resources/webjars/swagger-ui/5.27.1/swagger-initializer.js
new file mode 100644
index 000000000..b136c7761
--- /dev/null
+++
b/rest/src/main/resources/META-INF/resources/webjars/swagger-ui/5.27.1/swagger-initializer.js
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+window.onload = function() {
+ window.ui = SwaggerUIBundle({
+ url: "/openapi.json",
+ dom_id: '#swagger-ui',
+ deepLinking: true,
+ presets: [
+ SwaggerUIBundle.presets.apis,
+ SwaggerUIStandalonePreset
+ ],
+ plugins: [
+ SwaggerUIBundle.plugins.DownloadUrl
+ ],
+ layout: "StandaloneLayout"
+ });
+};