diff --git a/.github/workflows/codeql-analysis-java.yml b/.github/workflows/codeql-analysis-java.yml index 546e91b17..5fd21511c 100644 --- a/.github/workflows/codeql-analysis-java.yml +++ b/.github/workflows/codeql-analysis-java.yml @@ -39,10 +39,10 @@ jobs: # Prefix the list here with "+" to use these queries and those in the config file. # queries: ./path/to/local/query, your-org/your-repo/queries@main - - name: Set up JDK 11 + - name: Set up JDK 17 uses: actions/setup-java@v1 with: - java-version: 11 + java-version: 17 - run: mvn -U -ntp -e clean install -DskipTests - name: Perform CodeQL Analysis diff --git a/.github/workflows/unomi-ci-build-tests.yml b/.github/workflows/unomi-ci-build-tests.yml index e4dc433b6..094996121 100644 --- a/.github/workflows/unomi-ci-build-tests.yml +++ b/.github/workflows/unomi-ci-build-tests.yml @@ -16,10 +16,10 @@ jobs: timeout-minutes: 15 steps: - uses: actions/checkout@v4 - - name: Set up JDK 11 + - name: Set up JDK 17 uses: actions/setup-java@v1 with: - java-version: 11 + java-version: 17 cache: maven - name: Build and Unit tests run: mvn -U -ntp -e clean install @@ -29,10 +29,10 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - name: Set up JDK 11 + - name: Set up JDK 17 uses: actions/setup-java@v1 with: - java-version: 11 + java-version: 17 cache: maven - name: Integration tests run: mvn -ntp clean install -Pintegration-tests @@ -40,13 +40,13 @@ jobs: uses: actions/upload-artifact@v4 if: false # UNOMI-746 Reactivate if necessary with: - name: unomi-code-coverage-jdk11-${{ github.run_number }} + name: unomi-code-coverage-jdk17-${{ github.run_number }} path: itests/target/site/jacoco - name: Archive unomi logs uses: actions/upload-artifact@v4 if: failure() with: - name: unomi-log-jdk11-${{ github.run_number }} + name: unomi-log-jdk17-${{ github.run_number }} path: | itests/target/exam/**/data/log itests/target/elasticsearch0/data diff --git a/.github/workflows/unomi-ci-docs-deploy.yml b/.github/workflows/unomi-ci-docs-deploy.yml index 856750220..9ca17b060 100644 --- a/.github/workflows/unomi-ci-docs-deploy.yml +++ b/.github/workflows/unomi-ci-docs-deploy.yml @@ -13,10 +13,10 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - name: Set up JDK 11 + - name: Set up JDK 17 uses: actions/setup-java@v1 with: - java-version: 11 + java-version: 17 server-id: apache.snapshots.https server-username: NEXUS_USER server-password: NEXUS_PW @@ -33,10 +33,10 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - name: Set up JDK 11 + - name: Set up JDK 17 uses: actions/setup-java@v1 with: - java-version: 11 + java-version: 17 server-id: apache.snapshots.https server-username: NEXUS_USER server-password: NEXUS_PW diff --git a/BUILDING b/BUILDING index 55173c6d9..4362d11a3 100644 --- a/BUILDING +++ b/BUILDING @@ -21,8 +21,7 @@ Building Apache Unomi Initial Setup ------------- -1) Install J2SE 8.0 SDK (or later), which can be downloaded from - http://www.oracle.com/technetwork/java/javase/downloads/index.html +1) Install J2SE 17 SDK (or later), which can be downloaded from http://www.oracle.com/technetwork/java/javase/downloads/index.html 2) Make sure that your JAVA_HOME environment variable is set to the newly installed JDK location, and that your PATH includes %JAVA_HOME%\bin (windows) or diff --git a/api/pom.xml b/api/pom.xml index 3ed267975..f1dac0333 100644 --- a/api/pom.xml +++ b/api/pom.xml @@ -22,7 +22,7 @@ org.apache.unomi unomi-root - 2.7.0-SNAPSHOT + 3.0.0-SNAPSHOT unomi-api @@ -30,24 +30,43 @@ Main API of the Apache Unomi Context server bundle + + + + org.apache.unomi + unomi-bom + ${project.version} + pom + import + + + + jakarta.xml.bind jakarta.xml.bind-api - 2.3.2 provided org.apache.commons commons-lang3 + provided javax.validation validation-api + provided commons-beanutils commons-beanutils + provided + + + org.slf4j + slf4j-api + provided com.fasterxml.jackson.core diff --git a/bom/artifacts/pom.xml b/bom/artifacts/pom.xml new file mode 100644 index 000000000..7779a1aae --- /dev/null +++ b/bom/artifacts/pom.xml @@ -0,0 +1,249 @@ + + + + + 4.0.0 + + org.apache.unomi + unomi-root + 3.0.0-SNAPSHOT + ../../pom.xml + + unomi-bom-artifacts + Apache Unomi :: BOM :: Unomi Artifacts + pom + + + + + org.apache.unomi + unomi-api + ${project.version} + + + org.apache.unomi + unomi-common + ${project.version} + + + org.apache.unomi + unomi-metrics + ${project.version} + + + org.apache.unomi + unomi-scripting + ${project.version} + + + org.apache.unomi + unomi-persistence-spi + ${project.version} + + + org.apache.unomi + unomi-persistence-elasticsearch-core + ${project.version} + + + org.apache.unomi + unomi-json-schema-services + ${project.version} + + + org.apache.unomi + unomi-json-schema-rest + ${project.version} + + + org.apache.unomi + unomi-rest + ${project.version} + + + org.apache.unomi + cxs-geonames-services + ${project.version} + + + org.apache.unomi + cxs-geonames-rest + ${project.version} + + + org.apache.unomi + cxs-privacy-extension-services + ${project.version} + + + org.apache.unomi + cxs-privacy-extension-rest + ${project.version} + + + org.apache.unomi + cxs-lists-extension-services + ${project.version} + + + org.apache.unomi + cxs-lists-extension-actions + ${project.version} + + + org.apache.unomi + cxs-lists-extension-rest + ${project.version} + + + org.apache.unomi + unomi-services + ${project.version} + + + org.apache.unomi + unomi-wab + ${project.version} + + + org.apache.unomi + unomi-web-tracker-wab + ${project.version} + + + org.apache.unomi + unomi-lifecycle-watcher + ${project.version} + + + org.apache.unomi + shell-commands + ${project.version} + + + org.apache.unomi + shell-dev-commands + ${project.version} + + + org.apache.unomi + unomi-weather-update-core + ${project.version} + + + org.apache.unomi + unomi-salesforce-connector-services + ${project.version} + + + org.apache.unomi + unomi-salesforce-connector-rest + ${project.version} + + + org.apache.unomi + unomi-salesforce-connector-actions + ${project.version} + + + org.apache.unomi + unomi-router-api + ${project.version} + + + org.apache.unomi + unomi-router-core + ${project.version} + + + org.apache.unomi + unomi-router-service + ${project.version} + + + org.apache.unomi + unomi-router-rest + ${project.version} + + + org.apache.unomi + unomi-groovy-actions-services + ${project.version} + + + org.apache.unomi + unomi-groovy-actions + ${project.version} + features + xml + + + org.apache.unomi + cdp-graphql-api-impl + ${project.version} + + + org.apache.unomi + cdp-graphql-feature + ${project.version} + features + xml + + + org.apache.unomi + graphql-providers-sample + ${project.version} + + + org.apache.unomi + unomi-plugins-base + ${project.version} + + + org.apache.unomi + unomi-plugins-request + ${project.version} + + + org.apache.unomi + unomi-plugins-mail + ${project.version} + + + org.apache.unomi + unomi-plugins-optimization-test + ${project.version} + + + org.apache.unomi + unomi-kar + ${project.version} + features + xml + + + org.apache.unomi + unomi-router-karaf-feature + ${project.version} + features + xml + + + + + diff --git a/bom/pom.xml b/bom/pom.xml new file mode 100644 index 000000000..85de256f7 --- /dev/null +++ b/bom/pom.xml @@ -0,0 +1,530 @@ + + + + + 4.0.0 + + org.apache.unomi + unomi-root + 3.0.0-SNAPSHOT + ../pom.xml + + unomi-bom + Apache Unomi :: Bill Of Material + Common Dependencies used in the Apache Unomi maven modules + pom + + + + + org.apache.karaf + karaf-bom + ${karaf.version} + pom + import + + + + org.osgi + org.osgi.service.metatype.annotations + 1.4.1 + + + org.osgi + org.osgi.service.useradmin + 1.1.1 + + + org.osgi + osgi.enterprise + 7.0.0 + + + + org.apache.unomi + unomi-bom-artifacts + ${project.version} + pom + import + + + + org.apache.karaf.cellar + apache-karaf-cellar + features + ${karaf.cellar.version} + xml + + + org.apache.karaf.cellar + org.apache.karaf.cellar.core + ${karaf.cellar.version} + + + org.apache.karaf.cellar + org.apache.karaf.cellar.config + ${karaf.cellar.version} + + + org.apache.karaf.jaas + org.apache.karaf.jaas.boot + ${karaf.version} + + + + javax.validation + validation-api + ${javax-validation.version} + + + jakarta.annotation + jakarta.annotation-api + ${jakarta-annotation-api.version} + + + javax.ws.rs + javax.ws.rs-api + ${rs-api.version} + + + + org.apache.commons + commons-lang3 + ${commons-lang3.version} + + + commons-io + commons-io + ${commons-io.version} + + + org.apache.commons + commons-csv + ${commons-csv.version} + + + commons-beanutils + commons-beanutils + ${commons-beanutils.version} + + + commons-collections + commons-collections + ${commons-collections.version} + + + org.apache.commons + commons-email + ${commons-email.version} + + + commons-net + commons-net + ${commons-net.version} + + + commons-fileupload + commons-fileupload + ${commons-fileupload.version} + + + + org.elasticsearch.client + elasticsearch-rest-high-level-client + ${elasticsearch.version} + + + org.elasticsearch.test + framework + ${elasticsearch.version} + + + org.elasticsearch.plugin + transport-netty4-client + ${elasticsearch.version} + + + + org.apache.cxf + cxf-rt-frontend-jaxrs + ${cxf.version} + + + org.apache.cxf + cxf-rt-rs-service-description-openapi-v3 + ${cxf.version} + + + org.apache.cxf + cxf-rt-features-metrics + ${cxf.version} + + + org.apache.cxf + cxf-rt-features-logging + ${cxf.version} + + + org.apache.cxf + cxf-rt-transports-http + ${cxf.version} + + + org.apache.cxf + cxf-rt-rs-security-cors + ${cxf.version} + + + + com.fasterxml.jackson.core + jackson-core + ${jackson.version} + + + com.fasterxml.jackson.core + jackson-annotations + ${jackson.version} + + + com.fasterxml.jackson.core + jackson-databind + ${jackson.version} + + + com.fasterxml.jackson.module + jackson-module-jaxb-annotations + ${jackson.version} + + + com.fasterxml.jackson.dataformat + jackson-dataformat-yaml + ${jackson.version} + + + com.fasterxml.jackson.datatype + jackson-datatype-jdk8 + ${jackson.version} + + + com.fasterxml.jackson.datatype + jackson-datatype-jsr310 + ${jackson.version} + + + com.fasterxml.jackson.jaxrs + jackson-jaxrs-base + ${jackson.version} + + + com.fasterxml.jackson.jaxrs + jackson-jaxrs-json-provider + ${jackson.version} + + + + org.apache.lucene + lucene-test-framework + ${lucene.version} + + + org.apache.logging.log4j + log4j-api + ${log4j.version} + + + org.apache.logging.log4j + log4j-core + ${log4j.version} + + + org.apache.logging.log4j + log4j-1.2-api + ${log4j.version} + + + org.apache.logging.log4j + log4j-slf4j-impl + ${log4j.version} + + + org.apache.httpcomponents + httpcore-osgi + ${httpcore-osgi.version} + + + org.apache.httpcomponents + httpclient-osgi + ${httpclient-osgi.version} + + + org.apache.httpcomponents + httpclient-osgi + ${httpclient-osgi.version} + bundle + + + org.apache.kafka + kafka-clients + ${kafka-client.version} + + + org.mvel + mvel2 + ${mvel2.version} + + + org.yaml + snakeyaml + ${snakeyaml.version} + + + com.opencsv + opencsv + ${opencsv.version} + + + com.hazelcast + hazelcast-all + ${hazelcast.version} + + + net.jodah + failsafe + ${failsafe.version} + + + joda-time + joda-time + ${joda-time.version} + + + com.github.seancfoley + ipaddress + ${ipaddress.version} + + + com.github.java-json-tools + btf + ${btf.version} + + + com.github.java-json-tools + msg-simple + ${msg-simple.version} + + + com.github.java-json-tools + json-patch + ${json-patch.version} + + + com.github.java-json-tools + jackson-coreutils + ${jackson-coreutils.version} + + + com.google.guava + guava + ${guava.version} + + + org.json + json + ${org-json.version} + + + com.google.code.findbugs + jsr305 + ${jsr305.version} + + + org.webjars + swagger-ui + ${swagger-ui.version} + + + org.apache.groovy + groovy + ${groovy.version} + + + org.apache.groovy + groovy-json + ${groovy.version} + + + org.antlr + ST4 + ${st4.version} + + + com.maxmind.geoip2 + geoip2 + ${geoip2.version} + + + nl.basjes.parse.useragent + yauaa + ${yauaa.version} + + + org.cometd.java + bayeux-api + ${bayeux-api.version} + + + org.cometd.java + cometd-java-common + ${comet-java-client.version} + + + org.cometd.java + cometd-java-client-http-common + ${comet-java-client.version} + + + org.cometd.java + cometd-java-client-common + ${comet-java-client.version} + + + org.cometd.java + cometd-java-client-http-jetty + ${comet-java-client.version} + + + io.reactivex.rxjava2 + rxjava + ${reactivex.version} + + + org.antlr + antlr-runtime + ${antlr.version} + + + org.antlr + antlr4-runtime + ${antlr4.version} + + + org.antlr + stringtemplate + ${stringtemplate.version} + + + org.abego.treelayout + org.abego.treelayout.core + ${treelayout.version} + + + com.graphql-java + java-dataloader + ${java-dataloader.version} + + + org.reactivestreams + reactive-streams + ${reactive-stream.version} + + + org.checkerframework + checker-compat-qual + ${checker-compat-qual.version} + + + com.google.errorprone + error_prone_annotations + ${error_prone_annotations.version} + + + com.google.j2objc + j2objc-annotations + ${j2objc-annotations.version} + + + org.codehaus.mojo + animal-sniffer-annotations + ${animal-sniffer-annotations.version} + + + com.squareup.okhttp3 + okhttp + ${okhttp.version} + + + com.squareup.okio + okio + ${okio.version} + + + + com.graphql-java + graphql-java + ${graphql.java.version} + + + io.github.graphql-java + graphql-java-annotations + ${graphql.java.annotations.version} + + + com.graphql-java + graphql-java-extended-scalars + ${graphql.java.extended.scalars.version} + + + + org.eclipse.jetty + jetty-client + ${jetty.version} + + + org.eclipse.jetty + jetty-http + ${jetty.version} + + + org.eclipse.jetty + jetty-io + ${jetty.version} + + + org.eclipse.jetty + jetty-util + ${jetty.version} + + + org.eclipse.jetty.websocket + websocket-server + ${jetty.version} + + + + junit + junit + ${junit.version} + + + + + + artifacts + + + diff --git a/common/pom.xml b/common/pom.xml index e202af18d..2514bb721 100644 --- a/common/pom.xml +++ b/common/pom.xml @@ -18,23 +18,32 @@ 4.0.0 - org.apache.unomi unomi-root - 2.7.0-SNAPSHOT + 3.0.0-SNAPSHOT - unomi-common Apache Unomi :: Common Classes Common Classes used in the Apache Unomi Context server bundle + + + + org.apache.unomi + unomi-bom + ${project.version} + pom + import + + + + org.apache.commons commons-csv - 1.5 junit @@ -44,28 +53,22 @@ org.apache.karaf.shell org.apache.karaf.shell.console - ${version.karaf} provided - org.apache.karaf.shell org.apache.karaf.shell.table - ${version.karaf} provided org.apache.unomi unomi-api - 2.7.0-SNAPSHOT test - org.slf4j slf4j-simple - 1.7.36 test diff --git a/common/src/main/java/org/apache/unomi/common/DataTable.java b/common/src/main/java/org/apache/unomi/common/DataTable.java index 06839fccd..21862d299 100644 --- a/common/src/main/java/org/apache/unomi/common/DataTable.java +++ b/common/src/main/java/org/apache/unomi/common/DataTable.java @@ -20,7 +20,6 @@ import org.apache.commons.csv.CSVPrinter; import java.io.IOException; -import java.io.StringWriter; import java.util.ArrayList; import java.util.Comparator; import java.util.List; diff --git a/docker/pom.xml b/docker/pom.xml index 57502de25..41c568af5 100644 --- a/docker/pom.xml +++ b/docker/pom.xml @@ -22,13 +22,25 @@ org.apache.unomi unomi-root - 2.7.0-SNAPSHOT + 3.0.0-SNAPSHOT unomi-docker Apache Unomi :: Docker Image Maven project to generate Docker image + + + + org.apache.unomi + unomi-bom + ${project.version} + pom + import + + + + org.apache.unomi @@ -43,7 +55,6 @@ org.apache.maven.plugins maven-dependency-plugin - 3.1.2 copy @@ -105,7 +116,7 @@ io.fabric8 docker-maven-plugin - 0.40.2 + 0.46.0 diff --git a/docker/src/main/docker/Dockerfile b/docker/src/main/docker/Dockerfile index 6734689fc..a3f5b3efa 100644 --- a/docker/src/main/docker/Dockerfile +++ b/docker/src/main/docker/Dockerfile @@ -15,14 +15,12 @@ # limitations under the License. ################################################################################ -FROM library/eclipse-temurin:11 +FROM library/eclipse-temurin:17 # Unomi environment variables -ENV UNOMI_HOME /opt/apache-unomi -ENV PATH $PATH:$UNOMI_HOME/bin - -ENV KARAF_OPTS "-Dunomi.autoStart=true" - +ENV UNOMI_HOME=/opt/apache-unomi +ENV PATH=$PATH:$UNOMI_HOME/bin +ENV KARAF_OPTS="-Dunomi.autoStart=true" ENV UNOMI_ELASTICSEARCH_ADDRESSES=localhost:9200 WORKDIR $UNOMI_HOME diff --git a/docker/src/main/docker/docker-compose-build.yml b/docker/src/main/docker/docker-compose-build.yml index 58a8f6a14..9aff5df9b 100644 --- a/docker/src/main/docker/docker-compose-build.yml +++ b/docker/src/main/docker/docker-compose-build.yml @@ -17,7 +17,7 @@ version: '2.4' services: elasticsearch: - image: docker.elastic.co/elasticsearch/elasticsearch:7.4.2 + image: docker.elastic.co/elasticsearch/elasticsearch:7.17.28 volumes: # Persist ES data in seperate "esdata" volume - esdata1:/usr/share/elasticsearch/data environment: diff --git a/docker/src/main/docker/docker-compose.yml b/docker/src/main/docker/docker-compose.yml index fc8679033..c8fc543cc 100644 --- a/docker/src/main/docker/docker-compose.yml +++ b/docker/src/main/docker/docker-compose.yml @@ -17,7 +17,7 @@ version: '2.4' services: elasticsearch: - image: docker.elastic.co/elasticsearch/elasticsearch:7.4.2 + image: docker.elastic.co/elasticsearch/elasticsearch:7.17.28 volumes: # Persist ES data in separate "esdata" volume - esdata1:/usr/share/elasticsearch/data environment: diff --git a/extensions/geonames/pom.xml b/extensions/geonames/pom.xml index f83aaccbb..e337f3b33 100644 --- a/extensions/geonames/pom.xml +++ b/extensions/geonames/pom.xml @@ -18,20 +18,18 @@ 4.0.0 - - - services - rest - - org.apache.unomi unomi-extensions - 2.7.0-SNAPSHOT + 3.0.0-SNAPSHOT - cxs-geonames Apache Unomi :: Extensions :: Geonames Database Apache Unomi Context Server extension that integrates with the Geonames database pom + + + services + rest + diff --git a/extensions/geonames/rest/pom.xml b/extensions/geonames/rest/pom.xml index 34b3f1ce3..af09f333c 100644 --- a/extensions/geonames/rest/pom.xml +++ b/extensions/geonames/rest/pom.xml @@ -17,30 +17,49 @@ --> + 4.0.0 org.apache.unomi cxs-geonames - 2.7.0-SNAPSHOT + 3.0.0-SNAPSHOT - 4.0.0 - cxs-geonames-rest Apache Unomi :: Extensions :: Geonames Database :: REST API REST API for the Apache Unomi Context Server extension that integrates with the Geonames database bundle + + + + org.apache.unomi + unomi-bom + ${project.version} + pom + import + + + + org.apache.unomi unomi-api - ${project.version} provided - org.apache.unomi cxs-geonames-services - ${project.version} + provided + + + org.apache.unomi + unomi-persistence-spi + provided + + + + org.osgi + org.osgi.service.component.annotations provided @@ -51,8 +70,8 @@ - org.apache.cxf - cxf-rt-frontend-jaxws + org.apache.commons + commons-lang3 provided @@ -68,20 +87,16 @@ org.apache.cxf cxf-rt-rs-security-cors + provided com.fasterxml.jackson.jaxrs jackson-jaxrs-json-provider - - - org.apache.unomi - unomi-persistence-spi - ${project.version} provided - org.osgi - osgi.cmpn + org.slf4j + slf4j-api provided diff --git a/extensions/geonames/rest/src/main/java/org/apache/unomi/geonames/rest/GeonamesEndPoint.java b/extensions/geonames/rest/src/main/java/org/apache/unomi/geonames/rest/GeonamesEndPoint.java index d17bc53d1..3f1ad8118 100644 --- a/extensions/geonames/rest/src/main/java/org/apache/unomi/geonames/rest/GeonamesEndPoint.java +++ b/extensions/geonames/rest/src/main/java/org/apache/unomi/geonames/rest/GeonamesEndPoint.java @@ -27,8 +27,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.jws.WebMethod; -import javax.jws.WebService; import javax.ws.rs.*; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.PathSegment; @@ -36,7 +34,6 @@ import java.util.List; import java.util.Locale; -@WebService @Produces(MediaType.APPLICATION_JSON + ";charset=UTF-8") @CrossOriginResourceSharing( allowAllOrigins = true, @@ -55,7 +52,6 @@ public GeonamesEndPoint() { LOGGER.info("Initializing geonames service endpoint..."); } - @WebMethod(exclude = true) public void setGeonamesService(GeonamesService geonamesService) { this.geonamesService = geonamesService; } diff --git a/extensions/geonames/services/pom.xml b/extensions/geonames/services/pom.xml index 0fe65c5b9..e77971d17 100644 --- a/extensions/geonames/services/pom.xml +++ b/extensions/geonames/services/pom.xml @@ -17,32 +17,41 @@ --> + 4.0.0 org.apache.unomi cxs-geonames - 2.7.0-SNAPSHOT + 3.0.0-SNAPSHOT - - 4.0.0 - cxs-geonames-services Apache Unomi :: Extensions :: Geonames Database :: Service Service implementation for the Apache Unomi Context Server extension that integrates with the Geonames database bundle + + + + org.apache.unomi + unomi-bom + ${project.version} + pom + import + + + + org.apache.unomi unomi-api - ${project.version} provided org.apache.unomi unomi-persistence-spi - ${project.version} provided + org.apache.cxf cxf-rt-rs-security-cors @@ -51,10 +60,17 @@ org.apache.commons commons-lang3 + provided commons-beanutils commons-beanutils + provided + + + org.slf4j + slf4j-api + provided diff --git a/extensions/geonames/services/src/main/resources/OSGI-INF/blueprint/blueprint.xml b/extensions/geonames/services/src/main/resources/OSGI-INF/blueprint/blueprint.xml index 01a1a805d..758cd7090 100644 --- a/extensions/geonames/services/src/main/resources/OSGI-INF/blueprint/blueprint.xml +++ b/extensions/geonames/services/src/main/resources/OSGI-INF/blueprint/blueprint.xml @@ -17,9 +17,10 @@ --> + xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd + http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.3.0 https://aries.apache.org/schemas/blueprint-cm/blueprint-cm-1.3.0.xsd"> diff --git a/extensions/groovy-actions/karaf-kar/pom.xml b/extensions/groovy-actions/karaf-kar/pom.xml index ff874dc6d..f1233013b 100644 --- a/extensions/groovy-actions/karaf-kar/pom.xml +++ b/extensions/groovy-actions/karaf-kar/pom.xml @@ -17,18 +17,15 @@ --> + 4.0.0 org.apache.unomi unomi-groovy-actions-root - 2.7.0-SNAPSHOT + 3.0.0-SNAPSHOT - 4.0.0 - unomi-groovy-actions Apache Unomi :: Extensions :: Groovy Actions :: Apache Karaf Feature and KAR archive - Apache Karaf Feature and KAR archive for the Apache Unomi Context Server extension that provides the possibility to use - Groovy for actions - + Apache Karaf Feature and KAR archive for the Apache Unomi Context Server extension that provides the possibility to use Groovy for actions kar @@ -52,6 +49,44 @@ 85 + + + generate-features + generate-resources + + features-generate-descriptor + + + true + + + + verify-feature + process-resources + + verify + + + + mvn:org.apache.karaf.features/standard/${karaf.version}/xml/features + mvn:org.apache.karaf.features/enterprise/${karaf.version}/xml/features + mvn:org.apache.unomi/unomi-kar/${project.version}/xml/features + file:${project.build.directory}/feature/feature.xml + + org.apache.karaf:apache-karaf:zip:${karaf.version} + 17 + + framework + + + wrap + unomi-kar + unomi-groovy-actions + + true + + + diff --git a/extensions/groovy-actions/karaf-kar/src/main/feature/feature.xml b/extensions/groovy-actions/karaf-kar/src/main/feature/feature.xml index b3e0783cb..8c2893e9a 100644 --- a/extensions/groovy-actions/karaf-kar/src/main/feature/feature.xml +++ b/extensions/groovy-actions/karaf-kar/src/main/feature/feature.xml @@ -16,16 +16,11 @@ ~ limitations under the License. --> +
${project.description}
wrap unomi-kar - mvn:org.apache.groovy/groovy/${groovy.version} - mvn:org.apache.groovy/groovy-xml/${groovy.version} - mvn:org.apache.groovy/groovy-json/${groovy.version} - wrap:mvn:io.github.http-builder-ng/http-builder-ng-core/1.0.4 - mvn:org.jsoup/jsoup/1.13.1 - mvn:com.sun.activation/javax.activation/1.2.0 mvn:org.apache.unomi/unomi-groovy-actions-services/${project.version} mvn:org.apache.unomi/unomi-groovy-actions-rest/${project.version}
diff --git a/extensions/groovy-actions/pom.xml b/extensions/groovy-actions/pom.xml index 53892b110..9a76295aa 100644 --- a/extensions/groovy-actions/pom.xml +++ b/extensions/groovy-actions/pom.xml @@ -21,9 +21,8 @@ org.apache.unomi unomi-extensions - 2.7.0-SNAPSHOT + 3.0.0-SNAPSHOT - unomi-groovy-actions-root Apache Unomi :: Extensions :: Groovy Actions Apache Unomi Context Server extension that provides support for Groovy Actions diff --git a/extensions/groovy-actions/rest/pom.xml b/extensions/groovy-actions/rest/pom.xml index de1052262..8c213ec00 100644 --- a/extensions/groovy-actions/rest/pom.xml +++ b/extensions/groovy-actions/rest/pom.xml @@ -17,31 +17,50 @@ --> + 4.0.0 org.apache.unomi unomi-groovy-actions-root - 2.7.0-SNAPSHOT + 3.0.0-SNAPSHOT - 4.0.0 - unomi-groovy-actions-rest Apache Unomi :: Extensions :: Groovy Actions :: REST API REST API for the Apache Unomi Context Server extension that integrates with groovy actions bundle + + + + org.apache.unomi + unomi-bom + ${project.version} + pom + import + + + + org.apache.unomi unomi-api - ${project.version} provided - + + org.apache.unomi + unomi-persistence-spi + provided + org.apache.unomi unomi-groovy-actions-services - ${project.version} + provided + + + + org.osgi + org.osgi.service.component.annotations provided @@ -52,10 +71,16 @@
- org.apache.cxf - cxf-rt-frontend-jaxws + commons-io + commons-io + provided + + + javax.ws.rs + javax.ws.rs-api provided + org.apache.cxf cxf-rt-frontend-jaxrs @@ -77,20 +102,10 @@ provided - org.apache.unomi - unomi-persistence-spi - ${project.version} - provided - - - org.osgi - osgi.cmpn + org.slf4j + slf4j-api provided - - commons-io - commons-io -
@@ -98,14 +113,6 @@ org.apache.felix maven-bundle-plugin true - - - - sun.nio.ch;resolution:=optional, - * - - - diff --git a/extensions/groovy-actions/rest/src/main/java/org/apache/unomi/groovy/actions/rest/GroovyActionsEndPoint.java b/extensions/groovy-actions/rest/src/main/java/org/apache/unomi/groovy/actions/rest/GroovyActionsEndPoint.java index ae2236c01..8ba9ca26e 100644 --- a/extensions/groovy-actions/rest/src/main/java/org/apache/unomi/groovy/actions/rest/GroovyActionsEndPoint.java +++ b/extensions/groovy-actions/rest/src/main/java/org/apache/unomi/groovy/actions/rest/GroovyActionsEndPoint.java @@ -27,19 +27,11 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.jws.WebMethod; -import javax.jws.WebService; -import javax.ws.rs.Consumes; -import javax.ws.rs.DELETE; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; +import javax.ws.rs.*; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import java.io.IOException; -@WebService @Produces(MediaType.APPLICATION_JSON + ";charset=UTF-8") @CrossOriginResourceSharing(allowAllOrigins = true, allowCredentials = true) @Path("/groovyActions") @@ -55,7 +47,6 @@ public GroovyActionsEndPoint() { LOGGER.info("Initializing groovy actions service endpoint..."); } - @WebMethod(exclude = true) public void setGroovyActionsService(GroovyActionsService groovyActionsService) { this.groovyActionsService = groovyActionsService; } diff --git a/extensions/groovy-actions/services/pom.xml b/extensions/groovy-actions/services/pom.xml index 3d4de386e..324366b84 100644 --- a/extensions/groovy-actions/services/pom.xml +++ b/extensions/groovy-actions/services/pom.xml @@ -17,55 +17,75 @@ --> + 4.0.0 org.apache.unomi unomi-groovy-actions-root - 2.7.0-SNAPSHOT + 3.0.0-SNAPSHOT - - 4.0.0 - unomi-groovy-actions-services Apache Unomi :: Extensions :: Groovy Actions :: Service - Service implementation for the Apache Unomi Context Server extension that provides the possibility to implement actions in - Groovy - + Service implementation for the Apache Unomi Context Server extension that provides the possibility to implement actions in Groovy bundle + + + + org.apache.unomi + unomi-bom + ${project.version} + pom + import + + + + org.apache.unomi unomi-api - ${project.version} provided + + org.apache.unomi + unomi-metrics + provided + + + org.apache.unomi + unomi-persistence-spi + provided + + + org.apache.unomi + unomi-services + provided + + org.osgi osgi.core provided - org.osgi - osgi.cmpn + org.osgi.service.metatype.annotations provided - org.apache.unomi - unomi-metrics - ${project.version} + org.osgi + org.osgi.service.component provided - org.apache.unomi - unomi-persistence-spi - ${project.version} + org.osgi + org.osgi.service.component.annotations provided + - org.apache.unomi - unomi-services - ${project.version} + commons-io + commons-io provided @@ -78,6 +98,11 @@ jackson-databind provided + + org.slf4j + slf4j-api + provided + org.apache.groovy groovy @@ -90,10 +115,6 @@ ${groovy.version} provided - - commons-io - commons-io - @@ -104,10 +125,6 @@ true - - sun.nio.ch;resolution:=optional, - * - <_dsannotations>* *;scope=compile|runtime ${project.basedir} diff --git a/extensions/healthcheck/pom.xml b/extensions/healthcheck/pom.xml index 8b5f9253b..faf785cf6 100644 --- a/extensions/healthcheck/pom.xml +++ b/extensions/healthcheck/pom.xml @@ -21,39 +21,47 @@ org.apache.unomi unomi-extensions - 2.7.0-SNAPSHOT + 3.0.0-SNAPSHOT - healthcheck Apache Unomi :: Extensions :: HealthCheck Apache Unomi HealthCheck extension that provide liveliness information about unomi bundle + + + + org.apache.unomi + unomi-bom + ${project.version} + pom + import + + + + org.apache.unomi unomi-api - ${project.version} provided org.apache.unomi unomi-lifecycle-watcher - ${project.version} provided org.apache.unomi unomi-persistence-spi - ${project.version} provided org.apache.unomi shell-commands - ${project.version} provided + javax.servlet javax.servlet-api @@ -61,17 +69,34 @@ org.osgi - osgi.cmpn + org.osgi.service.useradmin provided - org.apache.httpcomponents - httpclient-osgi + org.osgi + org.osgi.service.component.annotations + provided + + + org.osgi + org.osgi.service.http + provided + + + + org.apache.commons + commons-lang3 + provided + + + org.slf4j + slf4j-api provided org.apache.httpcomponents - httpcore-osgi + httpclient-osgi + bundle provided @@ -82,7 +107,6 @@ org.apache.karaf.jaas org.apache.karaf.jaas.boot - ${karaf.version} provided diff --git a/extensions/healthcheck/src/main/java/org/apache/unomi/healthcheck/provider/ElasticSearchHealthCheckProvider.java b/extensions/healthcheck/src/main/java/org/apache/unomi/healthcheck/provider/ElasticSearchHealthCheckProvider.java index 361e68df7..96a17db1a 100644 --- a/extensions/healthcheck/src/main/java/org/apache/unomi/healthcheck/provider/ElasticSearchHealthCheckProvider.java +++ b/extensions/healthcheck/src/main/java/org/apache/unomi/healthcheck/provider/ElasticSearchHealthCheckProvider.java @@ -26,11 +26,10 @@ import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.BasicCredentialsProvider; import org.apache.http.impl.client.CloseableHttpClient; -import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; import org.apache.unomi.healthcheck.HealthCheckConfig; -import org.apache.unomi.healthcheck.HealthCheckResponse; import org.apache.unomi.healthcheck.HealthCheckProvider; +import org.apache.unomi.healthcheck.HealthCheckResponse; import org.apache.unomi.healthcheck.util.CachedValue; import org.apache.unomi.shell.migration.utils.HttpUtils; import org.osgi.service.component.annotations.Activate; diff --git a/extensions/json-schema/pom.xml b/extensions/json-schema/pom.xml index a38969f6a..8223b7753 100644 --- a/extensions/json-schema/pom.xml +++ b/extensions/json-schema/pom.xml @@ -21,7 +21,7 @@ org.apache.unomi unomi-extensions - 2.7.0-SNAPSHOT + 3.0.0-SNAPSHOT unomi-json-schema-root diff --git a/extensions/json-schema/rest/pom.xml b/extensions/json-schema/rest/pom.xml index a9d9094d6..716ed0bfd 100644 --- a/extensions/json-schema/rest/pom.xml +++ b/extensions/json-schema/rest/pom.xml @@ -17,80 +17,84 @@ --> + 4.0.0 org.apache.unomi unomi-json-schema-root - 2.7.0-SNAPSHOT + 3.0.0-SNAPSHOT - 4.0.0 - unomi-json-schema-rest Apache Unomi :: Extensions :: JSON Schema :: REST API JSON Schema REST API for the Apache Unomi Context Server bundle + + + + org.apache.unomi + unomi-bom + ${project.version} + pom + import + + + + org.apache.unomi unomi-api - ${project.version} provided - org.apache.unomi unomi-json-schema-services - ${project.version} provided - org.apache.unomi unomi-rest - ${project.version} provided - javax.servlet - javax.servlet-api + org.osgi + org.osgi.service.component.annotations provided - org.apache.cxf - cxf-rt-frontend-jaxws + javax.servlet + javax.servlet-api provided - org.apache.cxf - cxf-rt-frontend-jaxrs + javax.ws.rs + javax.ws.rs-api provided + - org.apache.cxf - cxf-rt-transports-http + commons-io + commons-io provided - org.apache.cxf - cxf-rt-rs-security-cors + org.apache.commons + commons-lang3 provided - com.fasterxml.jackson.jaxrs - jackson-jaxrs-json-provider + org.slf4j + slf4j-api provided - org.osgi - osgi.cmpn + org.apache.cxf + cxf-rt-rs-security-cors provided - - commons-io - commons-io - + @@ -98,14 +102,6 @@ org.apache.felix maven-bundle-plugin true - - - - sun.nio.ch;resolution:=optional, - * - - - diff --git a/extensions/json-schema/rest/src/main/java/org/apache/unomi/schema/rest/JsonSchemaEndPoint.java b/extensions/json-schema/rest/src/main/java/org/apache/unomi/schema/rest/JsonSchemaEndPoint.java index 5f9caabf0..51dc39a48 100644 --- a/extensions/json-schema/rest/src/main/java/org/apache/unomi/schema/rest/JsonSchemaEndPoint.java +++ b/extensions/json-schema/rest/src/main/java/org/apache/unomi/schema/rest/JsonSchemaEndPoint.java @@ -27,18 +27,13 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.jws.WebMethod; -import javax.jws.WebService; -import javax.ws.rs.Consumes; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; +import javax.ws.rs.*; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; -import java.util.*; +import java.util.Collection; +import java.util.Map; +import java.util.Set; -@WebService @Produces(MediaType.APPLICATION_JSON + ";charset=UTF-8") @CrossOriginResourceSharing(allowAllOrigins = true, allowCredentials = true) @Path("/jsonSchema") @@ -54,7 +49,6 @@ public JsonSchemaEndPoint() { LOGGER.info("Initializing JSON schema endpoint..."); } - @WebMethod(exclude = true) public void setSchemaService(SchemaService schemaService) { this.schemaService = schemaService; } diff --git a/extensions/json-schema/services/pom.xml b/extensions/json-schema/services/pom.xml index 4538c8846..01515ba6e 100644 --- a/extensions/json-schema/services/pom.xml +++ b/extensions/json-schema/services/pom.xml @@ -17,22 +17,31 @@ --> + 4.0.0 org.apache.unomi unomi-json-schema-root - 2.7.0-SNAPSHOT + 3.0.0-SNAPSHOT - - 4.0.0 - unomi-json-schema-services Apache Unomi :: Extensions :: JSON Schema :: Service JSON Schema service for the Apache Unomi Context Server bundle + + + + org.apache.unomi + unomi-bom + ${project.version} + pom + import + + + + 1.0.86 - 2.17.1 1.7.0 @@ -40,32 +49,30 @@ org.apache.unomi unomi-api - ${project.version} provided - - org.osgi - osgi.core + org.apache.unomi + unomi-persistence-spi provided org.osgi - osgi.cmpn + osgi.core provided - org.apache.unomi - unomi-persistence-spi - ${project.version} + commons-io + commons-io provided - commons-io - commons-io + org.apache.commons + commons-lang3 + provided @@ -83,38 +90,36 @@ com.fasterxml.jackson.core jackson-core - ${version.schema.jackson} - compile + provided com.fasterxml.jackson.core jackson-databind - ${version.schema.jackson} - compile + provided com.fasterxml.jackson.core jackson-annotations - ${version.schema.jackson} - compile + provided com.fasterxml.jackson.dataformat jackson-dataformat-yaml - ${version.schema.jackson} - compile + provided + + + org.slf4j + slf4j-api + provided com.ethlo.time itu ${version.schema.itu} - compile org.yaml snakeyaml - 2.2 - compile @@ -137,7 +142,6 @@ org.jcodings.specific;resolution:=optional, org.joni;resolution:=optional, org.joni.exception;resolution:=optional, - sun.nio.ch;resolution:=optional, * diff --git a/extensions/json-schema/services/src/main/java/org/apache/unomi/schema/api/ValidationError.java b/extensions/json-schema/services/src/main/java/org/apache/unomi/schema/api/ValidationError.java index 7adfabef1..7dc9cb3eb 100644 --- a/extensions/json-schema/services/src/main/java/org/apache/unomi/schema/api/ValidationError.java +++ b/extensions/json-schema/services/src/main/java/org/apache/unomi/schema/api/ValidationError.java @@ -17,8 +17,6 @@ package org.apache.unomi.schema.api; -import com.networknt.schema.ValidationMessage; - import java.io.Serializable; /** diff --git a/extensions/json-schema/services/src/main/resources/OSGI-INF/blueprint/blueprint.xml b/extensions/json-schema/services/src/main/resources/OSGI-INF/blueprint/blueprint.xml index 9998ad930..849c27fcc 100644 --- a/extensions/json-schema/services/src/main/resources/OSGI-INF/blueprint/blueprint.xml +++ b/extensions/json-schema/services/src/main/resources/OSGI-INF/blueprint/blueprint.xml @@ -17,9 +17,10 @@ --> + xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd + http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.3.0 https://aries.apache.org/schemas/blueprint-cm/blueprint-cm-1.3.0.xsd"> diff --git a/extensions/lists-extension/actions/pom.xml b/extensions/lists-extension/actions/pom.xml index e6a1f753d..81d0079d5 100644 --- a/extensions/lists-extension/actions/pom.xml +++ b/extensions/lists-extension/actions/pom.xml @@ -17,31 +17,38 @@ --> + 4.0.0 cxs-lists-extension org.apache.unomi - 2.7.0-SNAPSHOT + 3.0.0-SNAPSHOT - 4.0.0 - cxs-lists-extension-actions Apache Unomi :: Extensions :: Lists :: Actions List extension rule actions for the Apache Unomi Context Server - bundle + + + + org.apache.unomi + unomi-bom + ${project.version} + pom + import + + + + org.apache.unomi unomi-api - ${project.version} provided - org.apache.unomi cxs-lists-extension-services - ${project.version} provided diff --git a/extensions/lists-extension/actions/src/main/resources/OSGI-INF/blueprint/blueprint.xml b/extensions/lists-extension/actions/src/main/resources/OSGI-INF/blueprint/blueprint.xml index 7a5524195..e75582222 100644 --- a/extensions/lists-extension/actions/src/main/resources/OSGI-INF/blueprint/blueprint.xml +++ b/extensions/lists-extension/actions/src/main/resources/OSGI-INF/blueprint/blueprint.xml @@ -17,7 +17,7 @@ --> + xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd"> diff --git a/extensions/lists-extension/pom.xml b/extensions/lists-extension/pom.xml index 426d9f4ff..f68461fe1 100644 --- a/extensions/lists-extension/pom.xml +++ b/extensions/lists-extension/pom.xml @@ -18,21 +18,20 @@ 4.0.0 - - - services - rest - actions - - org.apache.unomi unomi-extensions - 2.7.0-SNAPSHOT + 3.0.0-SNAPSHOT cxs-lists-extension Apache Unomi :: Extensions :: Lists List extension for the Apache Unomi Context Server pom + + + services + rest + actions + diff --git a/extensions/lists-extension/rest/pom.xml b/extensions/lists-extension/rest/pom.xml index 2ef53bcba..6b1bf2c31 100644 --- a/extensions/lists-extension/rest/pom.xml +++ b/extensions/lists-extension/rest/pom.xml @@ -17,31 +17,43 @@ --> + 4.0.0 cxs-lists-extension org.apache.unomi - 2.7.0-SNAPSHOT + 3.0.0-SNAPSHOT - 4.0.0 - cxs-lists-extension-rest Apache Unomi :: Extensions :: Lists :: REST API List extension REST API for the Apache Unomi Context Server - bundle + + + + org.apache.unomi + unomi-bom + ${project.version} + pom + import + + + + org.apache.unomi unomi-api - ${project.version} provided - + + org.apache.unomi + unomi-persistence-spi + provided + org.apache.unomi cxs-lists-extension-services - ${project.version} provided @@ -50,12 +62,12 @@ javax.servlet-api provided - - org.apache.cxf - cxf-rt-frontend-jaxws + org.osgi + org.osgi.service.component.annotations provided + org.apache.cxf cxf-rt-frontend-jaxrs @@ -69,20 +81,16 @@ org.apache.cxf cxf-rt-rs-security-cors + provided com.fasterxml.jackson.jaxrs jackson-jaxrs-json-provider - - - org.apache.unomi - unomi-persistence-spi - ${project.version} provided - org.osgi - osgi.cmpn + org.slf4j + slf4j-api provided diff --git a/extensions/lists-extension/rest/src/main/java/org/apache/unomi/lists/rest/UserListServiceEndPoint.java b/extensions/lists-extension/rest/src/main/java/org/apache/unomi/lists/rest/UserListServiceEndPoint.java index 47f90e750..bd14b4780 100644 --- a/extensions/lists-extension/rest/src/main/java/org/apache/unomi/lists/rest/UserListServiceEndPoint.java +++ b/extensions/lists-extension/rest/src/main/java/org/apache/unomi/lists/rest/UserListServiceEndPoint.java @@ -28,8 +28,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.jws.WebMethod; -import javax.jws.WebService; import javax.ws.rs.*; import javax.ws.rs.core.MediaType; @@ -37,7 +35,6 @@ /** * @author Christophe Laprun */ -@WebService @Produces(MediaType.APPLICATION_JSON) @CrossOriginResourceSharing( allowAllOrigins = true, @@ -56,7 +53,6 @@ public UserListServiceEndPoint() { LOGGER.info("Initializing user list service endpoint..."); } - @WebMethod(exclude = true) public void setUserListService(UserListService userListService) { this.userListService = userListService; } diff --git a/extensions/lists-extension/services/pom.xml b/extensions/lists-extension/services/pom.xml index 7cabb2a02..e2fc3a134 100644 --- a/extensions/lists-extension/services/pom.xml +++ b/extensions/lists-extension/services/pom.xml @@ -17,31 +17,41 @@ --> + 4.0.0 cxs-lists-extension org.apache.unomi - 2.7.0-SNAPSHOT + 3.0.0-SNAPSHOT - 4.0.0 - cxs-lists-extension-services Apache Unomi :: Extensions :: Lists :: Service List extension service implementation for the Apache Unomi Context Server bundle + + + + org.apache.unomi + unomi-bom + ${project.version} + pom + import + + + + org.apache.unomi unomi-api - ${project.version} provided org.apache.unomi unomi-persistence-spi - ${project.version} provided + org.apache.cxf cxf-rt-rs-security-cors diff --git a/extensions/lists-extension/services/src/main/resources/OSGI-INF/blueprint/blueprint.xml b/extensions/lists-extension/services/src/main/resources/OSGI-INF/blueprint/blueprint.xml index 9398d0e67..78eac519a 100644 --- a/extensions/lists-extension/services/src/main/resources/OSGI-INF/blueprint/blueprint.xml +++ b/extensions/lists-extension/services/src/main/resources/OSGI-INF/blueprint/blueprint.xml @@ -17,7 +17,7 @@ --> + xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd"> diff --git a/extensions/log4j-extension/pom.xml b/extensions/log4j-extension/pom.xml index 007010d3b..4abea7495 100644 --- a/extensions/log4j-extension/pom.xml +++ b/extensions/log4j-extension/pom.xml @@ -17,39 +17,39 @@ --> - 4.0.0 - org.apache.unomi unomi-extensions - 2.7.0-SNAPSHOT - ../pom.xml + 3.0.0-SNAPSHOT - log4j-extension - bundle Apache Unomi :: Extensions :: Log4j Extension Apache Unomi log4j extensions + bundle - - UTF-8 - 1.8 - 1.8 - + + + + org.apache.unomi + unomi-bom + ${project.version} + pom + import + + + - org.apache.commons commons-lang3 - 3.15.0 + provided org.apache.logging.log4j log4j-core - 2.19.0 provided diff --git a/extensions/pom.xml b/extensions/pom.xml index 707f8b78a..df1084a3b 100644 --- a/extensions/pom.xml +++ b/extensions/pom.xml @@ -18,30 +18,14 @@ 4.0.0 - org.apache.unomi unomi-root - 2.7.0-SNAPSHOT + 3.0.0-SNAPSHOT - unomi-extensions Apache Unomi :: Extensions Apache Unomi Context Server extensions pom - - lists-extension - privacy-extension - geonames - router - salesforce-connector - weather-update - web-tracker - groovy-actions - json-schema - log4j-extension - healthcheck - - diff --git a/extensions/privacy-extension/pom.xml b/extensions/privacy-extension/pom.xml index e11174c96..f2700b46d 100644 --- a/extensions/privacy-extension/pom.xml +++ b/extensions/privacy-extension/pom.xml @@ -18,21 +18,18 @@ 4.0.0 - - - services - rest - - org.apache.unomi unomi-extensions - 2.7.0-SNAPSHOT + 3.0.0-SNAPSHOT - cxs-privacy-extension Apache Unomi :: Extensions :: Privacy Privacy management extension for the Apache Unomi Context Server - pom + + + services + rest + diff --git a/extensions/privacy-extension/rest/pom.xml b/extensions/privacy-extension/rest/pom.xml index ebfa43556..8bafcbdb3 100644 --- a/extensions/privacy-extension/rest/pom.xml +++ b/extensions/privacy-extension/rest/pom.xml @@ -17,44 +17,58 @@ --> + 4.0.0 cxs-privacy-extension org.apache.unomi - 2.7.0-SNAPSHOT + 3.0.0-SNAPSHOT - 4.0.0 - cxs-privacy-extension-rest Apache Unomi :: Extensions :: Privacy :: REST API Privacy management extension REST API for the Apache Unomi Context Server bundle + + + + org.apache.unomi + unomi-bom + ${project.version} + pom + import + + + + org.apache.unomi unomi-api - ${project.version} provided - org.apache.unomi cxs-privacy-extension-services - ${project.version} + provided + + + org.apache.unomi + unomi-persistence-spi provided - javax.servlet - javax.servlet-api + org.osgi + org.osgi.service.component.annotations provided - org.apache.cxf - cxf-rt-frontend-jaxws + javax.servlet + javax.servlet-api provided + org.apache.cxf cxf-rt-frontend-jaxrs @@ -68,43 +82,15 @@ org.apache.cxf cxf-rt-rs-security-cors + provided + com.fasterxml.jackson.jaxrs jackson-jaxrs-json-provider - - - org.apache.unomi - unomi-persistence-spi - ${project.version} - provided - - - org.osgi - osgi.cmpn provided - - - - com.sebastian-daschner - jaxrs-analyzer-maven-plugin - 0.17 - - - - analyze-jaxrs - - - swagger - unomi.apache.org - - - - - - diff --git a/extensions/privacy-extension/rest/src/main/java/org/apache/unomi/privacy/rest/PrivacyServiceEndPoint.java b/extensions/privacy-extension/rest/src/main/java/org/apache/unomi/privacy/rest/PrivacyServiceEndPoint.java index 8c3dafc1b..f804ac164 100644 --- a/extensions/privacy-extension/rest/src/main/java/org/apache/unomi/privacy/rest/PrivacyServiceEndPoint.java +++ b/extensions/privacy-extension/rest/src/main/java/org/apache/unomi/privacy/rest/PrivacyServiceEndPoint.java @@ -23,8 +23,6 @@ import org.osgi.service.component.annotations.Component; import org.osgi.service.component.annotations.Reference; -import javax.jws.WebMethod; -import javax.jws.WebService; import javax.ws.rs.*; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; @@ -33,7 +31,6 @@ /** * REST API end point for privacy service */ -@WebService @Produces(MediaType.APPLICATION_JSON) @CrossOriginResourceSharing( allowAllOrigins = true, @@ -46,7 +43,6 @@ public class PrivacyServiceEndPoint { @Reference private PrivacyService privacyService; - @WebMethod(exclude = true) public void setPrivacyService(PrivacyService privacyService) { this.privacyService = privacyService; } diff --git a/extensions/privacy-extension/services/pom.xml b/extensions/privacy-extension/services/pom.xml index ff8b64442..871d52245 100644 --- a/extensions/privacy-extension/services/pom.xml +++ b/extensions/privacy-extension/services/pom.xml @@ -17,46 +17,60 @@ --> + 4.0.0 cxs-privacy-extension org.apache.unomi - 2.7.0-SNAPSHOT + 3.0.0-SNAPSHOT - 4.0.0 - cxs-privacy-extension-services Apache Unomi :: Extensions :: Privacy :: Services Privacy management extension service implementation for the Apache Unomi Context Server - 2.7.0-SNAPSHOT bundle + + + + org.apache.unomi + unomi-bom + ${project.version} + pom + import + + + + org.apache.unomi unomi-api - ${project.version} provided org.apache.unomi unomi-persistence-spi - ${project.version} provided - org.apache.cxf - cxf-rt-rs-security-cors + org.apache.unomi + unomi-lifecycle-watcher provided + org.osgi osgi.core provided + - org.apache.unomi - unomi-lifecycle-watcher - ${project.version} + org.apache.cxf + cxf-rt-rs-security-cors + provided + + + org.slf4j + slf4j-api provided diff --git a/extensions/privacy-extension/services/src/main/resources/OSGI-INF/blueprint/blueprint.xml b/extensions/privacy-extension/services/src/main/resources/OSGI-INF/blueprint/blueprint.xml index 522918044..58a03fad3 100644 --- a/extensions/privacy-extension/services/src/main/resources/OSGI-INF/blueprint/blueprint.xml +++ b/extensions/privacy-extension/services/src/main/resources/OSGI-INF/blueprint/blueprint.xml @@ -15,13 +15,13 @@ ~ See the License for the specific language governing permissions and ~ limitations under the License. --> + - - - + diff --git a/extensions/router/pom.xml b/extensions/router/pom.xml index 952614678..8ceb69a33 100644 --- a/extensions/router/pom.xml +++ b/extensions/router/pom.xml @@ -16,13 +16,11 @@ --> 4.0.0 - org.apache.unomi unomi-extensions - 2.7.0-SNAPSHOT + 3.0.0-SNAPSHOT - unomi-router Apache Unomi :: Extensions :: Router Apache Camel Router for the Apache Unomi Context server @@ -31,7 +29,6 @@ 2.23.1 0.11.0.3 - 3.10.0 diff --git a/extensions/router/router-api/pom.xml b/extensions/router/router-api/pom.xml index ef5a6d63c..427a53407 100644 --- a/extensions/router/router-api/pom.xml +++ b/extensions/router/router-api/pom.xml @@ -16,23 +16,33 @@ ~ limitations under the License. --> + 4.0.0 unomi-router org.apache.unomi - 2.7.0-SNAPSHOT + 3.0.0-SNAPSHOT - 4.0.0 - unomi-router-api Apache Unomi :: Extensions :: Router :: API Router Specification API bundle + + + + org.apache.unomi + unomi-bom + ${project.version} + pom + import + + + + org.apache.unomi unomi-api - ${project.version} provided diff --git a/extensions/router/router-core/pom.xml b/extensions/router/router-core/pom.xml index 8b7d46aad..4abe0bab4 100644 --- a/extensions/router/router-core/pom.xml +++ b/extensions/router/router-core/pom.xml @@ -16,52 +16,61 @@ ~ limitations under the License. --> + 4.0.0 unomi-router org.apache.unomi - 2.7.0-SNAPSHOT + 3.0.0-SNAPSHOT - 4.0.0 - unomi-router-core Apache Unomi :: Extensions :: Router :: Core Router Core (Apache Camel Routes) bundle + + + + org.apache.unomi + unomi-bom + ${project.version} + pom + import + + + + - - org.osgi - osgi.core - provided - - - org.osgi - osgi.cmpn - provided - org.apache.unomi unomi-api - ${project.version} provided org.apache.unomi unomi-persistence-spi - ${project.version} provided org.apache.unomi unomi-services - ${project.version} provided org.apache.unomi unomi-router-api - ${project.version} + + + org.osgi + osgi.core + provided + + + org.osgi + org.osgi.service.component.annotations + provided + + org.apache.camel camel-core @@ -90,6 +99,7 @@ org.apache.camel camel-ftp ${camel.version} + provided org.apache.camel @@ -97,14 +107,15 @@ ${camel.version} provided + org.apache.commons commons-lang3 + provided commons-net commons-net - ${commons-net.version} commons-beanutils @@ -113,13 +124,12 @@ commons-logging commons-logging - 1.1.1 provided + com.opencsv opencsv - 3.10 org.apache.servicemix.bundles @@ -133,6 +143,11 @@ ${kafka.client.version} provided + + org.slf4j + slf4j-api + provided + diff --git a/extensions/router/router-core/src/main/java/org/apache/unomi/router/core/context/RouterCamelContext.java b/extensions/router/router-core/src/main/java/org/apache/unomi/router/core/context/RouterCamelContext.java index 87d275456..4d329209d 100644 --- a/extensions/router/router-core/src/main/java/org/apache/unomi/router/core/context/RouterCamelContext.java +++ b/extensions/router/router-core/src/main/java/org/apache/unomi/router/core/context/RouterCamelContext.java @@ -148,7 +148,6 @@ public void run() { } } - for (Map.Entry exportConfigToRefresh : exportConfigsToRefresh.entrySet()) { try { if (exportConfigToRefresh.getValue().equals(RouterConstants.CONFIG_CAMEL_REFRESH.UPDATED)) { diff --git a/extensions/router/router-core/src/main/resources/OSGI-INF/blueprint/blueprint.xml b/extensions/router/router-core/src/main/resources/OSGI-INF/blueprint/blueprint.xml index 281c93f91..aae3abbe2 100644 --- a/extensions/router/router-core/src/main/resources/OSGI-INF/blueprint/blueprint.xml +++ b/extensions/router/router-core/src/main/resources/OSGI-INF/blueprint/blueprint.xml @@ -15,13 +15,12 @@ ~ See the License for the specific language governing permissions and ~ limitations under the License. --> + + xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd + http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.3.0 https://aries.apache.org/schemas/blueprint-cm/blueprint-cm-1.3.0.xsd"> diff --git a/extensions/router/router-karaf-feature/pom.xml b/extensions/router/router-karaf-feature/pom.xml index 1ef821ef1..9676780cf 100644 --- a/extensions/router/router-karaf-feature/pom.xml +++ b/extensions/router/router-karaf-feature/pom.xml @@ -16,27 +16,74 @@ ~ limitations under the License. --> + 4.0.0 unomi-router org.apache.unomi - 2.7.0-SNAPSHOT + 3.0.0-SNAPSHOT - 4.0.0 - unomi-router-karaf-feature Apache Unomi :: Extensions :: Router :: Apache Karaf Feature Apache Karaf feature for the Apache Unomi Context Server extension kar + + + + + org.apache.unomi + unomi-bom + ${project.version} + pom + import + + + + - org.apache.servicemix.bundles - org.apache.servicemix.bundles.jsch - 0.1.54_1 + org.apache.unomi + unomi-persistence-spi + provided + + + org.apache.unomi + unomi-router-api + + + org.apache.unomi + unomi-router-core + + + org.apache.unomi + unomi-router-service + + + org.apache.unomi + unomi-router-rest + + + + org.apache.cxf + cxf-rt-rs-security-cors commons-net commons-net - ${commons-net.version} + + + org.apache.httpcomponents + httpclient-osgi + bundle + + + org.apache.httpcomponents + httpcore-osgi + + + + org.apache.servicemix.bundles + org.apache.servicemix.bundles.jsch + 0.1.54_1 org.apache.kafka @@ -88,49 +135,6 @@ camel-kafka ${camel.version} - - - org.apache.cxf - cxf-rt-rs-security-cors - ${cxf.version} - - - - - org.apache.unomi - unomi-persistence-spi - ${project.version} - provided - - - org.apache.unomi - unomi-router-api - ${project.version} - - - org.apache.unomi - unomi-router-core - ${project.version} - - - org.apache.unomi - unomi-router-service - ${project.version} - - - org.apache.unomi - unomi-router-rest - ${project.version} - - - org.apache.httpcomponents - httpclient-osgi - bundle - - - org.apache.httpcomponents - httpcore-osgi - @@ -154,6 +158,44 @@ 90 + + + generate-features + generate-resources + + features-generate-descriptor + + + true + + + + verify-feature + process-resources + + verify + + + + mvn:org.apache.karaf.features/standard/${karaf.version}/xml/features + mvn:org.apache.karaf.features/enterprise/${karaf.version}/xml/features + mvn:org.apache.unomi/unomi-kar/${project.version}/xml/features + file:${project.build.directory}/feature/feature.xml + + org.apache.karaf:apache-karaf:zip:${karaf.version} + 17 + + framework + + + wrap + unomi-kar + unomi-router-karaf-feature + + true + + + diff --git a/extensions/router/router-karaf-feature/src/main/feature/feature.xml b/extensions/router/router-karaf-feature/src/main/feature/feature.xml index 6d707cf67..17e9cab7e 100644 --- a/extensions/router/router-karaf-feature/src/main/feature/feature.xml +++ b/extensions/router/router-karaf-feature/src/main/feature/feature.xml @@ -15,7 +15,7 @@ ~ See the License for the specific language governing permissions and ~ limitations under the License. --> - +
Apache Karaf feature for the Apache Unomi Context Server extension
wrap diff --git a/extensions/router/router-rest/pom.xml b/extensions/router/router-rest/pom.xml index 341594b03..385b68586 100644 --- a/extensions/router/router-rest/pom.xml +++ b/extensions/router/router-rest/pom.xml @@ -16,43 +16,68 @@ ~ limitations under the License. --> + 4.0.0 unomi-router org.apache.unomi - 2.7.0-SNAPSHOT + 3.0.0-SNAPSHOT - 4.0.0 - unomi-router-rest Apache Unomi :: Extensions :: Router :: REST API Router REST API bundle + + + + org.apache.unomi + unomi-bom + ${project.version} + pom + import + + + + org.apache.unomi - unomi-router-api - ${project.version} + unomi-api provided org.apache.unomi - unomi-api - ${project.version} + unomi-persistence-spi provided org.apache.unomi - unomi-persistence-spi - ${project.version} + unomi-router-api + provided + + + + org.osgi + org.osgi.service.component.annotations + provided + + + + javax.servlet + javax.servlet-api + provided + + + javax.validation + validation-api provided javax.ws.rs javax.ws.rs-api - 2.0.1 provided + org.apache.cxf cxf-rt-rs-security-cors @@ -72,24 +97,29 @@ com.fasterxml.jackson.core jackson-databind - ${version.jackson.databind} provided - javax.servlet - javax.servlet-api - provided - - - org.osgi - osgi.cmpn - provided - - - javax.validation - validation-api + org.slf4j + slf4j-api provided + + + + org.apache.felix + maven-bundle-plugin + true + true + + + <_dsannotations>* + + + + + + diff --git a/extensions/router/router-rest/src/main/java/org/apache/unomi/router/rest/ExportConfigurationServiceEndPoint.java b/extensions/router/router-rest/src/main/java/org/apache/unomi/router/rest/ExportConfigurationServiceEndPoint.java index b9462c0b6..317345209 100644 --- a/extensions/router/router-rest/src/main/java/org/apache/unomi/router/rest/ExportConfigurationServiceEndPoint.java +++ b/extensions/router/router-rest/src/main/java/org/apache/unomi/router/rest/ExportConfigurationServiceEndPoint.java @@ -26,8 +26,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.jws.WebMethod; -import javax.jws.WebService; import javax.ws.rs.Consumes; import javax.ws.rs.POST; import javax.ws.rs.Path; @@ -43,7 +41,6 @@ /** * A JAX-RS endpoint to manage {@link ExportConfiguration}s. */ -@WebService @CrossOriginResourceSharing( allowAllOrigins = true, allowCredentials = true @@ -64,18 +61,15 @@ public ExportConfigurationServiceEndPoint() throws KeyStoreException, NoSuchAlgo LOGGER.info("Initializing export configuration service endpoint..."); } - @WebMethod(exclude = true) @Reference(target="(configDiscriminator=EXPORT)") public void setExportConfigurationService(ImportExportConfigurationService exportConfigurationService) { configurationService = exportConfigurationService; } - @WebMethod(exclude = true) public void setProfileExportService(ProfileExportService profileExportService) { this.profileExportService = profileExportService; } - @WebMethod(exclude = true) public void setProfileService(ProfileService profileService) { this.profileService = profileService; } diff --git a/extensions/router/router-rest/src/main/java/org/apache/unomi/router/rest/ImportConfigurationServiceEndPoint.java b/extensions/router/router-rest/src/main/java/org/apache/unomi/router/rest/ImportConfigurationServiceEndPoint.java index 37dd38bb9..fa87f47ad 100644 --- a/extensions/router/router-rest/src/main/java/org/apache/unomi/router/rest/ImportConfigurationServiceEndPoint.java +++ b/extensions/router/router-rest/src/main/java/org/apache/unomi/router/rest/ImportConfigurationServiceEndPoint.java @@ -28,8 +28,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.jws.WebMethod; -import javax.jws.WebService; import javax.validation.constraints.NotNull; import javax.validation.constraints.Pattern; import javax.ws.rs.Consumes; @@ -49,7 +47,6 @@ /** * A JAX-RS endpoint to manage {@link ImportConfiguration}s. */ -@WebService @CrossOriginResourceSharing( allowAllOrigins = true, allowCredentials = true @@ -63,7 +60,6 @@ public class ImportConfigurationServiceEndPoint extends AbstractConfigurationSer @Reference protected ConfigSharingService configSharingService; - @WebMethod(exclude = true) public void setConfigSharingService(ConfigSharingService configSharingService) { this.configSharingService = configSharingService; } @@ -72,7 +68,6 @@ public ImportConfigurationServiceEndPoint() throws KeyStoreException, NoSuchAlgo LOGGER.info("Initializing import configuration service endpoint..."); } - @WebMethod(exclude = true) @Reference(target="(configDiscriminator=IMPORT)") public void setImportConfigurationService(ImportExportConfigurationService importConfigurationService) { configurationService = importConfigurationService; diff --git a/extensions/router/router-service/pom.xml b/extensions/router/router-service/pom.xml index c24e9e2d6..cd81d40eb 100644 --- a/extensions/router/router-service/pom.xml +++ b/extensions/router/router-service/pom.xml @@ -16,56 +16,43 @@ ~ limitations under the License. --> + 4.0.0 unomi-router org.apache.unomi - 2.7.0-SNAPSHOT + 3.0.0-SNAPSHOT - 4.0.0 - unomi-router-service Apache Unomi :: Extensions :: Router :: Services Router Services bundle - - - - org.apache.felix - maven-bundle-plugin - true - - - *;scope=compile|runtime - - sun.misc;resolution:=optional, - * - - - - - - + + + + org.apache.unomi + unomi-bom + ${project.version} + pom + import + + + org.apache.unomi unomi-api - ${project.version} provided - org.apache.unomi - unomi-router-api - ${project.version} + unomi-persistence-spi provided - org.apache.unomi - unomi-persistence-spi - ${project.version} + unomi-router-api provided @@ -74,23 +61,46 @@ osgi.core provided
- org.osgi - osgi.cmpn + org.osgi.service.component.annotations provided commons-beanutils commons-beanutils + provided org.apache.commons commons-lang3 + provided + + + org.slf4j + slf4j-api + provided -
+ + + + org.apache.felix + maven-bundle-plugin + true + + + *;scope=compile|runtime + + sun.misc;resolution:=optional, + * + + + + + +
diff --git a/extensions/router/router-service/src/main/resources/OSGI-INF/blueprint/blueprint.xml b/extensions/router/router-service/src/main/resources/OSGI-INF/blueprint/blueprint.xml index 8b187cad6..845388496 100644 --- a/extensions/router/router-service/src/main/resources/OSGI-INF/blueprint/blueprint.xml +++ b/extensions/router/router-service/src/main/resources/OSGI-INF/blueprint/blueprint.xml @@ -18,7 +18,7 @@ + xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd"> diff --git a/extensions/salesforce-connector/actions/pom.xml b/extensions/salesforce-connector/actions/pom.xml index e3d7c2b7c..504ae25cb 100644 --- a/extensions/salesforce-connector/actions/pom.xml +++ b/extensions/salesforce-connector/actions/pom.xml @@ -17,33 +17,41 @@ --> + 4.0.0 org.apache.unomi unomi-salesforce-connector - 2.7.0-SNAPSHOT + 3.0.0-SNAPSHOT - 4.0.0 - unomi-salesforce-connector-actions Apache Unomi :: Extensions :: Salesforce connector :: Rule Actions Rule Actions for the Apache Unomi Context Server extension that integrates with Salesforce bundle + + + + org.apache.unomi + unomi-bom + ${project.version} + pom + import + + + + org.apache.unomi unomi-api - ${project.version} provided org.apache.unomi unomi-salesforce-connector-services - ${project.version} provided - diff --git a/extensions/salesforce-connector/actions/src/main/resources/OSGI-INF/blueprint/blueprint.xml b/extensions/salesforce-connector/actions/src/main/resources/OSGI-INF/blueprint/blueprint.xml index 3d0e50e67..63a6d3e8d 100644 --- a/extensions/salesforce-connector/actions/src/main/resources/OSGI-INF/blueprint/blueprint.xml +++ b/extensions/salesforce-connector/actions/src/main/resources/OSGI-INF/blueprint/blueprint.xml @@ -18,7 +18,7 @@ + xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd"> diff --git a/extensions/salesforce-connector/karaf-kar/pom.xml b/extensions/salesforce-connector/karaf-kar/pom.xml index 5bf6caff2..66c84e05b 100644 --- a/extensions/salesforce-connector/karaf-kar/pom.xml +++ b/extensions/salesforce-connector/karaf-kar/pom.xml @@ -17,50 +17,56 @@ --> + 4.0.0 org.apache.unomi unomi-salesforce-connector - 2.7.0-SNAPSHOT + 3.0.0-SNAPSHOT - 4.0.0 - unomi-salesforce-connector-karaf-kar Apache Unomi :: Extensions :: Salesforce connector :: Apache Karaf Feature and KAR archive Apache Karaf Feature and KAR archive for the Apache Unomi Context Server extension that integrates with Salesforce kar + + + + org.apache.unomi + unomi-bom + ${project.version} + pom + import + + + + org.apache.unomi unomi-api - ${project.version} provided - - - org.apache.httpcomponents - httpcore-osgi - - - org.apache.httpcomponents - httpclient-osgi - org.apache.unomi unomi-salesforce-connector-services - ${project.version} org.apache.unomi unomi-salesforce-connector-rest - ${project.version} org.apache.unomi unomi-salesforce-connector-actions - ${project.version} + + org.apache.httpcomponents + httpcore-osgi + + + org.apache.httpcomponents + httpclient-osgi + @@ -84,6 +90,43 @@ 85 + + + generate-features + generate-resources + + features-generate-descriptor + + + true + + + + verify-feature + process-resources + + verify + + + + mvn:org.apache.karaf.features/standard/${karaf.version}/xml/features + mvn:org.apache.karaf.features/enterprise/${karaf.version}/xml/features + mvn:org.apache.unomi/unomi-kar/${project.version}/xml/features + file:${project.build.directory}/feature/feature.xml + + org.apache.karaf:apache-karaf:zip:${karaf.version} + 17 + + framework + + + unomi-kar + unomi-salesforce-connector-karaf-kar + + true + + + diff --git a/extensions/salesforce-connector/karaf-kar/src/main/feature/feature.xml b/extensions/salesforce-connector/karaf-kar/src/main/feature/feature.xml index aa544d8a2..75e3c7114 100644 --- a/extensions/salesforce-connector/karaf-kar/src/main/feature/feature.xml +++ b/extensions/salesforce-connector/karaf-kar/src/main/feature/feature.xml @@ -15,7 +15,7 @@ ~ See the License for the specific language governing permissions and ~ limitations under the License. --> - +
Apache Karaf feature for the Apache Unomi Context Server extension that integrates with Salesforce
unomi-kar diff --git a/extensions/salesforce-connector/pom.xml b/extensions/salesforce-connector/pom.xml index b759f7d5b..106c19731 100644 --- a/extensions/salesforce-connector/pom.xml +++ b/extensions/salesforce-connector/pom.xml @@ -21,9 +21,8 @@ org.apache.unomi unomi-extensions - 2.7.0-SNAPSHOT + 3.0.0-SNAPSHOT - unomi-salesforce-connector Apache Unomi :: Extensions :: Salesforce connector Apache Unomi Context Server extension that integrates with Salesforce diff --git a/extensions/salesforce-connector/rest/pom.xml b/extensions/salesforce-connector/rest/pom.xml index d40ff5314..190f112c3 100644 --- a/extensions/salesforce-connector/rest/pom.xml +++ b/extensions/salesforce-connector/rest/pom.xml @@ -17,51 +17,74 @@ --> + 4.0.0 org.apache.unomi unomi-salesforce-connector - 2.7.0-SNAPSHOT + 3.0.0-SNAPSHOT - 4.0.0 - unomi-salesforce-connector-rest Apache Unomi :: Extensions :: Salesforce connector :: REST API REST API for the Apache Unomi Context Server extension that integrates with Salesforce bundle + + + + org.apache.unomi + unomi-bom + ${project.version} + pom + import + + + + org.apache.unomi unomi-api - ${project.version} provided - + + org.apache.unomi + unomi-persistence-spi + provided + org.apache.unomi unomi-salesforce-connector-services - ${project.version} provided - javax.servlet - javax.servlet-api + org.osgi + osgi.core provided - - org.apache.cxf - cxf-rt-frontend-jaxws + org.osgi + org.osgi.service.component.annotations + provided + + + + javax.servlet + javax.servlet-api + provided + + + + javax.ws.rs + javax.ws.rs-api provided + org.apache.cxf cxf-rt-frontend-jaxrs @@ -75,26 +98,11 @@ org.apache.cxf cxf-rt-rs-security-cors + provided com.fasterxml.jackson.jaxrs jackson-jaxrs-json-provider - - - org.apache.unomi - unomi-persistence-spi - ${project.version} - provided - - - - org.osgi - osgi.core - provided - - - org.osgi - osgi.cmpn provided @@ -131,22 +139,6 @@
- - com.sebastian-daschner - jaxrs-analyzer-maven-plugin - 0.17 - - - - analyze-jaxrs - - - swagger - unomi.apache.org - - - -
diff --git a/extensions/salesforce-connector/rest/src/main/java/org/apache/unomi/sfdc/rest/SFDCEndPoint.java b/extensions/salesforce-connector/rest/src/main/java/org/apache/unomi/sfdc/rest/SFDCEndPoint.java index 85158e255..d882a022c 100644 --- a/extensions/salesforce-connector/rest/src/main/java/org/apache/unomi/sfdc/rest/SFDCEndPoint.java +++ b/extensions/salesforce-connector/rest/src/main/java/org/apache/unomi/sfdc/rest/SFDCEndPoint.java @@ -25,8 +25,6 @@ import org.osgi.service.component.annotations.Component; import org.osgi.service.component.annotations.Reference; -import javax.jws.WebMethod; -import javax.jws.WebService; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; @@ -36,7 +34,6 @@ import java.util.HashMap; import java.util.Map; -@WebService @Produces(MediaType.APPLICATION_JSON + ";charset=UTF-8") @CrossOriginResourceSharing( allowAllOrigins = true, @@ -59,7 +56,6 @@ public void activate(ComponentContext componentContext) { this.bundleContext = componentContext.getBundleContext(); } - @WebMethod(exclude = true) public void setSFDCService(SFDCService sfdcService) { this.sfdcService = sfdcService; } diff --git a/extensions/salesforce-connector/services/pom.xml b/extensions/salesforce-connector/services/pom.xml index 5ab56663c..feb1fd593 100644 --- a/extensions/salesforce-connector/services/pom.xml +++ b/extensions/salesforce-connector/services/pom.xml @@ -17,36 +17,50 @@ --> + 4.0.0 org.apache.unomi unomi-salesforce-connector - 2.7.0-SNAPSHOT + 3.0.0-SNAPSHOT - - 4.0.0 - unomi-salesforce-connector-services Apache Unomi :: Extensions :: Salesforce connector :: Service Service implementation for the Apache Unomi Context Server extension that integrates with Salesforce bundle + + + + org.apache.unomi + unomi-bom + ${project.version} + pom + import + + + + org.apache.unomi unomi-api - ${project.version} provided org.apache.unomi unomi-persistence-spi - ${project.version} provided + + + org.apache.commons + commons-lang3 + provided + + org.apache.cxf cxf-rt-rs-security-cors - ${cxf.version} provided @@ -57,37 +71,38 @@ org.eclipse.jetty jetty-client - 9.4.48.v20220622 org.eclipse.jetty jetty-http - 9.4.48.v20220622 org.eclipse.jetty jetty-io - 9.4.48.v20220622 org.eclipse.jetty jetty-util - 9.4.48.v20220622 org.cometd.java bayeux-api - 4.0.9 + + + org.cometd.java + cometd-java-common org.cometd.java cometd-java-client-common - 5.0.13 + + + org.cometd.java + cometd-java-client-http-common org.cometd.java cometd-java-client-http-jetty - 5.0.13 com.fasterxml.jackson.core @@ -99,24 +114,26 @@ jackson-databind provided + + org.slf4j + slf4j-api + provided + junit junit - 4.13.1 test org.slf4j slf4j-simple - 1.7.36 test org.apache.felix org.apache.felix.utils - 1.10.4 test diff --git a/extensions/salesforce-connector/services/src/main/resources/OSGI-INF/blueprint/blueprint.xml b/extensions/salesforce-connector/services/src/main/resources/OSGI-INF/blueprint/blueprint.xml index 011f851b2..b8fe69bda 100644 --- a/extensions/salesforce-connector/services/src/main/resources/OSGI-INF/blueprint/blueprint.xml +++ b/extensions/salesforce-connector/services/src/main/resources/OSGI-INF/blueprint/blueprint.xml @@ -17,9 +17,10 @@ --> + xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd + http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.3.0 https://aries.apache.org/schemas/blueprint-cm/blueprint-cm-1.3.0.xsd"> diff --git a/extensions/weather-update/core/pom.xml b/extensions/weather-update/core/pom.xml index df00b96b0..7383fcfec 100755 --- a/extensions/weather-update/core/pom.xml +++ b/extensions/weather-update/core/pom.xml @@ -21,21 +21,32 @@ org.apache.unomi unomi-weather-update - 2.7.0-SNAPSHOT + 3.0.0-SNAPSHOT - unomi-weather-update-core Apache Unomi :: Extension :: Weather Update :: Core This is a simple Apache Unomi plugin. bundle + + + + org.apache.unomi + unomi-bom + ${project.version} + pom + import + + + + org.apache.unomi unomi-api - ${project.version} provided + org.apache.httpcomponents httpclient-osgi @@ -51,6 +62,11 @@ jackson-databind provided + + org.slf4j + slf4j-api + provided + diff --git a/extensions/weather-update/core/src/main/resources/OSGI-INF/blueprint/blueprint.xml b/extensions/weather-update/core/src/main/resources/OSGI-INF/blueprint/blueprint.xml index e21d74466..9afeca7ef 100755 --- a/extensions/weather-update/core/src/main/resources/OSGI-INF/blueprint/blueprint.xml +++ b/extensions/weather-update/core/src/main/resources/OSGI-INF/blueprint/blueprint.xml @@ -16,9 +16,10 @@ ~ limitations under the License. --> + xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd + http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.3.0 https://aries.apache.org/schemas/blueprint-cm/blueprint-cm-1.3.0.xsd"> + 4.0.0 org.apache.unomi unomi-weather-update - 2.7.0-SNAPSHOT + 3.0.0-SNAPSHOT - 4.0.0 - unomi-weather-update-karaf-kar Apache Unomi :: Extension :: Weather Update :: Apache Karaf Feature and KAR archive This is a simple Apache Unomi plugin. kar + + + + org.apache.unomi + unomi-bom + ${project.version} + pom + import + + + + org.apache.unomi unomi-api - ${project.version} provided + + org.apache.unomi + unomi-weather-update-core + + org.apache.httpcomponents httpcore-osgi @@ -44,12 +59,6 @@ org.apache.httpcomponents httpclient-osgi - - - org.apache.unomi - unomi-weather-update-core - ${project.version} - @@ -73,6 +82,43 @@ 85 + + + generate-features + generate-resources + + features-generate-descriptor + + + true + + + + verify-feature + process-resources + + verify + + + + mvn:org.apache.karaf.features/standard/${karaf.version}/xml/features + mvn:org.apache.karaf.features/enterprise/${karaf.version}/xml/features + mvn:org.apache.unomi/unomi-kar/${project.version}/xml/features + file:${project.build.directory}/feature/feature.xml + + org.apache.karaf:apache-karaf:zip:${karaf.version} + 17 + + framework + + + unomi-kar + unomi-weather-update-karaf-kar + + true + + + diff --git a/extensions/weather-update/karaf-kar/src/main/feature/feature.xml b/extensions/weather-update/karaf-kar/src/main/feature/feature.xml index f1db52bb4..c06b467cb 100644 --- a/extensions/weather-update/karaf-kar/src/main/feature/feature.xml +++ b/extensions/weather-update/karaf-kar/src/main/feature/feature.xml @@ -15,11 +15,9 @@ ~ See the License for the specific language governing permissions and ~ limitations under the License. --> - - -
Apache Karaf feature for the Apache Unomi Context Server extension that integrates Weather - update
+ + +
Apache Karaf feature for the Apache Unomi Context Server extension that integrates Weather update
unomi-kar mvn:org.apache.unomi/unomi-weather-update-core/${project.version}/cfg/weatherupdatecfg mvn:org.apache.httpcomponents/httpcore-osgi/${httpcore-osgi.version} diff --git a/extensions/weather-update/pom.xml b/extensions/weather-update/pom.xml index 6324cd0ec..cfb16d6fc 100644 --- a/extensions/weather-update/pom.xml +++ b/extensions/weather-update/pom.xml @@ -21,7 +21,7 @@ org.apache.unomi unomi-extensions - 2.7.0-SNAPSHOT + 3.0.0-SNAPSHOT unomi-weather-update diff --git a/extensions/web-tracker/pom.xml b/extensions/web-tracker/pom.xml index 3f962a423..9fc52a55a 100644 --- a/extensions/web-tracker/pom.xml +++ b/extensions/web-tracker/pom.xml @@ -21,9 +21,8 @@ org.apache.unomi unomi-extensions - 2.7.0-SNAPSHOT + 3.0.0-SNAPSHOT - unomi-web-tracker Apache Unomi :: Extension :: Web Tracker Apache Unomi Context Server to provide the web tracker diff --git a/extensions/web-tracker/wab/pom.xml b/extensions/web-tracker/wab/pom.xml index b7b2633d0..4f1924202 100644 --- a/extensions/web-tracker/wab/pom.xml +++ b/extensions/web-tracker/wab/pom.xml @@ -21,7 +21,7 @@ org.apache.unomi unomi-web-tracker - 2.7.0-SNAPSHOT + 3.0.0-SNAPSHOT unomi-web-tracker-wab @@ -29,6 +29,18 @@ This is a simple Apache Unomi plugin. bundle + + + + org.apache.unomi + unomi-bom + ${project.version} + pom + import + + + + diff --git a/graphql/cxs-impl/pom.xml b/graphql/cxs-impl/pom.xml index 03efbc46f..e91155e0d 100644 --- a/graphql/cxs-impl/pom.xml +++ b/graphql/cxs-impl/pom.xml @@ -16,22 +16,75 @@ ~ limitations under the License. --> + 4.0.0 org.apache.unomi unomi-graphql - 2.7.0-SNAPSHOT + 3.0.0-SNAPSHOT - 4.0.0 - cdp-graphql-api-impl Apache Unomi :: GraphQL API :: CDP Implementation Apache Unomi Context GraphQL API CDP Implementation bundle + + + + org.apache.unomi + unomi-bom + ${project.version} + pom + import + + + + - org.slf4j - slf4j-api + org.apache.unomi + unomi-api + provided + + + org.apache.unomi + cxs-lists-extension-services + provided + + + org.apache.unomi + unomi-persistence-spi + provided + + + org.apache.unomi + unomi-json-schema-services + provided + + + + org.osgi + osgi.enterprise + provided + + + org.osgi + osgi.core + provided + + + org.osgi + org.osgi.service.http + provided + + + org.osgi + org.osgi.util.tracker + provided + + + + org.apache.commons + commons-lang3 provided @@ -39,108 +92,75 @@ javax.servlet-api provided + + org.slf4j + slf4j-api + provided + com.fasterxml.jackson.core jackson-core - ${version.jackson.core} provided com.fasterxml.jackson.core jackson-annotations - ${version.jackson.core} provided com.fasterxml.jackson.core jackson-databind - ${version.jackson.databind} provided com.fasterxml.jackson.datatype jackson-datatype-jdk8 - ${version.jackson.core} provided com.fasterxml.jackson.module jackson-module-jaxb-annotations - ${version.jackson.jaxb} provided com.graphql-java graphql-java - ${graphql.java.version} provided io.github.graphql-java graphql-java-annotations - ${graphql.java.annotations.version} provided com.graphql-java graphql-java-extended-scalars - ${graphql.java.extended.scalars.version} provided io.reactivex.rxjava2 rxjava - ${reactivex.version} provided org.eclipse.jetty.websocket websocket-server - ${jetty.websocket.version} - provided - - - org.osgi - osgi.enterprise - 6.0.0 - provided - - - org.osgi - osgi.core - 6.0.0 - provided - - - org.apache.felix - org.apache.felix.scr.ds-annotations - 1.2.4 - provided - - - org.apache.unomi - unomi-api - ${project.version} - provided - - - org.apache.unomi - cxs-lists-extension-services - ${project.version} - provided - - - org.apache.unomi - unomi-persistence-spi - ${project.version} - provided - - - org.apache.unomi - unomi-json-schema-services - ${project.version} provided + + + + org.apache.felix + maven-bundle-plugin + + + org.apache.unomi.graphql.activator.GraphQLServletActivator + + + + + + diff --git a/graphql/cxs-impl/src/main/java/org/apache/unomi/graphql/actions/CDPConsentUpdateAction.java b/graphql/cxs-impl/src/main/java/org/apache/unomi/graphql/actions/CDPConsentUpdateAction.java index 1eba385fa..8c11f967e 100644 --- a/graphql/cxs-impl/src/main/java/org/apache/unomi/graphql/actions/CDPConsentUpdateAction.java +++ b/graphql/cxs-impl/src/main/java/org/apache/unomi/graphql/actions/CDPConsentUpdateAction.java @@ -24,15 +24,19 @@ import org.apache.unomi.api.services.EventService; import org.apache.unomi.graphql.utils.DateUtils; import org.apache.unomi.graphql.utils.EventBuilder; +import org.osgi.service.component.annotations.Component; +import org.osgi.service.component.annotations.Reference; import java.time.OffsetDateTime; import java.util.HashMap; import java.util.Map; +@Component(service = ActionExecutor.class, immediate = true, property = {"actionExecutorId=updateConsent"}) public class CDPConsentUpdateAction implements ActionExecutor { private EventService eventService; + @Reference public void setEventService(EventService eventService) { this.eventService = eventService; } diff --git a/graphql/cxs-impl/src/main/java/org/apache/unomi/graphql/actions/CDPSessionAction.java b/graphql/cxs-impl/src/main/java/org/apache/unomi/graphql/actions/CDPSessionAction.java index cae969c16..6010783d2 100644 --- a/graphql/cxs-impl/src/main/java/org/apache/unomi/graphql/actions/CDPSessionAction.java +++ b/graphql/cxs-impl/src/main/java/org/apache/unomi/graphql/actions/CDPSessionAction.java @@ -25,21 +25,25 @@ import org.apache.unomi.api.services.EventService; import org.apache.unomi.api.services.ProfileService; import org.apache.unomi.graphql.types.output.CDPSessionState; +import org.osgi.service.component.annotations.Component; +import org.osgi.service.component.annotations.Reference; import java.util.Date; import java.util.Objects; import java.util.Optional; +@Component(service = ActionExecutor.class, immediate = true, property = {"actionExecutorId=cdp_sessionEvent"}) public class CDPSessionAction implements ActionExecutor { private EventService eventService; - private ProfileService profileService; + @Reference public void setEventService(EventService eventService) { this.eventService = eventService; } + @Reference public void setProfileService(ProfileService profileService) { this.profileService = profileService; } diff --git a/graphql/cxs-impl/src/main/java/org/apache/unomi/graphql/actions/CDPUpdateListsAction.java b/graphql/cxs-impl/src/main/java/org/apache/unomi/graphql/actions/CDPUpdateListsAction.java index a409b7105..c5e16d4c2 100644 --- a/graphql/cxs-impl/src/main/java/org/apache/unomi/graphql/actions/CDPUpdateListsAction.java +++ b/graphql/cxs-impl/src/main/java/org/apache/unomi/graphql/actions/CDPUpdateListsAction.java @@ -22,6 +22,8 @@ import org.apache.unomi.api.actions.ActionExecutor; import org.apache.unomi.api.services.EventService; import org.apache.unomi.graphql.utils.EventBuilder; +import org.osgi.service.component.annotations.Component; +import org.osgi.service.component.annotations.Reference; import java.util.ArrayList; import java.util.HashMap; @@ -31,10 +33,12 @@ /** * A rule action that can add a profile to a list */ +@Component(service = ActionExecutor.class, immediate = true, property = {"actionExecutorId=updateLists"}) public class CDPUpdateListsAction implements ActionExecutor { private EventService eventService; + @Reference public void setEventService(EventService eventService) { this.eventService = eventService; } diff --git a/graphql/cxs-impl/src/main/java/org/apache/unomi/graphql/activator/GraphQLServletActivator.java b/graphql/cxs-impl/src/main/java/org/apache/unomi/graphql/activator/GraphQLServletActivator.java new file mode 100644 index 000000000..848235fc0 --- /dev/null +++ b/graphql/cxs-impl/src/main/java/org/apache/unomi/graphql/activator/GraphQLServletActivator.java @@ -0,0 +1,90 @@ +/* + * 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. + */ +package org.apache.unomi.graphql.activator; + +import org.apache.unomi.graphql.servlet.GraphQLServlet; +import org.osgi.framework.BundleActivator; +import org.osgi.framework.BundleContext; +import org.osgi.framework.ServiceReference; +import org.osgi.service.http.HttpService; +import org.osgi.util.tracker.ServiceTracker; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Dictionary; +import java.util.Hashtable; + +/** + * @author Jerome Blanchard + */ +public class GraphQLServletActivator implements BundleActivator { + + private static final Logger LOGGER = LoggerFactory.getLogger(GraphQLServletActivator.class); + + private ServiceTracker httpServiceTracker; + private ServiceTracker servletTracker; + + @Override + public void start(BundleContext context) { + httpServiceTracker = new ServiceTracker<>(context, HttpService.class, null); + httpServiceTracker.open(); + + servletTracker = new ServiceTracker(context, GraphQLServlet.class, null) { + @Override + public GraphQLServlet addingService(ServiceReference reference) { + LOGGER.info("Registering GraphQL servlet"); + GraphQLServlet servlet = context.getService(reference); + try { + HttpService httpService = httpServiceTracker.getService(); + if (httpService != null && servlet != null) { + Dictionary initParams = new Hashtable<>(); + httpService.registerServlet("/graphql", servlet, initParams, null); + } + } catch (Exception e) { + LOGGER.error("Failed to register GraphQL servlet", e); + } + return servlet; + } + + @Override + public void removedService(ServiceReference reference, GraphQLServlet service) { + LOGGER.info("Unregistering GraphQL servlet"); + try { + HttpService httpService = httpServiceTracker.getService(); + if (httpService != null) { + httpService.unregister("/graphql"); + } + } catch (Exception e) { + LOGGER.error("Failed to register GraphQL servlet", e); + } + context.ungetService(reference); + } + }; + servletTracker.open(); + } + + @Override + public void stop(BundleContext context) { + if (servletTracker != null) { + servletTracker.close(); + } + + if (httpServiceTracker != null) { + httpServiceTracker.close(); + } + } +} diff --git a/graphql/cxs-impl/src/main/java/org/apache/unomi/graphql/condition/parsers/SegmentProfileEventsConditionParser.java b/graphql/cxs-impl/src/main/java/org/apache/unomi/graphql/condition/parsers/SegmentProfileEventsConditionParser.java index 090f15280..ad054711e 100644 --- a/graphql/cxs-impl/src/main/java/org/apache/unomi/graphql/condition/parsers/SegmentProfileEventsConditionParser.java +++ b/graphql/cxs-impl/src/main/java/org/apache/unomi/graphql/condition/parsers/SegmentProfileEventsConditionParser.java @@ -164,7 +164,6 @@ private void processDynamicEventField(final Condition condition, final Map createProfileEventPropertyField(final Condition condition) { final Map tuple = new HashMap<>(); @@ -185,7 +184,7 @@ private Map createProfileEventPropertyField(final Condition cond tuple.put("fieldName", "cdp_timestamp_gte"); } - final OffsetDateTime fieldValue = DateUtils.offsetDateTimeFromMap((Map) condition.getParameter("propertyValueDate")); + final OffsetDateTime fieldValue = OffsetDateTime.parse((String) condition.getParameter("propertyValueDate")); //With jackson JSR, OffsetDateTime are well serialized. tuple.put("fieldValue", fieldValue != null ? fieldValue.toString() : null); } else { diff --git a/graphql/cxs-impl/src/main/java/org/apache/unomi/graphql/condition/parsers/SegmentProfilePropertiesConditionParser.java b/graphql/cxs-impl/src/main/java/org/apache/unomi/graphql/condition/parsers/SegmentProfilePropertiesConditionParser.java index f649c80e9..f8a8f0cce 100644 --- a/graphql/cxs-impl/src/main/java/org/apache/unomi/graphql/condition/parsers/SegmentProfilePropertiesConditionParser.java +++ b/graphql/cxs-impl/src/main/java/org/apache/unomi/graphql/condition/parsers/SegmentProfilePropertiesConditionParser.java @@ -147,7 +147,7 @@ private Map createProfilePropertiesField(final String propertyNa Object value; if (condition.getParameter("propertyValueDate") != null) { - value = DateUtils.offsetDateTimeFromMap((Map) condition.getParameter("propertyValueDate")); + value = condition.getParameter("propertyValueDate"); } else if (condition.getParameter("propertyValueInteger") != null) { value = condition.getParameter("propertyValueInteger"); } else { diff --git a/graphql/cxs-impl/src/main/java/org/apache/unomi/graphql/servlet/GraphQLServlet.java b/graphql/cxs-impl/src/main/java/org/apache/unomi/graphql/servlet/GraphQLServlet.java index 93254f7c8..c9bd2da58 100644 --- a/graphql/cxs-impl/src/main/java/org/apache/unomi/graphql/servlet/GraphQLServlet.java +++ b/graphql/cxs-impl/src/main/java/org/apache/unomi/graphql/servlet/GraphQLServlet.java @@ -30,6 +30,8 @@ import org.eclipse.jetty.websocket.servlet.WebSocketServletFactory; import org.osgi.service.component.annotations.Component; import org.osgi.service.component.annotations.Reference; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import javax.servlet.ServletConfig; import javax.servlet.ServletException; @@ -41,18 +43,15 @@ import java.util.HashMap; import java.util.Map; -@Component( - service = {javax.servlet.http.HttpServlet.class, javax.servlet.Servlet.class}, - property = {"alias=/graphql"} -) +@Component(service = GraphQLServlet.class) public class GraphQLServlet extends WebSocketServlet { + private static final Logger LOGGER = LoggerFactory.getLogger(GraphQLServlet.class); + public static final String SCHEMA_URL = "/schema.json"; private GraphQLSchemaUpdater graphQLSchemaUpdater; - private ServiceManager serviceManager; - private GraphQLServletSecurityValidator validator; @Reference @@ -65,8 +64,13 @@ public void setGraphQLSchemaUpdater(GraphQLSchemaUpdater graphQLSchemaUpdater) { this.graphQLSchemaUpdater = graphQLSchemaUpdater; } + public GraphQLServlet() { + LOGGER.info("GraphQLServlet created"); + } + @Override public void init(ServletConfig config) throws ServletException { + LOGGER.debug("GraphQLServlet initialized"); super.init(config); this.validator = new GraphQLServletSecurityValidator(); } @@ -75,6 +79,7 @@ public void init(ServletConfig config) throws ServletException { @Override public void configure(WebSocketServletFactory factory) { + LOGGER.debug("GraphQLServlet configured"); this.factory = factory; factory.setCreator(new SubscriptionWebSocketFactory(graphQLSchemaUpdater.getGraphQL(), serviceManager)); factory.getPolicy().setMaxTextMessageBufferSize(1024 * 1024); @@ -82,6 +87,7 @@ public void configure(WebSocketServletFactory factory) { @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + LOGGER.debug("GraphQLServlet service called with request: {}", request.getRequestURI()); if (factory.isUpgradeRequest(request, response)) { try { final ServletUpgradeRequest upReq = new ServletUpgradeRequest(request); @@ -100,6 +106,7 @@ protected void service(HttpServletRequest request, HttpServletResponse response) @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { + LOGGER.debug("GraphQLServlet doGet called with request: {}", req.getRequestURI()); String query = req.getParameter("query"); if (SCHEMA_URL.equals(req.getPathInfo())) { query = IntrospectionQuery.INTROSPECTION_QUERY; @@ -123,11 +130,10 @@ protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IO @Override @SuppressWarnings("unchecked") protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException { - TypeReference> typeRef = new TypeReference>() { - }; + LOGGER.debug("GraphQLServlet doPost called with request: {}", req.getRequestURI()); + TypeReference> typeRef = new TypeReference>() {}; Map body = GraphQLObjectMapper.getInstance().readValue(req.getInputStream(), typeRef); - String query = (String) body.get("query"); String operationName = (String) body.get("operationName"); Map variables = (Map) body.get("variables"); @@ -145,12 +151,14 @@ protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws I @Override protected void doOptions(HttpServletRequest req, HttpServletResponse resp) throws IOException { + LOGGER.debug("GraphQLServlet doOptions called with request: {}", req.getRequestURI()); setupCORSHeaders(req, resp); resp.flushBuffer(); } private void executeGraphQLRequest( HttpServletResponse resp, String query, String operationName, Map variables) throws IOException { + LOGGER.debug("Executing GraphQL request with query: {}, operationName: {}, variables: {}", query, operationName, variables); if (query == null || query.trim().length() == 0) { throw new IllegalArgumentException("Query cannot be empty or null"); } diff --git a/graphql/cxs-impl/src/main/java/org/apache/unomi/graphql/servlet/auth/GraphQLServletSecurityValidator.java b/graphql/cxs-impl/src/main/java/org/apache/unomi/graphql/servlet/auth/GraphQLServletSecurityValidator.java index e3e36c8ff..ca64228cd 100644 --- a/graphql/cxs-impl/src/main/java/org/apache/unomi/graphql/servlet/auth/GraphQLServletSecurityValidator.java +++ b/graphql/cxs-impl/src/main/java/org/apache/unomi/graphql/servlet/auth/GraphQLServletSecurityValidator.java @@ -136,7 +136,7 @@ private boolean isAuthenticatedUser(HttpServletRequest req) { Subject subject = loginContext.getSubject(); boolean success = subject != null; if (success) { - req.setAttribute(REMOTE_USER, subject); + req.setAttribute(REMOTE_USER, username); } return success; } catch (LoginException e) { diff --git a/graphql/cxs-impl/src/main/java/org/apache/unomi/graphql/types/output/CDPConsentUpdateEvent.java b/graphql/cxs-impl/src/main/java/org/apache/unomi/graphql/types/output/CDPConsentUpdateEvent.java index 359da2629..fa3136e56 100644 --- a/graphql/cxs-impl/src/main/java/org/apache/unomi/graphql/types/output/CDPConsentUpdateEvent.java +++ b/graphql/cxs-impl/src/main/java/org/apache/unomi/graphql/types/output/CDPConsentUpdateEvent.java @@ -62,15 +62,13 @@ public String status(DataFetchingEnvironment environment) { @GraphQLField @SuppressWarnings("unchecked") public OffsetDateTime lastUpdate(DataFetchingEnvironment environment) { - final Object lastUpdate = getEvent().getProperty("lastUpdate"); - return lastUpdate != null ? DateUtils.offsetDateTimeFromMap((Map) lastUpdate) : null; + return OffsetDateTime.parse((String)getEvent().getProperty("lastUpdate")); } @GraphQLField @SuppressWarnings("unchecked") public OffsetDateTime expiration(DataFetchingEnvironment environment) { - final Object expiration = getEvent().getProperty("expiration"); - return expiration != null ? DateUtils.offsetDateTimeFromMap((Map) expiration) : null; + return OffsetDateTime.parse((String)getEvent().getProperty("expiration")); } } diff --git a/graphql/cxs-impl/src/main/java/org/apache/unomi/graphql/utils/DateUtils.java b/graphql/cxs-impl/src/main/java/org/apache/unomi/graphql/utils/DateUtils.java index 192722b69..ebfc92288 100644 --- a/graphql/cxs-impl/src/main/java/org/apache/unomi/graphql/utils/DateUtils.java +++ b/graphql/cxs-impl/src/main/java/org/apache/unomi/graphql/utils/DateUtils.java @@ -19,9 +19,7 @@ import java.time.LocalDate; import java.time.OffsetDateTime; import java.time.ZoneId; -import java.time.ZoneOffset; import java.util.Date; -import java.util.Map; public final class DateUtils { @@ -53,26 +51,4 @@ public static Date toDate(final OffsetDateTime offsetDateTime) { return new Date(offsetDateTime.toInstant().toEpochMilli()); } - @SuppressWarnings("unchecked") - public static OffsetDateTime offsetDateTimeFromMap(final Map parameterValues) { - if (parameterValues == null) { - return null; - } - - final Map offsetAsMap = (Map) parameterValues.get("offset"); - - final ZoneOffset zoneOffset = ZoneOffset.of(offsetAsMap.get("id").toString()); - - return OffsetDateTime.of( - (int) parameterValues.get("year"), - (int) parameterValues.get("monthValue"), - (int) parameterValues.get("dayOfMonth"), - (int) parameterValues.get("hour"), - (int) parameterValues.get("minute"), - (int) parameterValues.get("second"), - (int) parameterValues.get("nano"), - zoneOffset); - - } - } diff --git a/graphql/cxs-impl/src/main/resources/OSGI-INF/blueprint/blueprint.xml b/graphql/cxs-impl/src/main/resources/OSGI-INF/blueprint/blueprint.xml deleted file mode 100644 index 3a9b6e1b6..000000000 --- a/graphql/cxs-impl/src/main/resources/OSGI-INF/blueprint/blueprint.xml +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/graphql/graphql-ui/pom.xml b/graphql/graphql-ui/pom.xml index 0947ba804..e6fb59cc1 100644 --- a/graphql/graphql-ui/pom.xml +++ b/graphql/graphql-ui/pom.xml @@ -21,14 +21,25 @@ org.apache.unomi unomi-graphql - 2.7.0-SNAPSHOT + 3.0.0-SNAPSHOT - unomi-graphql-ui Apache Unomi :: GraphQL API :: GraphQL UI An integrated GraphQL UI bundle + + + + org.apache.unomi + unomi-bom + ${project.version} + pom + import + + + + build @@ -37,7 +48,6 @@ org.apache.unomi unomi-api - ${project.version} provided @@ -102,9 +112,7 @@ <_wab>src/main/webapp,target/assets *;scope=compile|runtime - - * - + * /graphql-ui diff --git a/graphql/karaf-feature/pom.xml b/graphql/karaf-feature/pom.xml index d18139e9b..975938a7b 100644 --- a/graphql/karaf-feature/pom.xml +++ b/graphql/karaf-feature/pom.xml @@ -16,46 +16,45 @@ ~ limitations under the License. --> + 4.0.0 org.apache.unomi unomi-graphql - 2.7.0-SNAPSHOT + 3.0.0-SNAPSHOT - 4.0.0 - kar - cdp-graphql-feature Apache Unomi :: GraphQL API :: Karaf Feature Apache Unomi Context GraphQL API Karaf Feature + kar + + + + + org.apache.unomi + unomi-bom + ${project.version} + pom + import + + + - commons-fileupload commons-fileupload - 1.3.1 org.antlr antlr4-runtime - 4.7.1 com.graphql-java java-dataloader - 2.2.0 org.reactivestreams reactive-streams - 1.0.2 @@ -87,7 +86,7 @@ org.eclipse.jetty.websocket websocket-server - ${jetty.websocket.version} + ${jetty.version} org.apache.unomi @@ -101,12 +100,50 @@ org.apache.karaf.tooling karaf-maven-plugin - ${version.karaf} + ${karaf.version} true 80 false + + + generate-features + generate-resources + + features-generate-descriptor + + + true + + + + verify-feature + process-resources + + verify + + + + mvn:org.apache.karaf.features/standard/${karaf.version}/xml/features + mvn:org.apache.karaf.features/enterprise/${karaf.version}/xml/features + mvn:org.apache.unomi/unomi-kar/${project.version}/xml/features + file:${project.build.directory}/feature/feature.xml + + org.apache.karaf:apache-karaf:zip:${karaf.version} + 17 + + framework + + + wrap + unomi-kar + cdp-graphql-feature + + true + + + diff --git a/graphql/karaf-feature/src/main/feature/feature.xml b/graphql/karaf-feature/src/main/feature/feature.xml index 19203e810..fecbc0508 100644 --- a/graphql/karaf-feature/src/main/feature/feature.xml +++ b/graphql/karaf-feature/src/main/feature/feature.xml @@ -16,39 +16,37 @@ ~ limitations under the License. --> - + unomi-kar - wrap:mvn:com.google.code.findbugs/jsr305/1.3.9 - wrap:mvn:org.checkerframework/checker-compat-qual/2.0.0 - wrap:mvn:com.google.errorprone/error_prone_annotations/2.1.3 - wrap:mvn:com.google.j2objc/j2objc-annotations/1.1 - wrap:mvn:org.codehaus.mojo/animal-sniffer-annotations/1.14 - mvn:commons-fileupload/commons-fileupload/1.3.1 - mvn:org.antlr/antlr4-runtime/${antlr.runtime.version} - wrap:mvn:com.graphql-java/java-dataloader/${java.dataloader.version} - mvn:org.reactivestreams/reactive-streams/1.0.2 + wrap:mvn:org.checkerframework/checker-compat-qual/${checker-compat-qual.version} + wrap:mvn:com.google.errorprone/error_prone_annotations/${error_prone_annotations.version} + wrap:mvn:com.google.j2objc/j2objc-annotations/${j2objc-annotations.version} + wrap:mvn:org.codehaus.mojo/animal-sniffer-annotations/${animal-sniffer-annotations.version} + mvn:commons-fileupload/commons-fileupload/${commons-fileupload.version} + mvn:org.antlr/antlr4-runtime/${antlr4.version} + wrap:mvn:com.graphql-java/java-dataloader/${java-dataloader.version} + mvn:org.reactivestreams/reactive-streams/${reactive-stream.version} mvn:com.graphql-java/graphql-java/${graphql.java.version} mvn:io.github.graphql-java/graphql-java-annotations/${graphql.java.annotations.version} - mvn:javax.validation/validation-api/${bean.validation.version} + mvn:javax.validation/validation-api/${javax-validation.version} wrap:mvn:com.graphql-java/graphql-java-extended-scalars/${graphql.java.extended.scalars.version} - wrap:mvn:com.squareup.okhttp3/okhttp/3.2.0 - wrap:mvn:com.squareup.okio/okio/1.6.0 - mvn:io.reactivex.rxjava2/rxjava/2.2.19 - mvn:org.eclipse.jetty.websocket/websocket-server/${jetty.websocket.version} - mvn:org.eclipse.jetty.websocket/websocket-common/${jetty.websocket.version} - mvn:org.eclipse.jetty.websocket/websocket-api/${jetty.websocket.version} - mvn:org.eclipse.jetty/jetty-util/${jetty.websocket.version} - mvn:org.eclipse.jetty/jetty-io/${jetty.websocket.version} - mvn:org.eclipse.jetty.websocket/websocket-client/${jetty.websocket.version} - mvn:org.eclipse.jetty/jetty-client/${jetty.websocket.version} - mvn:org.eclipse.jetty/jetty-xml/${jetty.websocket.version} - mvn:org.eclipse.jetty.websocket/websocket-servlet/${jetty.websocket.version} - mvn:javax.servlet/javax.servlet-api/3.0.1 - mvn:org.eclipse.jetty/jetty-servlet/${jetty.websocket.version} - mvn:org.eclipse.jetty/jetty-security/${jetty.websocket.version} - mvn:org.eclipse.jetty/jetty-server/${jetty.websocket.version} - mvn:org.eclipse.jetty/jetty-http/${jetty.websocket.version} + wrap:mvn:com.squareup.okhttp3/okhttp/${okhttp.version} + wrap:mvn:com.squareup.okio/okio/${okio.version} + mvn:io.reactivex.rxjava2/rxjava/${reactivex.version} + mvn:org.eclipse.jetty.websocket/websocket-server/${jetty.version} + mvn:org.eclipse.jetty.websocket/websocket-common/${jetty.version} + mvn:org.eclipse.jetty.websocket/websocket-api/${jetty.version} + mvn:org.eclipse.jetty.websocket/websocket-client/${jetty.version} + mvn:org.eclipse.jetty.websocket/websocket-servlet/${jetty.version} + mvn:org.eclipse.jetty/jetty-util/${jetty.version} + mvn:org.eclipse.jetty/jetty-io/${jetty.version} + mvn:org.eclipse.jetty/jetty-client/${jetty.version} + mvn:org.eclipse.jetty/jetty-xml/${jetty.version} + mvn:org.eclipse.jetty/jetty-servlet/${jetty.version} + mvn:org.eclipse.jetty/jetty-security/${jetty.version} + mvn:org.eclipse.jetty/jetty-server/${jetty.version} + mvn:org.eclipse.jetty/jetty-http/${jetty.version} + mvn:${servlet.spec.groupId}/${servlet.spec.artifactId}/${servlet.spec.version} mvn:org.apache.unomi/cdp-graphql-api-impl/${project.version} mvn:org.apache.unomi/unomi-graphql-ui/${project.version} diff --git a/graphql/pom.xml b/graphql/pom.xml index f0d3d8f75..b7372703f 100644 --- a/graphql/pom.xml +++ b/graphql/pom.xml @@ -18,28 +18,16 @@ 4.0.0 - org.apache.unomi unomi-root - 2.7.0-SNAPSHOT + 3.0.0-SNAPSHOT - unomi-graphql Apache Unomi :: GraphQL API Apache Unomi Context GraphQL API Root Project pom - - 14.0 - 8.0 - 1.0 - 2.2.19 - 4.7.1 - 2.2.0 - 9.4.38.v20210224 - - cxs-impl graphql-ui diff --git a/itests/pom.xml b/itests/pom.xml index f61cbcd15..6f6e71089 100644 --- a/itests/pom.xml +++ b/itests/pom.xml @@ -21,18 +21,19 @@ org.apache.unomi unomi-root - 2.7.0-SNAPSHOT + 3.0.0-SNAPSHOT unomi-itests Apache Unomi :: Integration Tests Apache Unomi Context Server integration tests + jar - org.apache.karaf - karaf-bom - ${karaf.version} + org.apache.unomi + unomi-bom + ${project.version} pom import @@ -111,30 +112,26 @@ org.eclipse.jetty.websocket websocket-client - 9.4.28.v20200408 + ${jetty.version} org.apache.unomi unomi-lifecycle-watcher - ${project.version} test org.apache.unomi unomi-persistence-spi - ${project.version} test org.apache.unomi shell-commands - ${project.version} test org.apache.unomi unomi-groovy-actions-services - ${project.version} test @@ -146,7 +143,6 @@ - run-tests @@ -167,7 +163,7 @@ - https://search.maven.org/remotecontent?filepath=org/jacoco/jacoco/0.8.8/jacoco-0.8.8.zip + https://search.maven.org/remotecontent?filepath=org/jacoco/jacoco/0.8.13/jacoco-0.8.13.zip jacoco.zip true @@ -177,13 +173,13 @@ - org.apache.servicemix.tooling depends-maven-plugin generate-depends-file + generate-resources generate-depends-file @@ -218,7 +214,7 @@ 9400 ${elasticsearch.test.version} true - 120 + 120 -Xms4g -Xmx4g @@ -257,7 +253,7 @@ org.apache.maven.plugins maven-failsafe-plugin - 3.0.0-M4 + ${maven-failsafe.plugin.version} **/*AllITs.java @@ -323,7 +319,7 @@ org.jacoco jacoco-maven-plugin - 0.7.7.201606060606 + 0.8.13 post-site diff --git a/itests/src/test/java/org/apache/unomi/itests/AllITs.java b/itests/src/test/java/org/apache/unomi/itests/AllITs.java index bd9a9a108..c50e88464 100644 --- a/itests/src/test/java/org/apache/unomi/itests/AllITs.java +++ b/itests/src/test/java/org/apache/unomi/itests/AllITs.java @@ -52,7 +52,6 @@ ModifyConsentIT.class, PatchIT.class, ContextServletIT.class, - SecurityIT.class, RuleServiceIT.class, PrivacyServiceIT.class, GroovyActionsServiceIT.class, diff --git a/itests/src/test/java/org/apache/unomi/itests/BaseIT.java b/itests/src/test/java/org/apache/unomi/itests/BaseIT.java index a98d90d7d..3c657f7c3 100644 --- a/itests/src/test/java/org/apache/unomi/itests/BaseIT.java +++ b/itests/src/test/java/org/apache/unomi/itests/BaseIT.java @@ -26,11 +26,7 @@ import org.apache.http.auth.AuthScope; import org.apache.http.auth.UsernamePasswordCredentials; import org.apache.http.client.config.RequestConfig; -import org.apache.http.client.methods.CloseableHttpResponse; -import org.apache.http.client.methods.HttpDelete; -import org.apache.http.client.methods.HttpGet; -import org.apache.http.client.methods.HttpPost; -import org.apache.http.client.methods.HttpUriRequest; +import org.apache.http.client.methods.*; import org.apache.http.config.Registry; import org.apache.http.config.RegistryBuilder; import org.apache.http.conn.socket.ConnectionSocketFactory; @@ -63,6 +59,7 @@ import org.junit.Before; import org.junit.runner.RunWith; import org.ops4j.pax.exam.Configuration; +import org.ops4j.pax.exam.ConfigurationManager; import org.ops4j.pax.exam.CoreOptions; import org.ops4j.pax.exam.Option; import org.ops4j.pax.exam.junit.PaxExam; @@ -206,6 +203,11 @@ public void shutdown() { httpClient = null; } + protected String karafData() { + ConfigurationManager cm = new ConfigurationManager(); + return cm.getProperty("karaf.data"); + } + protected void removeItems(final Class... classes) throws InterruptedException { Condition condition = new Condition(definitionsService.getConditionType("matchAllCondition")); for (Class aClass : classes) { diff --git a/itests/src/test/java/org/apache/unomi/itests/ContextServletIT.java b/itests/src/test/java/org/apache/unomi/itests/ContextServletIT.java index dfaaa6641..9e6a85b3c 100644 --- a/itests/src/test/java/org/apache/unomi/itests/ContextServletIT.java +++ b/itests/src/test/java/org/apache/unomi/itests/ContextServletIT.java @@ -38,21 +38,10 @@ import java.time.LocalDateTime; import java.time.ZoneId; import java.time.ZoneOffset; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import java.util.*; import static org.hamcrest.core.IsCollectionContaining.hasItem; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertThat; +import static org.junit.Assert.*; /** * Created by Ron Barabash on 5/4/2020. @@ -481,27 +470,6 @@ public void testCreateEventWithPropertyNameValidation_Failure() throws Exception DEFAULT_TRYING_TRIES); } - @Test - public void testOGNLVulnerability() throws Exception { - - File vulnFile = new File("target/vuln-file.txt"); - if (vulnFile.exists()) { - vulnFile.delete(); - } - String vulnFileCanonicalPath = vulnFile.getCanonicalPath(); - vulnFileCanonicalPath = vulnFileCanonicalPath.replace("\\", "\\\\"); // this is required for Windows support - - Map parameters = new HashMap<>(); - parameters.put("VULN_FILE_PATH", vulnFileCanonicalPath); - HttpPost request = new HttpPost(getFullUrl(CONTEXT_URL)); - request.setEntity( - new StringEntity(getValidatedBundleJSON("security/ognl-payload-1.json", parameters), ContentType.APPLICATION_JSON)); - TestUtils.executeContextJSONRequest(request); - - shouldBeTrueUntilEnd("Vulnerability successfully executed ! File created at " + vulnFileCanonicalPath, vulnFile::exists, - exists -> exists == Boolean.FALSE, DEFAULT_TRYING_TIMEOUT, DEFAULT_TRYING_TRIES); - } - @Test public void testMVELVulnerability() throws Exception { diff --git a/itests/src/test/java/org/apache/unomi/itests/SecurityIT.java b/itests/src/test/java/org/apache/unomi/itests/SecurityIT.java deleted file mode 100644 index 69f64d6d8..000000000 --- a/itests/src/test/java/org/apache/unomi/itests/SecurityIT.java +++ /dev/null @@ -1,106 +0,0 @@ -/* - * 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. - */ -package org.apache.unomi.itests; - -import com.fasterxml.jackson.databind.ObjectMapper; -import org.apache.http.client.methods.HttpPost; -import org.apache.http.entity.ContentType; -import org.apache.http.entity.StringEntity; -import org.apache.unomi.api.ContextRequest; -import org.apache.unomi.api.conditions.Condition; -import org.apache.unomi.api.services.PersonalizationService; -import org.apache.unomi.persistence.spi.CustomObjectMapper; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.ops4j.pax.exam.junit.PaxExam; -import org.ops4j.pax.exam.spi.reactors.ExamReactorStrategy; -import org.ops4j.pax.exam.spi.reactors.PerSuite; - -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import static org.junit.Assert.assertFalse; - -@RunWith(PaxExam.class) -@ExamReactorStrategy(PerSuite.class) -public class SecurityIT extends BaseIT { - - private static final String SESSION_ID = "vuln-session-id"; - - private ObjectMapper objectMapper; - - @Before - public void setUp() { - objectMapper = CustomObjectMapper.getObjectMapper(); - } - - @Test - public void testOGNLInjection() throws Exception { - ContextRequest contextRequest = new ContextRequest(); - List personalizations = new ArrayList<>(); - PersonalizationService.PersonalizationRequest personalizationRequest = new PersonalizationService.PersonalizationRequest(); - personalizationRequest.setId("vuln-test"); - personalizationRequest.setStrategy("matching-first"); - Map strategyOptions = new HashMap<>(); - strategyOptions.put("fallback", "var2"); - personalizationRequest.setStrategyOptions(strategyOptions); - List personalizationContents = new ArrayList<>(); - PersonalizationService.PersonalizedContent var1Content = new PersonalizationService.PersonalizedContent(); - var1Content.setId("var1"); - List filters = new ArrayList<>(); - PersonalizationService.Filter filter = new PersonalizationService.Filter(); - Condition condition = new Condition(); - File vulnFile = new File("target/vuln-file.txt"); - if (vulnFile.exists()) { - vulnFile.delete(); - } - condition.setConditionTypeId("profilePropertyCondition"); - condition.setParameter("propertyName", "@java.lang.Runtime@getRuntime().exec('touch " + vulnFile.getCanonicalPath() + "')"); - condition.setParameter("comparisonOperator", "equals"); - condition.setParameter("propertyValue", - "script::java.io.PrintWriter writer = new java.io.PrintWriter(new java.io.BufferedWriter(new java.io.FileWriter(\"" - + vulnFile.getCanonicalPath() + "\", true)));\nwriter.println(\"test\");\nwriter.close();"); - filter.setCondition(condition); - filters.add(filter); - var1Content.setFilters(filters); - personalizationContents.add(var1Content); - PersonalizationService.PersonalizedContent var2Content = new PersonalizationService.PersonalizedContent(); - var2Content.setId("var2"); - personalizationContents.add(var2Content); - personalizationRequest.setContents(personalizationContents); - - personalizations.add(personalizationRequest); - contextRequest.setPersonalizations(personalizations); - - contextRequest.setSessionId(SESSION_ID); - HttpPost request = new HttpPost(getFullUrl("/cxs/context.json")); - request.setEntity(new StringEntity(objectMapper.writeValueAsString(contextRequest), ContentType.create("application/json"))); - - TestUtils.RequestResponse response = executeContextJSONRequest(request, SESSION_ID); - assertFalse("Vulnerability successfully executed ! File created at " + vulnFile.getCanonicalPath(), vulnFile.exists()); - } - - private TestUtils.RequestResponse executeContextJSONRequest(HttpPost request, String sessionId) throws IOException { - return TestUtils.executeContextJSONRequest(request, sessionId); - } - -} diff --git a/itests/src/test/java/org/apache/unomi/itests/SegmentIT.java b/itests/src/test/java/org/apache/unomi/itests/SegmentIT.java index 1a13fb602..e6fd54054 100644 --- a/itests/src/test/java/org/apache/unomi/itests/SegmentIT.java +++ b/itests/src/test/java/org/apache/unomi/itests/SegmentIT.java @@ -40,9 +40,12 @@ import java.text.SimpleDateFormat; import java.time.LocalDate; +import java.time.OffsetDateTime; import java.time.ZoneId; import java.util.*; +import static org.junit.Assert.assertNotNull; + @RunWith(PaxExam.class) @ExamReactorStrategy(PerSuite.class) public class SegmentIT extends BaseIT { @@ -65,7 +68,7 @@ public void tearDown() throws InterruptedException { @Test public void testSegments() { - Assert.assertNotNull("Segment service should be available", segmentService); + assertNotNull("Segment service should be available", segmentService); List segmentMetadatas = segmentService.getSegmentMetadatas(0, 50, null).getList(); Assert.assertEquals("Segment metadata list should be empty", 0, segmentMetadatas.size()); LOGGER.info("Retrieved " + segmentMetadatas.size() + " segment metadata entries"); @@ -132,7 +135,25 @@ public void testSegmentWithValidCondition() { segmentCondition.setParameter("eventCondition", pastEventEventCondition); segment.setCondition(segmentCondition); segmentService.setSegmentDefinition(segment); + segmentService.removeSegmentDefinition(SEGMENT_ID, false); + } + @Test + public void testSegmentWithPropertyValueDateCondition() { + Metadata segmentMetadata = new Metadata(SEGMENT_ID); + Segment segment = new Segment(segmentMetadata); + Condition segmentCondition = new Condition(definitionsService.getConditionType("pastEventCondition")); + segmentCondition.setParameter("minimumEventCount", 2); + segmentCondition.setParameter("numberOfDays", 10); + Condition pastEventEventCondition = new Condition(definitionsService.getConditionType("eventPropertyCondition")); + pastEventEventCondition.setParameter("propertyName", "timeStamp"); + pastEventEventCondition.setParameter("comparisonOperator", "equals"); + pastEventEventCondition.setParameter("propertyValueDate", OffsetDateTime.parse("2019-02-26T00:57:37Z")); + segmentCondition.setParameter("eventCondition", pastEventEventCondition); + segment.setCondition(segmentCondition); + segmentService.setSegmentDefinition(segment); + Segment loadedSegment = segmentService.getSegmentDefinition(SEGMENT_ID); + assertNotNull("Segment should be loaded", loadedSegment); segmentService.removeSegmentDefinition(SEGMENT_ID, false); } @@ -721,4 +742,5 @@ public void testSegmentWithRelativeDateExpressions() throws Exception { updatedProfile.getScores() == null || !updatedProfile.getScores().containsKey("relative-date-scoring-test")), 1000, 20); } + } diff --git a/itests/src/test/java/org/apache/unomi/itests/graphql/BaseGraphQLIT.java b/itests/src/test/java/org/apache/unomi/itests/graphql/BaseGraphQLIT.java index 7e515a6e2..3eb7e6707 100644 --- a/itests/src/test/java/org/apache/unomi/itests/graphql/BaseGraphQLIT.java +++ b/itests/src/test/java/org/apache/unomi/itests/graphql/BaseGraphQLIT.java @@ -30,6 +30,7 @@ import org.ops4j.pax.exam.spi.reactors.ExamReactorStrategy; import org.ops4j.pax.exam.spi.reactors.PerSuite; +import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.util.Base64; import java.util.List; @@ -91,9 +92,14 @@ protected static class ResponseContext { private ResponseContext(HttpEntity httpEntity) { try { final String jsonFromResponse = EntityUtils.toString(httpEntity); - responseAsMap = GraphQLObjectMapper.getInstance().readValue(jsonFromResponse, Map.class); + try { + responseAsMap = GraphQLObjectMapper.getInstance().readValue(jsonFromResponse, Map.class); + } catch (Exception e) { + throw new RuntimeException("Failed to parse response as JSON: " + jsonFromResponse, e); + } } catch (Exception e) { - throw new RuntimeException(e); + throw new RuntimeException("Unable to read response content, length:" + httpEntity.getContentLength() + + ", type:" + httpEntity.getContentType().getValue(), e); } } diff --git a/itests/src/test/java/org/apache/unomi/itests/migration/MigrationIT.java b/itests/src/test/java/org/apache/unomi/itests/migration/MigrationIT.java index a7fa068d1..b81df24f9 100644 --- a/itests/src/test/java/org/apache/unomi/itests/migration/MigrationIT.java +++ b/itests/src/test/java/org/apache/unomi/itests/migration/MigrationIT.java @@ -19,6 +19,8 @@ import org.apache.unomi.itests.BaseIT; import org.junit.Assert; import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.nio.charset.StandardCharsets; import java.nio.file.Files; @@ -28,29 +30,36 @@ import static org.junit.Assert.fail; public class MigrationIT extends BaseIT { - protected static final Path BASE_DIRECTORIES = Paths.get(System.getProperty( "karaf.data" ), "migration", "scripts"); + + private static final Logger LOGGER = LoggerFactory.getLogger(MigrationIT.class); private static final String FAILING_SCRIPT_NAME = "migrate-11.0.0-01-failingMigration.groovy"; private static final String SUCCESS_SCRIPT_NAME = "migrate-11.0.0-01-successMigration.groovy"; private static final String FAILING_SCRIPT_RESOURCE = "migration/" + FAILING_SCRIPT_NAME; private static final String SUCCESS_SCRIPT_RESOURCE = "migration/" + SUCCESS_SCRIPT_NAME; - protected static final Path FAILING_SCRIPT_FS_PATH = Paths.get(System.getProperty( "karaf.data" ), "migration", "scripts", FAILING_SCRIPT_NAME); - protected static final Path SUCCESS_SCRIPT_FS_PATH = Paths.get(System.getProperty( "karaf.data" ), "migration", "scripts", SUCCESS_SCRIPT_NAME); @Test public void checkMigrationRecoverySystem() throws Exception { + + String karafData = super.karafData(); + LOGGER.info("Karaf data directory: {}", karafData); + + Path scriptsDirectory = Paths.get(karafData, "migration", "scripts"); + Path failingScriptFsPath = Paths.get(karafData, "migration", "scripts", FAILING_SCRIPT_NAME); + Path successScriptFsPath = Paths.get(karafData, "migration", "scripts", SUCCESS_SCRIPT_NAME); + try { - Files.createDirectories(BASE_DIRECTORIES); + Files.createDirectories(scriptsDirectory); - Files.write(FAILING_SCRIPT_FS_PATH, bundleResourceAsString(FAILING_SCRIPT_RESOURCE).getBytes(StandardCharsets.UTF_8)); + Files.write(failingScriptFsPath, bundleResourceAsString(FAILING_SCRIPT_RESOURCE).getBytes(StandardCharsets.UTF_8)); try { executeCommand("unomi:migrate 10.0.0 true"); fail("Migration should have failed and crashed by Exception throwing"); } catch (Exception e) { // this is expected, the script fail at step 3 } - Files.deleteIfExists(FAILING_SCRIPT_FS_PATH); + Files.deleteIfExists(failingScriptFsPath); - Files.write(SUCCESS_SCRIPT_FS_PATH, bundleResourceAsString(SUCCESS_SCRIPT_RESOURCE).getBytes(StandardCharsets.UTF_8)); + Files.write(successScriptFsPath, bundleResourceAsString(SUCCESS_SCRIPT_RESOURCE).getBytes(StandardCharsets.UTF_8)); String successResult = executeCommand("unomi:migrate 10.0.0 true"); System.out.println("Success recovered from failing migration result:"); System.out.println(successResult); @@ -61,10 +70,10 @@ public void checkMigrationRecoverySystem() throws Exception { Assert.assertTrue(successResult.contains("inside step 3")); Assert.assertTrue(successResult.contains("inside step 4")); Assert.assertTrue(successResult.contains("inside step 5")); - Files.deleteIfExists(SUCCESS_SCRIPT_FS_PATH); + Files.deleteIfExists(successScriptFsPath); } finally { - Files.deleteIfExists(FAILING_SCRIPT_FS_PATH); - Files.deleteIfExists(SUCCESS_SCRIPT_FS_PATH); + Files.deleteIfExists(failingScriptFsPath); + Files.deleteIfExists(successScriptFsPath); } } } diff --git a/itests/src/test/resources/etc/users.properties b/itests/src/test/resources/etc/users.properties new file mode 100644 index 000000000..ee3acc547 --- /dev/null +++ b/itests/src/test/resources/etc/users.properties @@ -0,0 +1,34 @@ +################################################################################ +# +# 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. +# +################################################################################ + +# +# This file contains the users, groups, and roles. +# Each line has to be of the format: +# +# USER=PASSWORD,ROLE1,ROLE2,... +# USER=PASSWORD,_g_:GROUP,... +# _g_\:GROUP=ROLE1,ROLE2,... +# +# All users, groups, and roles entered in this file are available after Karaf startup +# and modifiable via the JAAS command group. These users reside in a JAAS domain +# with the name "karaf". +# +karaf = ${org.apache.unomi.security.root.password:-karaf},_g_:admingroup +health = ${org.apache.unomi.healthcheck.password:-health},health +_g_\:admingroup = group,admin,manager,viewer,systembundles,ssh,ROLE_UNOMI_ADMIN diff --git a/kar/pom.xml b/kar/pom.xml index 9a38f9b78..bc5bca789 100644 --- a/kar/pom.xml +++ b/kar/pom.xml @@ -18,140 +18,138 @@ 4.0.0 - org.apache.unomi unomi-root - 2.7.0-SNAPSHOT + 3.0.0-SNAPSHOT - unomi-kar Apache Unomi :: Karaf KAR package Apache Karaf KAR package for the Apache Unomi Context Server kar + + + + org.apache.unomi + unomi-bom + ${project.version} + pom + import + + + + - org.apache.httpcomponents - httpcore-osgi + org.apache.unomi + unomi-api - org.apache.httpcomponents - httpclient-osgi + org.apache.unomi + unomi-common org.apache.unomi unomi-wab - ${project.version} org.apache.unomi - unomi-api - ${project.version} + unomi-rest org.apache.unomi - unomi-common - ${project.version} + unomi-metrics org.apache.unomi - unomi-metrics - ${project.version} + unomi-services org.apache.unomi - unomi-services - ${project.version} + unomi-scripting org.apache.unomi unomi-persistence-elasticsearch-core - ${project.version} + + org.apache.unomi unomi-plugins-base - ${project.version} org.apache.unomi unomi-plugins-request - ${project.version} org.apache.unomi unomi-plugins-mail - ${project.version} org.apache.unomi unomi-plugins-optimization-test - ${project.version} + + org.apache.unomi cxs-lists-extension-services - ${project.version} org.apache.unomi cxs-lists-extension-rest - ${project.version} org.apache.unomi cxs-lists-extension-actions - ${project.version} org.apache.unomi cxs-geonames-services - ${project.version} org.apache.unomi cxs-geonames-rest - ${project.version} org.apache.unomi - unomi-json-schema-services - ${project.version} + cxs-privacy-extension-services org.apache.unomi - unomi-json-schema-rest - ${project.version} + cxs-privacy-extension-rest org.apache.unomi - cxs-privacy-extension-services - ${project.version} + unomi-json-schema-services org.apache.unomi - cxs-privacy-extension-rest - ${project.version} + unomi-json-schema-rest org.apache.unomi shell-dev-commands - ${project.version} + + org.apache.unomi + unomi-web-tracker-wab + + joda-time joda-time + - org.apache.unomi - unomi-web-tracker-wab - ${project.version} + org.apache.httpcomponents + httpcore-osgi - org.apache.unomi - unomi-scripting - ${project.version} + org.apache.httpcomponents + httpclient-osgi @@ -176,9 +174,42 @@ 85 + + + generate-features + generate-resources + + features-generate-descriptor + + + true + + + + verify-feature + process-resources + + verify + + + + mvn:org.apache.karaf.features/standard/${karaf.version}/xml/features + mvn:org.apache.karaf.features/enterprise/${karaf.version}/xml/features + file:${project.build.directory}/feature/feature.xml + + org.apache.karaf:apache-karaf:zip:${karaf.version} + 17 + + framework + + + unomi-kar + + true + + + - -
diff --git a/kar/src/main/feature/feature.xml b/kar/src/main/feature/feature.xml index 6355a69e4..4c64d920f 100644 --- a/kar/src/main/feature/feature.xml +++ b/kar/src/main/feature/feature.xml @@ -16,51 +16,66 @@ ~ limitations under the License. --> - + + mvn:org.apache.karaf.features/specs/${karaf.version}/xml/features mvn:org.apache.cxf.karaf/apache-cxf/${cxf.version}/xml/features + osgi.service;effective:=active;filter:=(objectClass=org.osgi.service.http.HttpService) wrap aries-blueprint war - cxf-jaxrs + config + scr + http + log + cxf-jaxrs cxf-features-metrics cxf-rs-security-cors cxf-rs-description-openapi-v3 eventadmin feature + spifly shell-compat mvn:org.apache.unomi/unomi-wab/${project.version}/cfg/unomicfg mvn:org.apache.unomi/unomi-persistence-elasticsearch-core/${project.version}/cfg/elasticsearchcfg - mvn:org.apache.unomi/unomi-plugins-request/${project.version}/cfg/requestcfg - mvn:org.apache.unomi/unomi-plugins-base/${project.version}/cfg/pluginsbasecfg mvn:org.apache.unomi/unomi-services/${project.version}/cfg/servicescfg mvn:org.apache.unomi/unomi-services/${project.version}/cfg/thirdpartycfg mvn:org.apache.unomi/unomi-services/${project.version}/cfg/clustercfg + mvn:org.apache.unomi/unomi-plugins-request/${project.version}/cfg/requestcfg + mvn:org.apache.unomi/unomi-plugins-base/${project.version}/cfg/pluginsbasecfg mvn:org.apache.unomi/cxs-geonames-services/${project.version}/cfg/geonamescfg - mvn:org.apache.unomi/unomi-groovy-actions-services/${project.version}/cfg/groovyactionscfg mvn:org.apache.unomi/unomi-json-schema-services/${project.version}/cfg/schemacfg - mvn:commons-io/commons-io/${apache.commons.io.version} - mvn:com.fasterxml.jackson.core/jackson-core/${version.jackson.core} - mvn:com.github.fge/btf/1.2 - mvn:com.github.fge/msg-simple/1.1 - mvn:com.google.guava/guava/16.0.1 - mvn:com.github.fge/jackson-coreutils/1.8 - mvn:com.github.fge/json-patch/1.9 - mvn:org.json/json/${org.json.version} - mvn:com.fasterxml.jackson.core/jackson-databind/${version.jackson.databind} - mvn:com.fasterxml.jackson.core/jackson-annotations/${version.jackson.core} - mvn:com.fasterxml.jackson.jaxrs/jackson-jaxrs-base/${version.jackson.core} - mvn:com.fasterxml.jackson.module/jackson-module-jaxb-annotations/${version.jackson.jaxb} - mvn:com.fasterxml.jackson.jaxrs/jackson-jaxrs-json-provider/${version.jackson.core} - mvn:org.yaml/snakeyaml/1.33 - mvn:com.fasterxml.jackson.dataformat/jackson-dataformat-yaml/${version.jackson.core} - mvn:joda-time/joda-time/${joda-time.version} - mvn:org.apache.servicemix.specs/org.apache.servicemix.specs.jaxws-api-2.2/2.9.0 - mvn:javax.annotation/javax.annotation-api/1.3.2 - mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.jsr305/${jsr305.bundle.version} - mvn:commons-collections/commons-collections/${apache.commons.collections.version} + mvn:commons-collections/commons-collections/${commons-collections.version} + mvn:org.apache.commons/commons-lang3/${commons-lang3.version} + mvn:commons-beanutils/commons-beanutils/${commons-beanutils.version} + mvn:commons-io/commons-io/${commons-io.version} + mvn:org.apache.httpcomponents/httpcore-osgi/${httpcore-osgi.version} + mvn:org.apache.httpcomponents/httpclient-osgi/${httpclient-osgi.version} + mvn:javax.validation/validation-api/${javax-validation.version} + mvn:com.fasterxml.jackson.core/jackson-core/${jackson.version} + mvn:com.fasterxml.jackson.core/jackson-databind/${jackson.version} + mvn:com.fasterxml.jackson.core/jackson-annotations/${jackson.version} + mvn:com.fasterxml.jackson.dataformat/jackson-dataformat-yaml/${jackson.version} + mvn:com.fasterxml.jackson.datatype/jackson-datatype-jsr310/${jackson.version} + mvn:com.fasterxml.jackson.module/jackson-module-jaxb-annotations/${jackson.version} + mvn:com.fasterxml.jackson.jaxrs/jackson-jaxrs-base/${jackson.version} + mvn:com.fasterxml.jackson.jaxrs/jackson-jaxrs-json-provider/${jackson.version} + mvn:com.github.java-json-tools/btf/${btf.version} + mvn:com.github.java-json-tools/msg-simple/${msg-simple.version} + mvn:com.github.java-json-tools/jackson-coreutils/${jackson-coreutils.version} + mvn:com.github.java-json-tools/json-patch/${json-patch.version} + mvn:com.google.guava/guava/${guava.version} + mvn:org.json/json/${org-json.version} + mvn:org.yaml/snakeyaml/${snakeyaml.version} + mvn:joda-time/joda-time/${joda-time.version} + mvn:jakarta.annotation/jakarta.annotation-api/${jakarta-annotation-api.version} + mvn:com.google.code.findbugs/jsr305/${jsr305.version} + mvn:org.apache.groovy/groovy/${groovy.version} + mvn:org.apache.groovy/groovy-xml/${groovy.version} + mvn:org.apache.groovy/groovy-json/${groovy.version} + mvn:org.apache.unomi/unomi-lifecycle-watcher/${project.version} mvn:org.apache.unomi/unomi-api/${project.version} mvn:org.apache.unomi/unomi-common/${project.version} @@ -100,6 +115,7 @@ unomi-kar - mvn:org.webjars/swagger-ui/3.23.8 + mvn:org.webjars/swagger-ui/${swagger-ui.version} + diff --git a/lifecycle-watcher/pom.xml b/lifecycle-watcher/pom.xml index 444db2f3a..71ea61623 100644 --- a/lifecycle-watcher/pom.xml +++ b/lifecycle-watcher/pom.xml @@ -17,33 +17,48 @@ --> + 4.0.0 unomi-root org.apache.unomi - 2.7.0-SNAPSHOT + 3.0.0-SNAPSHOT - 4.0.0 - unomi-lifecycle-watcher Apache Unomi :: Main Lifecycle Watcher A global lifecycle watcher for the Apache Unomi Context server bundle + + + + org.apache.unomi + unomi-bom + ${project.version} + pom + import + + + + org.osgi osgi.core + provided org.apache.unomi unomi-api - ${project.version} provided org.apache.karaf.features org.apache.karaf.features.core - ${version.karaf} + provided + + + org.apache.commons + commons-lang3 provided @@ -88,5 +103,4 @@
-
diff --git a/lifecycle-watcher/src/main/resources/OSGI-INF/blueprint/blueprint.xml b/lifecycle-watcher/src/main/resources/OSGI-INF/blueprint/blueprint.xml index d2ae880bb..c7eb443c6 100644 --- a/lifecycle-watcher/src/main/resources/OSGI-INF/blueprint/blueprint.xml +++ b/lifecycle-watcher/src/main/resources/OSGI-INF/blueprint/blueprint.xml @@ -17,10 +17,10 @@ --> + xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd + http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.3.0 https://aries.apache.org/schemas/blueprint-cm/blueprint-cm-1.3.0.xsd"> @@ -28,7 +28,7 @@ update-strategy="reload" placeholder-prefix="${lifecycle."> - + diff --git a/manual/pom.xml b/manual/pom.xml index 55467ebe7..b5cfa2081 100644 --- a/manual/pom.xml +++ b/manual/pom.xml @@ -20,7 +20,7 @@ unomi-root org.apache.unomi - 2.7.0-SNAPSHOT + 3.0.0-SNAPSHOT 4.0.0 diff --git a/manual/src/main/asciidoc/5-min-quickstart.adoc b/manual/src/main/asciidoc/5-min-quickstart.adoc index a25a45dd4..26e6fae6b 100644 --- a/manual/src/main/asciidoc/5-min-quickstart.adoc +++ b/manual/src/main/asciidoc/5-min-quickstart.adoc @@ -48,8 +48,7 @@ Try accessing https://localhost:9443/cxs/cluster with username/password: karaf/k === Quick Start manually -1) Install JDK 11 (https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html) and make sure you set the -JAVA_HOME variable https://docs.oracle.com/cd/E19182-01/820-7851/inst_cli_jdk_javahome_t/ (see our <> guide for more information on JDK compatibility) +1) Install JDK 17 and make sure you set the JAVA_HOME variable (see our <> guide for more information on JDK compatibility) 2) Download ElasticSearch here : https://www.elastic.co/downloads/past-releases/elasticsearch-7-17-5 (please *make sure* you use the proper version : 7.17.5) diff --git a/manual/src/main/asciidoc/building-and-deploying.adoc b/manual/src/main/asciidoc/building-and-deploying.adoc index 3de47041f..c91c86052 100644 --- a/manual/src/main/asciidoc/building-and-deploying.adoc +++ b/manual/src/main/asciidoc/building-and-deploying.adoc @@ -16,14 +16,14 @@ ==== Initial Setup -. Install J2SE 11 SDK (or later), which can be downloaded from +. Install J2SE 17 SDK (or later), which can be downloaded from http://www.oracle.com/technetwork/java/javase/downloads/index.html[http://www.oracle.com/technetwork/java/javase/downloads/index.html] . Make sure that your JAVA_HOME environment variable is set to the newly installed JDK location, and that your PATH includes %JAVA_HOME%\bin (windows) or $JAVA_HOME$/bin (unix). -. Install Maven 3.0.3 (or later), which can be downloaded from +. Install Maven 3.9.6 (or later), which can be downloaded from http://maven.apache.org/download.html[http://maven.apache.org/download.html]. Make sure that your PATH includes the MVN_HOME/bin directory. diff --git a/manual/src/main/asciidoc/configuration.adoc b/manual/src/main/asciidoc/configuration.adoc index c127b247f..c10368f0e 100644 --- a/manual/src/main/asciidoc/configuration.adoc +++ b/manual/src/main/asciidoc/configuration.adoc @@ -224,9 +224,8 @@ Apache Unomi allows using different types of expressions in the following subsys - context.json filters and personalization queries - rule conditions and actions parameters -Apache Unomi uses two integrated scripting languages to provide this functionality: OGNL and MVEL. -OGNL is deprecated and is now disabled by default since 1.5.2 as it is little used (and replaced by better performing -hardcoded property lookups). MVEL is more commonly used in rule actions as in the following example: +Apache Unomi uses an integrated scripting language to provide this functionality: MVEL. +MVEL is used in rule actions as in the following example: From https://github.com/apache/unomi/blob/unomi-1.5.x/plugins/baseplugin/src/main/resources/META-INF/cxs/rules/sessionAssigned.json[https://github.com/apache/unomi/blob/unomi-1.5.x/plugins/baseplugin/src/main/resources/META-INF/cxs/rules/sessionAssigned.json]: @@ -296,10 +295,6 @@ From https://github.com/apache/unomi/blob/unomi-1.5.x/plugins/baseplugin/src/mai As we see in the above example, we use an MVEL script with the setPropertyAction to set a property value. Starting with version 1.5.2, any expression use in rules MUST be allow-listed. -OGNL was previously used wherever a parameter could be used, but MVEL could only be used with a “script::” prefix. -Starting with version 1.5.2 OGNL will no longer be allowed and is replaced by a compatible “hardcoded” property -lookup system, while MVEL requires allow-listing the scripts that are to be used. - By default, Apache Unomi comes with some built-in allowed expressions that cover all the internal uses cases. Default allowed MVEL expressions (from https://github.com/apache/unomi/blob/unomi-1.5.x/plugins/baseplugin/src/main/resources/META-INF/cxs/expressions/mvel.json[https://github.com/apache/unomi/blob/unomi-1.5.x/plugins/baseplugin/src/main/resources/META-INF/cxs/expressions/mvel.json]) : @@ -342,15 +337,15 @@ Alongside with the allow-listing technology, there are new configuration paramet [source] ---- # These parameters control the list of classes that are allowed or forbidden when executing expressions. -org.apache.unomi.scripting.allow=${env:UNOMI_ALLOW_SCRIPTING_CLASSES:-org.apache.unomi.api.Event,org.apache.unomi.api.Profile,org.apache.unomi.api.Session,org.apache.unomi.api.Item,org.apache.unomi.api.CustomItem,ognl.*,java.lang.Object,java.util.Map,java.util.HashMap,java.lang.Integer,org.mvel2.*} +org.apache.unomi.scripting.allow=${env:UNOMI_ALLOW_SCRIPTING_CLASSES:-org.apache.unomi.api.Event,org.apache.unomi.api.Profile,org.apache.unomi.api.Session,org.apache.unomi.api.Item,org.apache.unomi.api.CustomItem,java.lang.Object,java.util.Map,java.util.HashMap,java.lang.Integer,org.mvel2.*} org.apache.unomi.scripting.forbid=${env:UNOMI_FORBID_SCRIPTING_CLASSES:-} # This parameter controls the whole expression filtering system. It is not recommended to turn it off. The main reason to turn it off would be to check if it is interfering with something, but it should always be active in production. org.apache.unomi.scripting.filter.activated=${env:UNOMI_SCRIPTING_FILTER_ACTIVATED:-true} # The following parameters control the filtering using regular expressions for each scripting sub-system. -# The "collections" parameter tells the expression filtering system which configurations to expect. By default only MVEL and/or OGNL are accepted values, but in the future these might be replaced by new scripting sub-systems. -org.apache.unomi.scripting.filter.collections=${env:UNOMI_SCRIPTING_FILTER_COLLECTIONS:-mvel,ognl} +# The "collections" parameter tells the expression filtering system which configurations to expect. By default only MVEL is accepted values, but in the future these might be replaced by new scripting sub-systems. +org.apache.unomi.scripting.filter.collections=${env:UNOMI_SCRIPTING_FILTER_COLLECTIONS:-mvel} # For each scripting sub-system, there is an allow and a forbid property that reference a .json files, # you can either edit this files or reference your own file directly in the following config. @@ -364,11 +359,6 @@ org.apache.unomi.scripting.filter.collections=${env:UNOMI_SCRIPTING_FILTER_COLLE # example: ["\\Qsession.size + 1\\E"] org.apache.unomi.scripting.filter.mvel.allow=${env:UNOMI_SCRIPTING_FILTER_MVEL_ALLOW:-${karaf.etc}/mvel-allow.json} org.apache.unomi.scripting.filter.mvel.forbid=${env:UNOMI_SCRIPTING_FILTER_MVEL_FORBID:-${karaf.etc}/mvel-forbid.json} -org.apache.unomi.scripting.filter.ognl.allow=${env:UNOMI_SCRIPTING_FILTER_OGNL_ALLOW:-${karaf.etc}/ognl-allow.json} -org.apache.unomi.scripting.filter.ognl.forbid=${env:UNOMI_SCRIPTING_FILTER_OGNL_FORBID:-${karaf.etc}/ognl-forbid.json} - -# This parameter controls whether OGNL scripting is allowed in expressions. Because of security reasons it is deactivated by default. If you run into compatibility issues you could reactivate it but it is at your own risk. -org.apache.unomi.security.properties.useOGNLScripting=${env:UNOMI_SCRIPTING_USE_OGNL:-false} # This parameter controls the condition sanitizing done on the ContextServlet (/cxs/context.json). If will remove any expressions that start with "script::". It is not recommended to change this value, unless you run into compatibility issues. org.apache.unomi.security.personalization.sanitizeConditions=${env:UNOMI_SECURITY_SANITIZEPERSONALIZATIONCONDITIONS:-true} diff --git a/manual/src/main/asciidoc/getting-started.adoc b/manual/src/main/asciidoc/getting-started.adoc index 8e16ab092..d535f2f60 100644 --- a/manual/src/main/asciidoc/getting-started.adoc +++ b/manual/src/main/asciidoc/getting-started.adoc @@ -19,13 +19,13 @@ in greater details what just happened. ==== Prerequisites This document assumes working knowledge of https://git-scm.com/[git] to be able to retrieve the code for Unomi and the example. -Additionally, you will require a working Java 11 or above install. Refer to http://www.oracle.com/technetwork/java/javase/[http://www.oracle.com/technetwork/java/javase/] for details on how to download and install Java SE 11 or greater. +Additionally, you will require a working Java 17 or above install. Refer to http://www.oracle.com/technetwork/java/javase/[http://www.oracle.com/technetwork/java/javase/] for details on how to download and install Java SE 17 or greater. ===== JDK compatibility Starting with Java 9, Oracle made some big changes to the Java platform releases. This is why Apache Unomi is focused on -supporting the Long Term Supported versions of the JDK, currently version 11. We do not test with intermediate -versions so they may or may not work properly. Currently the most tested version is version 11. +supporting the Long Term Supported versions of the JDK, currently version 17. We do not test with intermediate +versions so they may or may not work properly. Currently the most tested version is version 17. Also, as there are new licensing restrictions on JDKs provided by Oracle for production usages, Apache Unomi has also added support for OpenJDK builds. Other JDK distributions might also work but are not regularly tested so you should use diff --git a/metrics/pom.xml b/metrics/pom.xml index 102ba8e30..aed1b61b9 100644 --- a/metrics/pom.xml +++ b/metrics/pom.xml @@ -17,38 +17,54 @@ --> 4.0.0 - org.apache.unomi unomi-root - 2.7.0-SNAPSHOT + 3.0.0-SNAPSHOT - unomi-metrics Apache Unomi :: Metrics Apache Unomi Context Server Metrics bundle + + + + org.apache.unomi + unomi-bom + ${project.version} + pom + import + + + + + + org.osgi + osgi.core + provided + org.apache.karaf.shell org.apache.karaf.shell.console - ${version.karaf} provided - org.apache.karaf.shell org.apache.karaf.shell.table - ${version.karaf} provided + + org.apache.unomi + unomi-common + provided + org.apache.unomi unomi-persistence-spi - ${project.version} provided @@ -63,32 +79,16 @@ provided - - org.apache.unomi - unomi-common - ${project.version} - provided - - - - org.osgi - osgi.core - provided - - - + junit junit - 4.13.1 test org.slf4j slf4j-simple - 1.7.36 test - diff --git a/metrics/src/main/resources/OSGI-INF/blueprint/blueprint.xml b/metrics/src/main/resources/OSGI-INF/blueprint/blueprint.xml index 3a0888800..3a613dc67 100644 --- a/metrics/src/main/resources/OSGI-INF/blueprint/blueprint.xml +++ b/metrics/src/main/resources/OSGI-INF/blueprint/blueprint.xml @@ -17,11 +17,11 @@ --> + xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" + xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd + http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.3.0 https://aries.apache.org/schemas/blueprint-cm/blueprint-cm-1.3.0.xsd"> diff --git a/package/pom.xml b/package/pom.xml index 265e91973..97cb7bb95 100644 --- a/package/pom.xml +++ b/package/pom.xml @@ -18,26 +18,35 @@ 4.0.0 - org.apache.unomi unomi-root - 2.7.0-SNAPSHOT + 3.0.0-SNAPSHOT - unomi - pom + 3.0.0-SNAPSHOT Apache Unomi :: Distribution Package Packaged distributions of the Apache Unomi Context Server + pom + + + + + org.apache.unomi + unomi-bom + ${project.version} + pom + import + + + ${basedir}/../etc/appended-resources - - org.apache.karaf.features framework @@ -70,48 +79,39 @@ xml runtime - - - - org.apache.cxf.karaf - apache-cxf + org.apache.karaf.features + specs features xml runtime + org.apache.unomi unomi-kar - ${project.version} features xml runtime - org.apache.unomi unomi-router-karaf-feature - ${project.version} features xml runtime - org.apache.unomi unomi-groovy-actions - ${project.version} features xml runtime - org.apache.unomi cdp-graphql-feature - ${project.version} features xml runtime @@ -166,113 +166,76 @@ org.apache.unomi unomi-wab - ${project.version} unomicfg cfg - - ${project.build.directory}/assembly/etc - + ${project.build.directory}/assembly/etc org.apache.unomi.web.cfg org.apache.unomi unomi-persistence-elasticsearch-core - ${project.version} elasticsearchcfg cfg - - ${project.build.directory}/assembly/etc - + ${project.build.directory}/assembly/etc org.apache.unomi.persistence.elasticsearch.cfg org.apache.unomi unomi-services - ${project.version} clustercfg cfg - - ${project.build.directory}/assembly/etc - + ${project.build.directory}/assembly/etc org.apache.unomi.cluster.cfg org.apache.unomi unomi-services - ${project.version} servicescfg cfg - - ${project.build.directory}/assembly/etc - + ${project.build.directory}/assembly/etc org.apache.unomi.services.cfg org.apache.unomi unomi-plugins-request - ${project.version} requestcfg cfg - - ${project.build.directory}/assembly/etc - + ${project.build.directory}/assembly/etc org.apache.unomi.plugins.request.cfg org.apache.unomi unomi-plugins-base - ${project.version} pluginsbasecfg cfg - - ${project.build.directory}/assembly/etc - + ${project.build.directory}/assembly/etc org.apache.unomi.plugins.base.cfg org.apache.unomi unomi-groovy-actions-services - ${project.version} groovyactionscfg cfg - - ${project.build.directory}/assembly/etc - + ${project.build.directory}/assembly/etc org.apache.unomi.groovy.actions.cfg org.apache.unomi unomi-plugins-mail - ${project.version} mailcfg cfg - - ${project.build.directory}/assembly/etc - + ${project.build.directory}/assembly/etc org.apache.unomi.plugins.mail.cfg org.apache.unomi unomi-router-core - ${project.version} routercfg cfg - - ${project.build.directory}/assembly/etc - + ${project.build.directory}/assembly/etc org.apache.unomi.router.cfg - - - org.apache.aries.blueprint - org.apache.aries.blueprint.core - 1.6.2 - - ${project.build.directory}/assembly/system/org/apache/aries/blueprint/org.apache.aries.blueprint.core/1.6.2 - - - @@ -313,6 +276,13 @@ archive + + verify-feature + process-resources + + verify + + @@ -335,7 +305,6 @@ config deployer diagnostic - feature instance kar log @@ -351,28 +320,7 @@ unomi-groovy-actions unomi-rest-ui - - 1.8 + 17 diff --git a/package/src/main/resources/etc/custom.system.properties b/package/src/main/resources/etc/custom.system.properties index 7b1b576eb..0e3cd9e5c 100644 --- a/package/src/main/resources/etc/custom.system.properties +++ b/package/src/main/resources/etc/custom.system.properties @@ -25,7 +25,7 @@ ${optionals}=unomi.custom.system.properties org.apache.unomi.security.root.password=${env:UNOMI_ROOT_PASSWORD:-karaf} # These parameters control the list of classes that are allowed or forbidden when executing expressions. -org.apache.unomi.scripting.allow=${env:UNOMI_ALLOW_SCRIPTING_CLASSES:-org.apache.unomi.api.Event,org.apache.unomi.api.Profile,org.apache.unomi.api.Session,org.apache.unomi.api.Item,org.apache.unomi.api.CustomItem,ognl.*,java.lang.Object,java.util.Map,java.util.HashMap,java.lang.Integer,org.mvel2.*,java.lang.String} +org.apache.unomi.scripting.allow=${env:UNOMI_ALLOW_SCRIPTING_CLASSES:-org.apache.unomi.api.Event,org.apache.unomi.api.Profile,org.apache.unomi.api.Session,org.apache.unomi.api.Item,org.apache.unomi.api.CustomItem,java.lang.Object,java.util.Map,java.util.HashMap,java.lang.Integer,org.mvel2.*,java.lang.String} org.apache.unomi.scripting.forbid=${env:UNOMI_FORBID_SCRIPTING_CLASSES:-} # This parameter controls the whole expression filtering system. It is not recommended to turn it off. The main reason @@ -33,8 +33,8 @@ org.apache.unomi.scripting.forbid=${env:UNOMI_FORBID_SCRIPTING_CLASSES:-} org.apache.unomi.scripting.filter.activated=${env:UNOMI_SCRIPTING_FILTER_ACTIVATED:-true} # The following parameters tells the expression filtering system which configurations to expect. By default only -# MVEL and/or OGNL are accepted values, but in the future these might be replaced by new scripting sub-systems. -org.apache.unomi.scripting.filter.collections=${env:UNOMI_SCRIPTING_FILTER_COLLECTIONS:-mvel,ognl} +# MVEL are accepted values, but in the future these might be replaced by new scripting sub-systems. +org.apache.unomi.scripting.filter.collections=${env:UNOMI_SCRIPTING_FILTER_COLLECTIONS:-mvel} # For each scripting sub-system, there is an allow and a forbid property that reference a .json files, # you can either edit this files or reference your own file directly in the following config. @@ -48,12 +48,7 @@ org.apache.unomi.scripting.filter.collections=${env:UNOMI_SCRIPTING_FILTER_COLLE # example: ["\\Qsession.size + 1\\E"] org.apache.unomi.scripting.filter.mvel.allow=${env:UNOMI_SCRIPTING_FILTER_MVEL_ALLOW:-${karaf.etc}/mvel-allow.json} org.apache.unomi.scripting.filter.mvel.forbid=${env:UNOMI_SCRIPTING_FILTER_MVEL_FORBID:-${karaf.etc}/mvel-forbid.json} -org.apache.unomi.scripting.filter.ognl.allow=${env:UNOMI_SCRIPTING_FILTER_OGNL_ALLOW:-${karaf.etc}/ognl-allow.json} -org.apache.unomi.scripting.filter.ognl.forbid=${env:UNOMI_SCRIPTING_FILTER_OGNL_FORBID:-${karaf.etc}/ognl-forbid.json} -# This parameter controls whether OGNL scripting is allowed in expressions. Because of security reasons it is -# deactivated by default. If you run into compatibility issues you could reactivate it but it is at your own risk. -org.apache.unomi.security.properties.useOGNLScripting=${env:UNOMI_SCRIPTING_USE_OGNL:-false} # This parameter controls the condition sanitizing done on the ContextServlet (/context.json). If will remove any # expressions that start with "script::". It is not recommended to change this value, unless you run into compatibility issues. org.apache.unomi.security.personalization.sanitizeConditions=${env:UNOMI_SECURITY_SANITIZEPERSONALIZATIONCONDITIONS:-true} @@ -62,8 +57,10 @@ org.apache.unomi.security.personalization.sanitizeConditions=${env:UNOMI_SECURIT ## HTTP Settings ## ####################################################################################################################### org.ops4j.pax.web.ssl.keystore=${env:UNOMI_SSL_KEYSTORE:-${karaf.etc}/keystore} -org.ops4j.pax.web.ssl.password=${env:UNOMI_SSL_PASSWORD:-changeme} -org.ops4j.pax.web.ssl.keypassword=${env:UNOMI_SSL_KEYPASSWORD:-changeme} +org.ops4j.pax.web.ssl.keystore.password=${env:UNOMI_SSL_KEYPASSWORD:-changeme} +org.ops4j.pax.web.ssl.key.password=${env:UNOMI_SSL_PASSWORD:-changeme} +org.ops4j.pax.web.ssl.truststore=${env:UNOMI_SSL_KEYSTORE:-${karaf.etc}/keystore} +org.ops4j.pax.web.ssl.truststore.password=${env:UNOMI_SSL_PASSWORD:-changeme} org.osgi.service.http.secure.enabled = true org.osgi.service.http.port=${env:UNOMI_HTTP_PORT:-8181} diff --git a/package/src/main/resources/etc/ognl-allow.json b/package/src/main/resources/etc/ognl-allow.json deleted file mode 100644 index 0637a088a..000000000 --- a/package/src/main/resources/etc/ognl-allow.json +++ /dev/null @@ -1 +0,0 @@ -[] \ No newline at end of file diff --git a/package/src/main/resources/etc/ognl-forbid.json b/package/src/main/resources/etc/ognl-forbid.json deleted file mode 100644 index 07e8ee622..000000000 --- a/package/src/main/resources/etc/ognl-forbid.json +++ /dev/null @@ -1,19 +0,0 @@ -[ - ".*Runtime.*", - ".*ProcessBuilder.*", - ".*exec.*", - ".*invoke.*", - ".*getClass.*", - ".*Class.*", - ".*ClassLoader.*", - ".*System.*", - ".*Method.*", - ".*method.*", - ".*Compiler.*", - ".*Thread.*", - ".*FileWriter.*", - ".*forName.*", - ".*Socket.*", - ".*DriverManager.*", - "eval" -] \ No newline at end of file diff --git a/package/src/main/resources/etc/org.apache.cxf.osgi.cfg b/package/src/main/resources/etc/org.apache.cxf.osgi.cfg index 5cf8e8f7a..d4e48fcb7 100644 --- a/package/src/main/resources/etc/org.apache.cxf.osgi.cfg +++ b/package/src/main/resources/etc/org.apache.cxf.osgi.cfg @@ -15,4 +15,4 @@ # limitations under the License. # -org.apache.cxf.servlet.context=${org.apache.unomi.admin.servlet.context:-/cxs} \ No newline at end of file +org.apache.cxf.servlet.context=${org.apache.unomi.admin.servlet.context:-/cxs} diff --git a/persistence-elasticsearch/core/pom.xml b/persistence-elasticsearch/core/pom.xml index 810e38807..e9c990b3d 100644 --- a/persistence-elasticsearch/core/pom.xml +++ b/persistence-elasticsearch/core/pom.xml @@ -18,125 +18,108 @@ 4.0.0 - org.apache.unomi unomi-persistence-elasticsearch - 2.7.0-SNAPSHOT + 3.0.0-SNAPSHOT - unomi-persistence-elasticsearch-core Apache Unomi :: Persistence :: ElasticSearch :: Core Core ElasticSearch persistence implementation for the Apache Unomi Context Server bundle + + + + org.apache.unomi + unomi-bom + ${project.version} + pom + import + + + + - org.osgi - osgi.core + org.apache.unomi + unomi-api provided - org.osgi - osgi.cmpn + org.apache.unomi + unomi-common provided - org.apache.unomi - unomi-api - ${project.version} + unomi-metrics provided org.apache.unomi - unomi-common - ${project.version} + unomi-scripting provided org.apache.unomi unomi-persistence-spi - ${project.version} provided + - org.elasticsearch.client - elasticsearch-rest-high-level-client - ${elasticsearch.version} - - + - org.elasticsearch.test - framework - ${elasticsearch.version} - test + com.fasterxml.jackson.core + jackson-databind + provided - org.elasticsearch.plugin - transport-netty4-client - ${elasticsearch.version} - test + org.apache.commons + commons-lang3 + provided - org.apache.lucene - lucene-test-framework - ${lucene.version} - test - - - - org.apache.lucene - lucene-core - - + commons-io + commons-io + provided + - org.apache.logging.log4j - log4j-slf4j-impl - 2.17.0 - test + org.elasticsearch.client + elasticsearch-rest-high-level-client - org.apache.logging.log4j log4j-api - 2.17.0 compile true org.apache.logging.log4j log4j-core - 2.17.0 compile @@ -149,7 +132,6 @@ org.apache.logging.log4j log4j-1.2-api - 2.17.0 compile @@ -163,43 +145,40 @@ true - - com.fasterxml.jackson.core - jackson-databind - - - - org.apache.commons - commons-lang3 + junit + junit + test - commons-io - commons-io + org.elasticsearch.test + framework + test - - org.apache.unomi - unomi-metrics - ${project.version} - provided + org.elasticsearch.plugin + transport-netty4-client + test - - junit - junit + org.apache.lucene + lucene-test-framework test + + + + org.apache.lucene + lucene-core + + - - org.apache.unomi - unomi-scripting - ${project.version} - provided + org.apache.logging.log4j + log4j-slf4j-impl + test - @@ -282,8 +261,6 @@ org.xml.sax.ext;resolution:=optional, org.xml.sax.helpers;resolution:=optional, org.zeromq;resolution:=optional, - sun.misc;resolution:=optional, - sun.nio.ch;resolution:=optional, * diff --git a/persistence-elasticsearch/core/src/main/resources/OSGI-INF/blueprint/blueprint.xml b/persistence-elasticsearch/core/src/main/resources/OSGI-INF/blueprint/blueprint.xml index e376be29f..b9608f858 100644 --- a/persistence-elasticsearch/core/src/main/resources/OSGI-INF/blueprint/blueprint.xml +++ b/persistence-elasticsearch/core/src/main/resources/OSGI-INF/blueprint/blueprint.xml @@ -17,10 +17,10 @@ --> + xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd + http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.3.0 https://aries.apache.org/schemas/blueprint-cm/blueprint-cm-1.3.0.xsd"> diff --git a/persistence-elasticsearch/pom.xml b/persistence-elasticsearch/pom.xml index 01aa88967..0ac011e47 100644 --- a/persistence-elasticsearch/pom.xml +++ b/persistence-elasticsearch/pom.xml @@ -22,7 +22,7 @@ org.apache.unomi unomi-root - 2.7.0-SNAPSHOT + 3.0.0-SNAPSHOT unomi-persistence-elasticsearch diff --git a/persistence-spi/pom.xml b/persistence-spi/pom.xml index 0129f2788..4815944bf 100644 --- a/persistence-spi/pom.xml +++ b/persistence-spi/pom.xml @@ -18,23 +18,32 @@ 4.0.0 - org.apache.unomi unomi-root - 2.7.0-SNAPSHOT + 3.0.0-SNAPSHOT - unomi-persistence-spi - Apache Unomi :: Persistence :: SPI (Service Provider Interface) + Apache Unomi :: Persistence :: SPI Service Provider interface for the Apache Unomi Context Server bundle + + + + org.apache.unomi + unomi-bom + ${project.version} + pom + import + + + + org.apache.unomi unomi-api - ${project.version} provided @@ -47,6 +56,11 @@ jackson-databind provided + + com.fasterxml.jackson.datatype + jackson-datatype-jsr310 + provided + com.fasterxml.jackson.module jackson-module-jaxb-annotations @@ -55,19 +69,28 @@ commons-beanutils commons-beanutils + provided + + + commons-collections + commons-collections + provided + + + org.slf4j + slf4j-api + provided junit junit - 4.11 test org.slf4j slf4j-simple - 1.7.36 test diff --git a/persistence-spi/src/main/java/org/apache/unomi/persistence/spi/CustomObjectMapper.java b/persistence-spi/src/main/java/org/apache/unomi/persistence/spi/CustomObjectMapper.java index 65d09b0c7..c5b91a7a6 100644 --- a/persistence-spi/src/main/java/org/apache/unomi/persistence/spi/CustomObjectMapper.java +++ b/persistence-spi/src/main/java/org/apache/unomi/persistence/spi/CustomObjectMapper.java @@ -24,6 +24,7 @@ import com.fasterxml.jackson.databind.deser.std.StdDeserializer; import com.fasterxml.jackson.databind.module.SimpleModule; import com.fasterxml.jackson.databind.util.ISO8601DateFormat; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.fasterxml.jackson.module.jaxb.JaxbAnnotationModule; import org.apache.unomi.api.*; import org.apache.unomi.api.actions.ActionType; @@ -46,7 +47,7 @@ public class CustomObjectMapper extends ObjectMapper { private static final long serialVersionUID = 4578277612897061535L; - + private Map> builtinItemTypeClasses = new HashMap<>(); private PropertyTypedObjectDeserializer propertyTypedObjectDeserializer; private ItemDeserializer itemDeserializer; @@ -58,6 +59,7 @@ public CustomObjectMapper() { public CustomObjectMapper(Map> deserializers) { super(); super.registerModule(new JaxbAnnotationModule()); + super.registerModule(new JavaTimeModule()); configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); setSerializationInclusion(JsonInclude.Include.NON_NULL); ISO8601DateFormat dateFormat = new ISO8601DateFormat(); diff --git a/plugins/baseplugin/pom.xml b/plugins/baseplugin/pom.xml index b4f260369..7255dbc74 100644 --- a/plugins/baseplugin/pom.xml +++ b/plugins/baseplugin/pom.xml @@ -18,19 +18,50 @@ 4.0.0 - org.apache.unomi unomi-plugins - 2.7.0-SNAPSHOT + 3.0.0-SNAPSHOT - unomi-plugins-base Apache Unomi :: Plugins :: Base Actions and Conditions Base actions and conditions plugin for the Apache Unomi Context Server bundle + + + + org.apache.unomi + unomi-bom + ${project.version} + pom + import + + + + + + org.apache.unomi + unomi-persistence-elasticsearch-core + provided + + + org.apache.unomi + unomi-persistence-spi + provided + + + org.apache.unomi + unomi-common + provided + + + org.apache.unomi + unomi-scripting + provided + + javax.servlet javax.servlet-api @@ -39,70 +70,46 @@ jakarta.xml.bind jakarta.xml.bind-api - 2.3.2 provided + commons-beanutils commons-beanutils + provided org.apache.commons commons-lang3 + provided joda-time joda-time provided - - org.apache.unomi - unomi-persistence-elasticsearch-core - ${project.version} - provided - - - org.apache.unomi - unomi-persistence-spi - ${project.version} - provided - - - ognl - ognl - com.fasterxml.jackson.core jackson-databind provided - org.apache.unomi - unomi-common - ${project.version} - provided - - - org.apache.unomi - unomi-scripting - ${project.version} + org.slf4j + slf4j-api provided - + junit junit - 4.11 test org.slf4j slf4j-simple - 1.7.36 test - diff --git a/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/PropertyConditionEvaluator.java b/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/PropertyConditionEvaluator.java index 089130734..c128d8f2c 100644 --- a/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/PropertyConditionEvaluator.java +++ b/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/PropertyConditionEvaluator.java @@ -17,19 +17,19 @@ package org.apache.unomi.plugins.baseplugin.conditions; -import ognl.*; -import ognl.enhance.ExpressionAccessor; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; -import org.apache.unomi.api.*; +import org.apache.unomi.api.Event; +import org.apache.unomi.api.GeoPoint; +import org.apache.unomi.api.Item; import org.apache.unomi.api.conditions.Condition; -import org.apache.unomi.plugins.baseplugin.conditions.accessors.HardcodedPropertyAccessor; -import org.apache.unomi.scripting.ExpressionFilterFactory; -import org.apache.unomi.scripting.SecureFilteringClassLoader; import org.apache.unomi.persistence.elasticsearch.conditions.ConditionContextHelper; import org.apache.unomi.persistence.elasticsearch.conditions.ConditionEvaluator; import org.apache.unomi.persistence.elasticsearch.conditions.ConditionEvaluatorDispatcher; import org.apache.unomi.persistence.spi.PropertyHelper; +import org.apache.unomi.plugins.baseplugin.conditions.accessors.HardcodedPropertyAccessor; +import org.apache.unomi.scripting.ExpressionFilterFactory; +import org.apache.unomi.scripting.SecureFilteringClassLoader; import org.elasticsearch.ElasticsearchParseException; import org.elasticsearch.common.joda.Joda; import org.elasticsearch.common.joda.JodaDateMathParser; @@ -37,8 +37,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.lang.reflect.Member; -import java.lang.reflect.Modifier; import java.text.SimpleDateFormat; import java.util.*; import java.util.regex.Pattern; @@ -53,14 +51,11 @@ public class PropertyConditionEvaluator implements ConditionEvaluator { private static final SimpleDateFormat yearMonthDayDateFormat = new SimpleDateFormat("yyyyMMdd"); - private final Map> expressionCache = new HashMap<>(64); private boolean usePropertyConditionOptimizations = true; private static final ClassLoader secureFilteringClassLoader = new SecureFilteringClassLoader(PropertyConditionEvaluator.class.getClassLoader()); private static final HardcodedPropertyAccessorRegistry hardcodedPropertyAccessorRegistry = new HardcodedPropertyAccessorRegistry(); private ExpressionFilterFactory expressionFilterFactory; - private final boolean useOGNLScripting = Boolean.parseBoolean(System.getProperty("org.apache.unomi.security.properties.useOGNLScripting", "false")); - public void setUsePropertyConditionOptimizations(boolean usePropertyConditionOptimizations) { this.usePropertyConditionOptimizations = usePropertyConditionOptimizations; } @@ -69,12 +64,6 @@ public void setExpressionFilterFactory(ExpressionFilterFactory expressionFilterF this.expressionFilterFactory = expressionFilterFactory; } - public void init() { - if (!useOGNLScripting) { - LOGGER.info("OGNL Script disabled, properties using OGNL won't be evaluated"); - } - } - private int compare(Object actualValue, String expectedValue, Object expectedValueDate, Object expectedValueInteger, Object expectedValueDateExpr, Object expectedValueDouble) { if (expectedValue == null && expectedValueDate == null && expectedValueInteger == null && getDate(expectedValueDateExpr) == null && expectedValueDouble == null) { return actualValue == null ? 0 : 1; @@ -193,9 +182,7 @@ public boolean eval(Condition condition, Item item, Map context, // property not found actualValue = null; } catch (Exception e) { - if (!(e instanceof OgnlException) - || (!StringUtils.startsWith(e.getMessage(), - "source is null for getProperty(null"))) { + if ((!StringUtils.startsWith(e.getMessage(),"source is null for getProperty(null"))) { LOGGER.warn("Error evaluating value for {} {}. See debug level for more information", item.getClass().getName(), name); if (LOGGER.isDebugEnabled()) LOGGER.debug("Error evaluating value for {} {}", item.getClass().getName(), name, e); } @@ -320,9 +307,6 @@ protected Object getPropertyValue(Item item, String expression) throws Exception return result; } } - if (useOGNLScripting) { - return getOGNLPropertyValue(item, expression); - } return null; } @@ -332,107 +316,6 @@ protected Object getHardcodedPropertyValue(Item item, String expression) { return hardcodedPropertyAccessorRegistry.getProperty(item, expression); } - protected Object getOGNLPropertyValue(Item item, String expression) throws Exception { - if (expressionFilterFactory.getExpressionFilter("ognl").filter(expression) == null) { - LOGGER.warn("OGNL expression filtered because not allowed on item: {}. See debug log level for more information", item.getClass().getName()); - LOGGER.debug("OGNL expression filtered because not allowed: {}", expression); - return null; - } - OgnlContext ognlContext = getOgnlContext(secureFilteringClassLoader); - ExpressionAccessor accessor = getPropertyAccessor(item, expression, ognlContext, secureFilteringClassLoader); - if (accessor != null) { - try { - return accessor.get(ognlContext, item); - } catch (Throwable t) { - LOGGER.error("Error evaluating expression on item {}. See debug level for more information", item.getClass().getName()); - LOGGER.debug("Error evaluating expression {} on item {}.", expression, item.getClass().getName(), t); - return null; - } - } - return null; - } - - private class ClassLoaderClassResolver extends DefaultClassResolver { - private ClassLoader classLoader; - - public ClassLoaderClassResolver(ClassLoader classLoader) { - this.classLoader = classLoader; - } - - @Override - protected Class toClassForName(String className) throws ClassNotFoundException { - return Class.forName(className, true, classLoader); - } - } - - private OgnlContext getOgnlContext(ClassLoader classLoader) { - return (OgnlContext) Ognl.createDefaultContext(null, new MemberAccess() { - @Override - public Object setup(OgnlContext ognlContext, Object target, Member member, String propertyName) { - return null; - } - - @Override - public void restore(OgnlContext ognlContext, Object target, Member member, String propertyName, Object state) { - } - - @Override - public boolean isAccessible(OgnlContext ognlContext, Object target, Member member, String propertyName) { - int modifiers = member.getModifiers(); - boolean accessible = false; - if (target instanceof Item && !"getClass".equals(member.getName())) { - accessible = Modifier.isPublic(modifiers); - } - if (!accessible) { - LOGGER.warn("OGNL security filtered target, member for property. See debug log level for more information"); - LOGGER.debug("OGNL security filtered: Target {} and member {} for property {}. Not allowed", target, member, propertyName); - } - return accessible; - } - }, new ClassLoaderClassResolver(classLoader), - null); - } - - private ExpressionAccessor getPropertyAccessor(Item item, String expression, OgnlContext ognlContext, ClassLoader classLoader) throws Exception { - ExpressionAccessor accessor = null; - String clazz = item.getClass().getName(); - Map expressions = expressionCache.get(clazz); - if (expressions == null) { - expressions = new HashMap<>(); - expressionCache.put(clazz, expressions); - } else { - accessor = expressions.get(expression); - } - if (accessor == null) { - long time = System.nanoTime(); - Thread current = Thread.currentThread(); - ClassLoader contextCL = current.getContextClassLoader(); - try { - current.setContextClassLoader(classLoader); - Node node = Ognl.compileExpression(ognlContext, item, expression); - accessor = node.getAccessor(); - } finally { - current.setContextClassLoader(contextCL); - } - if (accessor != null) { - expressions.put(expression, accessor); - } else { - if (LOGGER.isDebugEnabled()) { - LOGGER.debug("Unable to compile expression: {} for: {}", expression, clazz); - } else { - LOGGER.warn("Unable to compile expression for {}. See debug log level for more information", clazz); - } - } - if (LOGGER.isDebugEnabled()) { - LOGGER.debug("Expression compilation for item={} expression={} took {}", item.getClass().getName(), expression, (System.nanoTime() - time) / 1000000L); - } else { - LOGGER.info("Expression compilation for item={} took {}. See debug log level for more information", item.getClass().getName(), (System.nanoTime() - time) / 1000000L); - } - } - - return accessor; - } - protected static Date getDate(Object value) { if (value == null) { return null; diff --git a/plugins/baseplugin/src/main/resources/OSGI-INF/blueprint/blueprint.xml b/plugins/baseplugin/src/main/resources/OSGI-INF/blueprint/blueprint.xml index 9f7dc8c92..33ec99222 100644 --- a/plugins/baseplugin/src/main/resources/OSGI-INF/blueprint/blueprint.xml +++ b/plugins/baseplugin/src/main/resources/OSGI-INF/blueprint/blueprint.xml @@ -16,10 +16,11 @@ ~ limitations under the License. --> - + @@ -155,7 +156,7 @@ - + @@ -187,8 +188,7 @@ - + diff --git a/plugins/baseplugin/src/test/java/org/apache/unomi/plugins/baseplugin/conditions/PropertyConditionEvaluatorTest.java b/plugins/baseplugin/src/test/java/org/apache/unomi/plugins/baseplugin/conditions/PropertyConditionEvaluatorTest.java index 84eeae38a..07bc4d2e8 100644 --- a/plugins/baseplugin/src/test/java/org/apache/unomi/plugins/baseplugin/conditions/PropertyConditionEvaluatorTest.java +++ b/plugins/baseplugin/src/test/java/org/apache/unomi/plugins/baseplugin/conditions/PropertyConditionEvaluatorTest.java @@ -16,7 +16,6 @@ */ package org.apache.unomi.plugins.baseplugin.conditions; -import ognl.MethodFailedException; import org.apache.unomi.api.*; import org.apache.unomi.api.rules.Rule; import org.apache.unomi.plugins.baseplugin.conditions.accessors.HardcodedPropertyAccessor; @@ -25,17 +24,14 @@ import org.junit.Before; import org.junit.Test; -import java.io.File; import java.util.*; import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.regex.Pattern; import static junit.framework.TestCase.assertEquals; import static junit.framework.TestCase.assertNull; -import static org.junit.Assert.assertFalse; public class PropertyConditionEvaluatorTest { @@ -110,36 +106,6 @@ public void testFlattenedProperties() { assertEquals("FlattenedProperties should be readable form accessor", "test", propertyConditionEvaluator.getHardcodedPropertyValue(mockEvent, "flattenedProperties.test")); } - @Test - public void testOGNLEvaluator() throws Exception { - Event mockEvent = generateMockEvent(mockProfile, mockSession); - assertEquals("Target itemId value is not correct", MOCK_ITEM_ID, propertyConditionEvaluator.getOGNLPropertyValue(mockEvent, "target.itemId")); - assertEquals("Target scope is not correct", DIGITALL_SCOPE, propertyConditionEvaluator.getOGNLPropertyValue(mockEvent, "target.scope")); - assertEquals("Target page path value is not correct", TARGET_PAGE_PATH_VALUE, propertyConditionEvaluator.getOGNLPropertyValue(mockEvent, "target.properties.pageInfo.pagePath")); - assertEquals("Target page url value is not correct", TARGET_PAGE_URL_VALUE, propertyConditionEvaluator.getOGNLPropertyValue(mockEvent, "target.properties.pageInfo.pageURL")); - assertEquals("Session size should be 10", SESSION_SIZE, propertyConditionEvaluator.getOGNLPropertyValue(mockSession, "size")); - assertEquals("Should have received the proper last even date", SESSION_LAST_EVENT_DATE, propertyConditionEvaluator.getOGNLPropertyValue(mockSession, "lastEventDate")); - - assertNull("Unexisting property should be null", propertyConditionEvaluator.getOGNLPropertyValue(mockSession, "systemProperties.goals._csk6r4cgeStartReached")); - assertNull("Unexisting property should be null", propertyConditionEvaluator.getOGNLPropertyValue(mockProfile, "properties.email")); - } - - @Test - public void testCompareOGNLvsHardcodedPerformance() throws InterruptedException { - int workerCount = WORKER_COUNT; - ExecutorService executorService = Executors.newFixedThreadPool(THREAD_POOL_SIZE); - - runHardcodedTest(workerCount, executorService); - runOGNLTest(workerCount, executorService); - runHardcodedTest(workerCount, executorService); - runOGNLTest(workerCount, executorService); - runHardcodedTest(workerCount, executorService); - runOGNLTest(workerCount, executorService); - runHardcodedTest(workerCount, executorService); - runOGNLTest(workerCount, executorService); - - } - @Test public void testPropertyEvaluator() throws Exception { Event mockEvent = generateMockEvent(mockProfile, mockSession); @@ -154,44 +120,6 @@ public void testPropertyEvaluator() throws Exception { assertEquals("Session last event date is not right", SESSION_LAST_EVENT_DATE, propertyConditionEvaluator.getPropertyValue(mockSession, "lastEventDate")); } - @Test - public void testOGNLSecurity() throws Exception { - Event mockEvent = generateMockEvent(mockProfile, mockSession); - File vulnFile = new File("target/vuln-file.txt"); - if (vulnFile.exists()) { - vulnFile.delete(); - } - String vulnFileCanonicalPath = vulnFile.getCanonicalPath(); - vulnFileCanonicalPath = vulnFileCanonicalPath.replace("\\", "\\\\"); // this is required for Windows support - try { - propertyConditionEvaluator.getOGNLPropertyValue(mockEvent, "@java.lang.Runtime@getRuntime().exec('touch " + vulnFileCanonicalPath + "')"); - } catch (RuntimeException | MethodFailedException re) { - // we ignore these exceptions as they are expected. - } - assertFalse("Vulnerability successfully executed ! File created at " + vulnFileCanonicalPath, vulnFile.exists()); - try { - propertyConditionEvaluator.getOGNLPropertyValue(mockEvent, "(#cmd='touch " + vulnFileCanonicalPath + "').(#cmds={'bash','-c',#cmd}).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start())"); - } catch (RuntimeException | MethodFailedException re) { - // we ignore these exceptions as they are expected. - } - vulnFile = new File("target/vuln-file.txt"); - assertFalse("Vulnerability successfully executed ! File created at " + vulnFileCanonicalPath, vulnFile.exists()); - try { - propertyConditionEvaluator.getOGNLPropertyValue(mockEvent, "(#cmd='touch " + vulnFileCanonicalPath + "').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'bash','-c',#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start())"); - } catch (RuntimeException | MethodFailedException re) { - // we ignore these exceptions as they are expected. - } - vulnFile = new File("target/vuln-file.txt"); - assertFalse("Vulnerability successfully executed ! File created at " + vulnFileCanonicalPath, vulnFile.exists()); - try { - propertyConditionEvaluator.getOGNLPropertyValue(mockEvent, "(#runtimeclass = #this.getClass().forName(\"java.lang.Runtime\")).(#getruntimemethod = #runtimeclass.getDeclaredMethods().{^ #this.name.equals(\"getRuntime\")}[0]).(#rtobj = #getruntimemethod.invoke(null,null)).(#execmethod = #runtimeclass.getDeclaredMethods().{? #this.name.equals(\"exec\")}.{? #this.getParameters()[0].getType().getName().equals(\"java.lang.String\")}.{? #this.getParameters().length < 2}[0]).(#execmethod.invoke(#rtobj,\" touch "+vulnFileCanonicalPath+"\"))"); - } catch (RuntimeException | MethodFailedException re) { - // we ignore these exceptions as they are expected. - } - vulnFile = new File("target/vuln-file.txt"); - assertFalse("Vulnerability successfully executed ! File created at " + vulnFileCanonicalPath, vulnFile.exists()); - } - private void runHardcodedTest(int workerCount, ExecutorService executorService) throws InterruptedException { List> todo = new ArrayList<>(workerCount); long startTime = System.currentTimeMillis(); @@ -203,17 +131,6 @@ private void runHardcodedTest(int workerCount, ExecutorService executorService) System.out.println("Hardcoded workers completed execution in " + totalTime + "ms"); } - private void runOGNLTest(int workerCount, ExecutorService executorService) throws InterruptedException { - List> todo = new ArrayList<>(workerCount); - long startTime = System.currentTimeMillis(); - for (int i = 0; i < workerCount; i++) { - todo.add(new OGNLWorker()); - } - List> answers = executorService.invokeAll(todo); - long totalTime = System.currentTimeMillis() - startTime; - System.out.println("OGNL workers completed execution in " + totalTime + "ms"); - } - private static Event generateMockEvent(Profile mockProfile, Session mockSession) { CustomItem sourceItem = new CustomItem(); sourceItem.setItemId(MOCK_ITEM_ID); @@ -285,20 +202,4 @@ public Object call() { } } - class OGNLWorker implements Callable { - - @Override - public Object call() { - try { - propertyConditionEvaluator.getOGNLPropertyValue(mockEvent, "target.itemId"); - propertyConditionEvaluator.getOGNLPropertyValue(mockEvent, "target.scope"); - propertyConditionEvaluator.getOGNLPropertyValue(mockEvent, "target.properties.pageInfo.pagePath"); - propertyConditionEvaluator.getOGNLPropertyValue(mockEvent, "target.properties.pageInfo.pageURL"); - } catch (Exception e) { - e.printStackTrace(); - } - return null; - } - } - } diff --git a/plugins/hover-event/pom.xml b/plugins/hover-event/pom.xml index 15bbe3fea..715031699 100644 --- a/plugins/hover-event/pom.xml +++ b/plugins/hover-event/pom.xml @@ -18,25 +18,50 @@ 4.0.0 - org.apache.unomi unomi-plugins - 2.7.0-SNAPSHOT + 3.0.0-SNAPSHOT - unomi-plugins-hover-event Apache Unomi :: Plugins :: Hover event support Mouse hover event support plugin for the Apache Unomi Context Server bundle + + + + org.apache.unomi + unomi-bom + ${project.version} + pom + import + + + + org.apache.unomi unomi-persistence-elasticsearch-core - ${project.version} provided + + + + org.apache.felix + maven-bundle-plugin + true + true + + + <_dsannotations>* + + + + + + diff --git a/plugins/hover-event/src/main/resources/OSGI-INF/blueprint/blueprint.xml b/plugins/hover-event/src/main/resources/OSGI-INF/blueprint/blueprint.xml index 69e03ac93..3a3e50f0e 100644 --- a/plugins/hover-event/src/main/resources/OSGI-INF/blueprint/blueprint.xml +++ b/plugins/hover-event/src/main/resources/OSGI-INF/blueprint/blueprint.xml @@ -17,7 +17,7 @@ --> + xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd"> diff --git a/plugins/kafka-injector/pom.xml b/plugins/kafka-injector/pom.xml index 59660ab60..96808d7c4 100644 --- a/plugins/kafka-injector/pom.xml +++ b/plugins/kafka-injector/pom.xml @@ -16,54 +16,70 @@ --> 4.0.0 - org.apache.unomi unomi-plugins - 2.7.0-SNAPSHOT + 3.0.0-SNAPSHOT - kafka-extension Apache Unomi :: Plugins :: Kafka Injector Apache Kafka injector for the Apache Unomi Context server bundle + + + + org.apache.unomi + unomi-bom + ${project.version} + pom + import + + + + - org.apache.kafka - kafka-clients - 2.2.1 + org.apache.unomi + unomi-api + ${project.version} + - org.slf4j - slf4j-api - 1.7.36 + org.osgi + osgi.core + provided - org.apache.unomi - unomi-api - ${project.version} + org.osgi + org.osgi.service.component + provided + + + org.osgi + org.osgi.service.component.annotations + provided + com.fasterxml.jackson.core jackson-core - ${version.jackson.core} com.fasterxml.jackson.core jackson-databind - ${version.jackson.databind} + - org.osgi - osgi.core - 6.0.0 + org.apache.kafka + kafka-clients - org.osgi - osgi.cmpn - 6.0.0 + org.slf4j + slf4j-api + provided + diff --git a/plugins/mail/pom.xml b/plugins/mail/pom.xml index 40c931225..dd98d7959 100644 --- a/plugins/mail/pom.xml +++ b/plugins/mail/pom.xml @@ -18,25 +18,35 @@ 4.0.0 - org.apache.unomi unomi-plugins - 2.7.0-SNAPSHOT + 3.0.0-SNAPSHOT - unomi-plugins-mail Apache Unomi :: Plugins :: Mail notifications actions Mail notification action plugin for the Apache Unomi Context Server bundle + + + + org.apache.unomi + unomi-bom + ${project.version} + pom + import + + + + org.apache.unomi unomi-persistence-spi - ${project.version} provided + org.apache.commons commons-email @@ -45,6 +55,12 @@ org.antlr ST4 + + + org.slf4j + slf4j-api + provided + diff --git a/plugins/mail/src/main/resources/OSGI-INF/blueprint/blueprint.xml b/plugins/mail/src/main/resources/OSGI-INF/blueprint/blueprint.xml index 0d9fa502a..7800a7341 100644 --- a/plugins/mail/src/main/resources/OSGI-INF/blueprint/blueprint.xml +++ b/plugins/mail/src/main/resources/OSGI-INF/blueprint/blueprint.xml @@ -16,10 +16,11 @@ ~ limitations under the License. --> - + xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd + http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.3.0 https://aries.apache.org/schemas/blueprint-cm/blueprint-cm-1.3.0.xsd"> diff --git a/plugins/optimization-test/pom.xml b/plugins/optimization-test/pom.xml index e5def900e..0e269c51e 100644 --- a/plugins/optimization-test/pom.xml +++ b/plugins/optimization-test/pom.xml @@ -18,16 +18,42 @@ 4.0.0 - org.apache.unomi unomi-plugins - 2.7.0-SNAPSHOT + 3.0.0-SNAPSHOT - unomi-plugins-optimization-test Apache Unomi :: Plugins :: Rules and Actions for optimization tests (A/B testing) Optimization testing (A/B testing) plugin for the Apache Unomi Context Server bundle + + + + org.apache.unomi + unomi-bom + ${project.version} + pom + import + + + + + + + + org.apache.felix + maven-bundle-plugin + true + true + + + <_dsannotations>* + + + + + + diff --git a/plugins/optimization-test/src/main/resources/OSGI-INF/blueprint/blueprint.xml b/plugins/optimization-test/src/main/resources/OSGI-INF/blueprint/blueprint.xml index 8a6439339..01eb7f43a 100644 --- a/plugins/optimization-test/src/main/resources/OSGI-INF/blueprint/blueprint.xml +++ b/plugins/optimization-test/src/main/resources/OSGI-INF/blueprint/blueprint.xml @@ -18,7 +18,7 @@ + xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd"> diff --git a/plugins/past-event/pom.xml b/plugins/past-event/pom.xml index c22a797b4..6d8ebb0f2 100644 --- a/plugins/past-event/pom.xml +++ b/plugins/past-event/pom.xml @@ -18,32 +18,55 @@ 4.0.0 - org.apache.unomi unomi-plugins - 2.7.0-SNAPSHOT + 3.0.0-SNAPSHOT - unomi-plugins-past-event Apache Unomi :: Plugins :: Conditions based on past events Past event conditions plugin for the Apache Unomi Context Server bundle + + + + org.apache.unomi + unomi-bom + ${project.version} + pom + import + + + + org.apache.unomi unomi-persistence-elasticsearch-core - ${project.version} provided org.apache.unomi unomi-persistence-spi - ${project.version} provided + + + + org.apache.felix + maven-bundle-plugin + true + true + + + <_dsannotations>* + + + + + diff --git a/plugins/past-event/src/main/resources/OSGI-INF/blueprint/blueprint.xml b/plugins/past-event/src/main/resources/OSGI-INF/blueprint/blueprint.xml index 1475ab0de..e5142bb33 100644 --- a/plugins/past-event/src/main/resources/OSGI-INF/blueprint/blueprint.xml +++ b/plugins/past-event/src/main/resources/OSGI-INF/blueprint/blueprint.xml @@ -17,7 +17,7 @@ --> + xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd"> diff --git a/plugins/pom.xml b/plugins/pom.xml index c810f306e..8a4cbeabc 100644 --- a/plugins/pom.xml +++ b/plugins/pom.xml @@ -18,37 +18,34 @@ 4.0.0 - org.apache.unomi unomi-root - 2.7.0-SNAPSHOT + 3.0.0-SNAPSHOT - unomi-plugins Apache Unomi :: Plugins Apache Unomi Context Server plugins pom - - baseplugin - request - mail - optimization-test - hover-event - past-event - tracked-event - kafka-injector - + + + + org.apache.unomi + unomi-bom + ${project.version} + pom + import + + + - + org.apache.unomi unomi-api - ${project.version} provided - diff --git a/plugins/request/pom.xml b/plugins/request/pom.xml index 0e1ed3874..62ef94f92 100644 --- a/plugins/request/pom.xml +++ b/plugins/request/pom.xml @@ -18,67 +18,77 @@ 4.0.0 - org.apache.unomi unomi-plugins - 2.7.0-SNAPSHOT + 3.0.0-SNAPSHOT - unomi-plugins-request Apache Unomi :: Plugins :: Request reading actions Request reading actions plugin for the Apache Unomi Context Server bundle + + + + org.apache.unomi + unomi-bom + ${project.version} + pom + import + + + + javax.servlet javax.servlet-api provided + + jakarta.annotation + jakarta.annotation-api + provided + com.maxmind.geoip2 geoip2 - 0.9.0 - nl.basjes.parse.useragent yauaa - 7.13.0 + + + + org.slf4j + slf4j-api + provided junit junit - 4.13.1 test org.apache.logging.log4j log4j-api - 2.19.0 test org.apache.logging.log4j log4j-core - 2.19.0 test org.apache.logging.log4j log4j-slf4j-impl - 2.19.0 test - - javax.annotation - javax.annotation-api - 1.3.2 - + diff --git a/plugins/request/src/main/java/org/apache/unomi/plugins/request/actions/SetRemoteHostInfoAction.java b/plugins/request/src/main/java/org/apache/unomi/plugins/request/actions/SetRemoteHostInfoAction.java index a14edbfa8..aa55033a2 100644 --- a/plugins/request/src/main/java/org/apache/unomi/plugins/request/actions/SetRemoteHostInfoAction.java +++ b/plugins/request/src/main/java/org/apache/unomi/plugins/request/actions/SetRemoteHostInfoAction.java @@ -31,7 +31,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.annotation.PostConstruct; +import jakarta.annotation.PostConstruct; import javax.servlet.http.HttpServletRequest; import java.io.File; import java.io.IOException; diff --git a/plugins/request/src/main/resources/OSGI-INF/blueprint/blueprint.xml b/plugins/request/src/main/resources/OSGI-INF/blueprint/blueprint.xml index 9b482296f..b2ca19089 100644 --- a/plugins/request/src/main/resources/OSGI-INF/blueprint/blueprint.xml +++ b/plugins/request/src/main/resources/OSGI-INF/blueprint/blueprint.xml @@ -17,10 +17,10 @@ --> + xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd + http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.3.0 https://aries.apache.org/schemas/blueprint-cm/blueprint-cm-1.3.0.xsd"> diff --git a/plugins/tracked-event/pom.xml b/plugins/tracked-event/pom.xml index fb9279d18..0b6744056 100644 --- a/plugins/tracked-event/pom.xml +++ b/plugins/tracked-event/pom.xml @@ -18,32 +18,55 @@ 4.0.0 - org.apache.unomi unomi-plugins - 2.7.0-SNAPSHOT + 3.0.0-SNAPSHOT - unomi-plugins-tracked-event Apache Unomi :: Plugins :: Conditions for events that need to be tracked Tracked event conditions plugin for the Apache Unomi Context Server bundle + + + + org.apache.unomi + unomi-bom + ${project.version} + pom + import + + + + org.apache.unomi unomi-persistence-elasticsearch-core - ${project.version} provided org.apache.unomi unomi-persistence-spi - ${project.version} provided + + + + org.apache.felix + maven-bundle-plugin + true + true + + + <_dsannotations>* + + + + + diff --git a/plugins/tracked-event/src/main/resources/OSGI-INF/blueprint/blueprint.xml b/plugins/tracked-event/src/main/resources/OSGI-INF/blueprint/blueprint.xml index e2a66b93b..5004a6209 100644 --- a/plugins/tracked-event/src/main/resources/OSGI-INF/blueprint/blueprint.xml +++ b/plugins/tracked-event/src/main/resources/OSGI-INF/blueprint/blueprint.xml @@ -17,7 +17,7 @@ --> + xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd"> diff --git a/pom.xml b/pom.xml index bcef0de13..d949d7c88 100644 --- a/pom.xml +++ b/pom.xml @@ -17,16 +17,13 @@ --> - 4.0.0 - org.apache apache - 23 + 29 - org.apache.unomi unomi-root Apache Unomi :: Root Project @@ -35,7 +32,7 @@ event tracking server. https://unomi.apache.org - 2.7.0-SNAPSHOT + 3.0.0-SNAPSHOT pom @@ -58,52 +55,99 @@ 2014 - 4.2.15 UTF-8 - 3.3.11 - 2.11.4 - 2.11.4 - 2.11.4 - 4.2.15 - 4.13.5 - 7.4.2 - 7.11.0 - 8.2.0 - 4.0.21 - 1.4.0 - 1.1.0.Final - 2.16.1 - 3.3.2 - 1.9.4 - 3.2.2 - 1.3.3 - 1.7.36 - 2.12.7 - 4.3.4 - 1.9 - 20240303 - - 11 + UTF-8 + 17 ${java.version} ${java.version} - UTF-8 + ${java.version} - - 2.11.0_1 - 2.9.0 - 3.0.2_1 - 2.7.2_3 - 2.7.2_1 - 4.5.0 + 4.4.8 + 7.4.2 + 7.11.0 + 1.1.0.Final + 3.18.0 + 2.20.0 + 1.9.0 + 1.11.0 + 3.2.2 + 2.5.2.Final + 2.4 + 3.10 + 2.19.0 + 8.2.0 + 3.12.8 + 2.4.0 + 2.12.7 + 4.3.0 + 1.3 + 1.2 + 1.10 + 2.18.2 + 1.10 + 16.0.1 + 16.0.1 + 20250517 + 3.0.2 + 3.0.0 + 5.27.1 + 3.6.5 + 2.1 + 4.0.28 4.5.14 4.4.16 + 4.13.2 + 2.2.1 + 4.3.4 + 1.6.0 + 1.3.1 + 0.9.0 + 3.5.3 + 4.7.1 + 4.0.2 + 2.2.0 + 1.0.2 + 7.31.0 + 4.0.9 + 5.0.13 + 3.10.0 + 2.2.19 + 14.0 + 8.0 + 1.0 + 9.4.57.v20241219 + 2.0.0 + 2.1.3 + 1.1 + 1.14 + 3.2.0 + 1.6.0 + 1.0.3 + javax.servlet + javax.servlet-api + 3.1.0 + + 5.1.9 + 3.14.0 + 3.1.0 + 3.6.0 + 3.11.2 + 3.5.3 + 3.5.2 + 3.3.1 + 3.7.1 + 3.8.1 + 3.2.1 + 9.0.9 + 3.21.0 + 0.16.1 + 1.0-m5.1 v16.20.2 v1.22.19 -Papache-release,integration-tests - @@ -277,6 +321,17 @@ Yupiik https://www.yupiik.com + + jayblanc + Jérôme Blanchard + jblanchard@jahia.com + +2 + + committer + + Jahia + https://www.jahia.com + @@ -319,6 +374,54 @@ + + + bom + api + common + persistence-spi + scripting + metrics + lifecycle-watcher + persistence-elasticsearch + services + + plugins + plugins/baseplugin + plugins/hover-event + plugins/past-event + plugins/tracked-event + plugins/kafka-injector + plugins/mail + plugins/optimization-test + plugins/request + + extensions + extensions/healthcheck + extensions/log4j-extension + extensions/geonames + extensions/json-schema + extensions/lists-extension + extensions/privacy-extension + extensions/web-tracker + tools + wab + rest + manual + kar + + extensions/groovy-actions + extensions/router + extensions/salesforce-connector + extensions/weather-update + graphql + samples + package + + integration-tests @@ -677,332 +780,13 @@ - - - - org.osgi - osgi.core - 6.0.0 - provided - - - org.osgi - osgi.cmpn - 6.0.0 - provided - - - - javax.servlet - javax.servlet-api - 3.0.1 - - - - - org.apache.cxf - cxf-rt-frontend-jaxws - ${cxf.version} - - - org.apache.cxf - cxf-rt-frontend-jaxrs - ${cxf.version} - - - org.apache.cxf - cxf-rt-transports-http - ${cxf.version} - - - org.apache.cxf - cxf-rt-rs-security-cors - ${cxf.version} - - - - org.apache.cxf.karaf - apache-cxf - ${cxf.version} - features - xml - runtime - - - - - - com.fasterxml.jackson.jaxrs - jackson-jaxrs-json-provider - ${version.jackson.core} - - - com.fasterxml.jackson.core - jackson-core - ${version.jackson.core} - provided - - - com.fasterxml.jackson.core - jackson-databind - ${version.jackson.databind} - provided - - - com.fasterxml.jackson.module - jackson-module-jaxb-annotations - ${version.jackson.jaxb} - provided - - - com.fasterxml.jackson.core - jackson-annotations - ${version.jackson.core} - provided - - - - - - commons-io - commons-io - ${apache.commons.io.version} - - - org.apache.commons - commons-lang3 - ${apache.commons.lang3.version} - - - commons-beanutils - commons-beanutils - ${apache.commons.beanutils.version} - - - commons-collections - commons-collections - ${apache.commons.collections.version} - - - org.apache.commons - commons-email - ${apache.commons.email.version} - - - - - - - org.apache.karaf.features - framework - ${version.karaf} - kar - - - org.apache.karaf.features - framework - features - ${version.karaf} - xml - runtime - - - org.apache.karaf.features - standard - features - ${version.karaf} - xml - - - org.apache.karaf.features - spring - features - ${version.karaf} - xml - runtime - - - org.apache.karaf.features - enterprise - features - ${version.karaf} - xml - runtime - - - - - - org.ops4j.pax.web - pax-web-features - 3.1.0 - features - xml - - - org.ops4j.pax.web - pax-web-api - 3.1.0 - provided - - - - org.slf4j - slf4j-api - ${slf4j.version} - provided - - - org.apache.httpcomponents - httpclient-osgi - ${httpclient-osgi.version} - - - org.apache.httpcomponents - httpclient-osgi - ${httpclient-osgi.version} - bundle - - - commons-codec - commons-codec - 1.17.0 - - - org.apache.httpcomponents - httpcore-osgi - ${httpcore-osgi.version} - - - - - org.ops4j.pax.exam - pax-exam-container-karaf - ${version.pax.exam} - test - - - org.ops4j.pax.exam - pax-exam-junit4 - ${version.pax.exam} - test - - - org.ops4j.pax.exam - pax-exam - ${version.pax.exam} - test - - - org.ops4j.pax.url - pax-url-aether - 2.6.14 - test - - - - javax.inject - javax.inject - 1 - test - - - - - javax.validation - validation-api - ${bean.validation.version} - provided - - - junit - junit - 4.13.2 - test - - - joda-time - joda-time - ${joda-time.version} - - - ognl - ognl - 3.4.3 - - - org.antlr - ST4 - ${st4.version} - - - org.apache.geronimo.specs - geronimo-jcdi_1.0_spec - 1.0 - provided - - - org.apache.geronimo.specs - geronimo-atinject_1.0_spec - 1.0 - provided - - - org.apache.geronimo.specs - geronimo-annotation_1.1_spec - 1.0.1 - provided - - - org.mvel - mvel2 - 2.5.2.Final - - - org.json - json - ${org.json.version} - - - - - - api - common - metrics - scripting - persistence-spi - lifecycle-watcher - persistence-elasticsearch - services - rest - graphql - wab - plugins - extensions - tools - manual - kar - samples - package - - - - - org.slf4j - slf4j-api - 1.7.36 - provided - - - org.apache.felix maven-bundle-plugin - 5.1.1 + ${maven-bundle.plugin.version} true @@ -1011,10 +795,20 @@ + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler.plugin.version} + + ${maven.compiler.source} + ${maven.compiler.target} + ${maven.compiler.release} + + org.apache.maven.plugins maven-release-plugin - 2.5.3 + ${maven-release.plugin.version} false true @@ -1026,54 +820,33 @@ org.codehaus.mojo build-helper-maven-plugin - 1.10 + ${build-helper.plugin.version} org.apache.karaf.tooling karaf-maven-plugin - ${version.karaf} + ${karaf.version} true org.apache.maven.plugins maven-javadoc-plugin - 3.2.0 - - - - org.eclipse.jetty - jetty-client - 7.4.4.v20110707 - - - org.eclipse.jetty - jetty-util - 7.4.4.v20110707 - - - - - - org.apache.servicemix.tooling - depends-maven-plugin - 1.4.0 + ${maven-javadoc.plugin.version} org.apache.maven.plugins maven-surefire-plugin - - 2.18.1 + ${maven-surefire.plugin.version} org.apache.maven.plugins maven-failsafe-plugin - - 2.18.1 + ${maven-failsafe.plugin.version} org.apache.maven.plugins maven-source-plugin - 2.1.2 + ${maven-source.plugin.version} attach-sources @@ -1085,22 +858,22 @@ maven-assembly-plugin - 2.3 + ${maven-assembly.plugin.version} org.apache.maven.plugins maven-dependency-plugin - 2.10 + ${maven-dependency.plugin.version} org.apache.maven.plugins maven-scm-publish-plugin - 3.0.0 + ${maven-scm-publish.plugin.version} org.owasp dependency-check-maven - 5.0.0 + ${dependency-check.plugin.version} @@ -1108,7 +881,11 @@ org.apache.maven.plugins maven-compiler-plugin - 3.8.1 + + ${maven.compiler.source} + ${maven.compiler.target} + ${maven.compiler.release} + org.apache.felix @@ -1118,30 +895,17 @@ org.apache.maven.plugins maven-site-plugin - 3.4 - - - lt.velykis.maven.skins - reflow-velocity-tools - 1.1.1 - - - - org.apache.velocity - velocity - 1.7 - - + ${maven-site.plugin.version} org.apache.rat apache-rat-plugin - 0.11 + ${apache-rat.plugin.version} external.atlassian.jgitflow jgitflow-maven-plugin - 1.0-m5.1 + ${jgitflow.plugin.version} production @@ -1159,20 +923,5 @@ - - - - - - org.apache.maven.plugins - maven-project-info-reports-plugin - 2.9 - - false - - - - - diff --git a/rest/pom.xml b/rest/pom.xml index fc856dbcd..11e00265f 100644 --- a/rest/pom.xml +++ b/rest/pom.xml @@ -18,46 +18,58 @@ 4.0.0 - org.apache.unomi unomi-root - 2.7.0-SNAPSHOT + 3.0.0-SNAPSHOT - unomi-rest Apache Unomi :: REST API Apache Unomi Context Server REST API bundle + + + + org.apache.unomi + unomi-bom + ${project.version} + pom + import + + + + org.apache.unomi unomi-api - ${project.version} provided org.apache.unomi unomi-json-schema-services - ${project.version} provided - com.fasterxml.jackson.dataformat - jackson-dataformat-yaml - ${version.jackson.core} + org.apache.unomi + unomi-persistence-spi provided + org.osgi osgi.core provided - org.osgi - osgi.cmpn + org.osgi.service.component + provided + + + org.osgi + org.osgi.service.component.annotations provided @@ -66,25 +78,48 @@ javax.servlet-api provided + + javax.ws.rs + javax.ws.rs-api + provided + - org.apache.cxf - cxf-rt-frontend-jaxws + org.apache.commons + commons-lang3 provided - org.apache.cxf - cxf-rt-frontend-jaxrs + commons-beanutils + commons-beanutils provided - org.apache.cxf - cxf-rt-transports-http + javax.validation + validation-api + provided + + + + com.opencsv + opencsv + + + + org.apache.karaf.jaas + org.apache.karaf.jaas.boot + provided + + + + com.fasterxml.jackson.dataformat + jackson-dataformat-yaml provided com.fasterxml.jackson.jaxrs jackson-jaxrs-json-provider + provided com.fasterxml.jackson.core @@ -96,33 +131,30 @@ jackson-annotations provided + - org.apache.unomi - unomi-persistence-spi - ${project.version} + org.apache.cxf + cxf-rt-frontend-jaxrs provided - commons-lang - commons-lang - 2.6 + org.apache.cxf + cxf-rt-transports-http + provided org.apache.cxf cxf-rt-rs-service-description-openapi-v3 - ${cxf.version} provided org.apache.cxf cxf-rt-features-metrics - ${cxf.version} provided org.apache.cxf cxf-rt-features-logging - ${cxf.version} provided @@ -130,25 +162,28 @@ cxf-rt-rs-security-cors provided + - com.opencsv - opencsv - 3.10 - - - commons-beanutils - commons-beanutils - - - org.apache.karaf.jaas - org.apache.karaf.jaas.boot - ${version.karaf} - provided - - - javax.validation - validation-api + org.slf4j + slf4j-api provided + + + + + org.apache.felix + maven-bundle-plugin + true + + + + * + + + + + + diff --git a/rest/src/main/java/org/apache/unomi/rest/authentication/AuthenticationFilter.java b/rest/src/main/java/org/apache/unomi/rest/authentication/AuthenticationFilter.java index 80fe76a81..119a556bd 100644 --- a/rest/src/main/java/org/apache/unomi/rest/authentication/AuthenticationFilter.java +++ b/rest/src/main/java/org/apache/unomi/rest/authentication/AuthenticationFilter.java @@ -24,7 +24,7 @@ import org.apache.karaf.jaas.boot.principal.RolePrincipal; import org.apache.karaf.jaas.boot.principal.UserPrincipal; -import javax.annotation.Priority; +import jakarta.annotation.Priority; import javax.security.auth.Subject; import javax.ws.rs.Priorities; import javax.ws.rs.container.ContainerRequestContext; @@ -96,4 +96,4 @@ private boolean isPublicPath(ContainerRequestContext requestContext) { String currentPath = requestContext.getMethod() + " " + requestContext.getUriInfo().getPath(); return restAuthenticationConfig.getPublicPathPatterns().stream().anyMatch(pattern -> pattern.matcher(currentPath).matches()); } -} \ No newline at end of file +} diff --git a/rest/src/main/java/org/apache/unomi/rest/endpoints/CampaignsServiceEndPoint.java b/rest/src/main/java/org/apache/unomi/rest/endpoints/CampaignsServiceEndPoint.java index 032dedd6f..0e23f67da 100644 --- a/rest/src/main/java/org/apache/unomi/rest/endpoints/CampaignsServiceEndPoint.java +++ b/rest/src/main/java/org/apache/unomi/rest/endpoints/CampaignsServiceEndPoint.java @@ -31,8 +31,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.jws.WebMethod; -import javax.jws.WebService; import javax.ws.rs.*; import javax.ws.rs.core.MediaType; import java.util.Set; @@ -40,7 +38,6 @@ /** * A JAX-RS endpoint to manage {@link Campaign}s and related information. */ -@WebService @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) @CrossOriginResourceSharing( @@ -60,7 +57,6 @@ public CampaignsServiceEndPoint() { LOGGER.info("Initializing campaigns service endpoint..."); } - @WebMethod(exclude=true) public void setGoalsService(GoalsService goalsService) { this.goalsService = goalsService; } diff --git a/rest/src/main/java/org/apache/unomi/rest/endpoints/ClientEndpoint.java b/rest/src/main/java/org/apache/unomi/rest/endpoints/ClientEndpoint.java index 4f7fb1298..acc087cf9 100644 --- a/rest/src/main/java/org/apache/unomi/rest/endpoints/ClientEndpoint.java +++ b/rest/src/main/java/org/apache/unomi/rest/endpoints/ClientEndpoint.java @@ -29,15 +29,9 @@ import org.osgi.service.component.annotations.Component; import org.osgi.service.component.annotations.Reference; -import javax.jws.WebService; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import javax.ws.rs.GET; -import javax.ws.rs.InternalServerErrorException; -import javax.ws.rs.NotFoundException; -import javax.ws.rs.OPTIONS; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; +import javax.ws.rs.*; import javax.ws.rs.core.Context; import javax.ws.rs.core.Response; import java.io.StringWriter; @@ -49,7 +43,6 @@ /** * A servlet filter to serve a context-specific Javascript containing the current request context object. */ -@WebService @CrossOriginResourceSharing(allowAllOrigins = true, allowCredentials = true) @Path("/") @Component(service = ClientEndpoint.class, property = "osgi.jaxrs.resource=true") diff --git a/rest/src/main/java/org/apache/unomi/rest/endpoints/ClusterServiceEndPoint.java b/rest/src/main/java/org/apache/unomi/rest/endpoints/ClusterServiceEndPoint.java index a2f9ddeb4..19fff95a5 100644 --- a/rest/src/main/java/org/apache/unomi/rest/endpoints/ClusterServiceEndPoint.java +++ b/rest/src/main/java/org/apache/unomi/rest/endpoints/ClusterServiceEndPoint.java @@ -26,8 +26,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.jws.WebMethod; -import javax.jws.WebService; import javax.ws.rs.*; import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; @@ -38,7 +36,6 @@ /** * A JAX-RS endpoint to access information about the context server's cluster. */ -@WebService @Produces(MediaType.APPLICATION_JSON) @CrossOriginResourceSharing( allowAllOrigins = true, @@ -59,12 +56,10 @@ public ClusterServiceEndPoint() { LOGGER.info("Initializing cluster service endpoint..."); } - @WebMethod(exclude = true) public void setClusterService(ClusterService clusterService) { this.clusterService = clusterService; } - @WebMethod(exclude = true) public void setMessageContext(MessageContext messageContext) { this.messageContext = messageContext; } diff --git a/rest/src/main/java/org/apache/unomi/rest/endpoints/ContextJsonEndpoint.java b/rest/src/main/java/org/apache/unomi/rest/endpoints/ContextJsonEndpoint.java index 1d50168b2..a50ea7592 100644 --- a/rest/src/main/java/org/apache/unomi/rest/endpoints/ContextJsonEndpoint.java +++ b/rest/src/main/java/org/apache/unomi/rest/endpoints/ContextJsonEndpoint.java @@ -23,7 +23,10 @@ import org.apache.cxf.rs.security.cors.CrossOriginResourceSharing; import org.apache.unomi.api.*; import org.apache.unomi.api.conditions.Condition; -import org.apache.unomi.api.services.*; +import org.apache.unomi.api.services.PersonalizationService; +import org.apache.unomi.api.services.PrivacyService; +import org.apache.unomi.api.services.ProfileService; +import org.apache.unomi.api.services.RulesService; import org.apache.unomi.persistence.spi.CustomObjectMapper; import org.apache.unomi.rest.exception.InvalidRequestException; import org.apache.unomi.rest.service.RestServiceUtils; @@ -34,7 +37,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.jws.WebService; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -45,7 +47,6 @@ import java.util.*; import java.util.stream.Collectors; -@WebService @Consumes(MediaType.APPLICATION_JSON) @CrossOriginResourceSharing(allowAllOrigins = true, allowCredentials = true) @Path("/") diff --git a/rest/src/main/java/org/apache/unomi/rest/endpoints/DefinitionsServiceEndPoint.java b/rest/src/main/java/org/apache/unomi/rest/endpoints/DefinitionsServiceEndPoint.java index 37353d2f1..a44655127 100644 --- a/rest/src/main/java/org/apache/unomi/rest/endpoints/DefinitionsServiceEndPoint.java +++ b/rest/src/main/java/org/apache/unomi/rest/endpoints/DefinitionsServiceEndPoint.java @@ -31,8 +31,6 @@ import org.osgi.service.component.annotations.Component; import org.osgi.service.component.annotations.Reference; -import javax.jws.WebMethod; -import javax.jws.WebService; import javax.ws.rs.*; import javax.ws.rs.core.MediaType; import java.util.*; @@ -40,7 +38,6 @@ /** * A JAX-RS endpoint to retrieve definition information about core context server entities such as conditions, actions and values. */ -@WebService @Produces(MediaType.APPLICATION_JSON + ";charset=UTF-8") @CrossOriginResourceSharing( allowAllOrigins = true, @@ -55,12 +52,10 @@ public class DefinitionsServiceEndPoint { @Reference private LocalizationHelper localizationHelper; - @WebMethod(exclude = true) public void setDefinitionsService(DefinitionsService definitionsService) { this.definitionsService = definitionsService; } - @WebMethod(exclude = true) public void setLocalizationHelper(LocalizationHelper localizationHelper) { this.localizationHelper = localizationHelper; } @@ -290,7 +285,6 @@ public Map> getTypesByPlugin() { return definitionsService.getTypesByPlugin(); } - @WebMethod(exclude = true) public PropertyMergeStrategyType getPropertyMergeStrategyType(String id) { return definitionsService.getPropertyMergeStrategyType(id); } diff --git a/rest/src/main/java/org/apache/unomi/rest/endpoints/EventServiceEndpoint.java b/rest/src/main/java/org/apache/unomi/rest/endpoints/EventServiceEndpoint.java index f1bac4d1f..46c0c2c39 100644 --- a/rest/src/main/java/org/apache/unomi/rest/endpoints/EventServiceEndpoint.java +++ b/rest/src/main/java/org/apache/unomi/rest/endpoints/EventServiceEndpoint.java @@ -24,20 +24,13 @@ import org.osgi.service.component.annotations.Component; import org.osgi.service.component.annotations.Reference; -import javax.jws.WebMethod; -import javax.jws.WebService; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; +import javax.ws.rs.*; import javax.ws.rs.core.MediaType; import java.util.Set; /** * A JAX-RS endpoint to access information about the context server's events. */ -@WebService @Produces(MediaType.APPLICATION_JSON) @CrossOriginResourceSharing( allowAllOrigins = true, @@ -50,7 +43,6 @@ public class EventServiceEndpoint { @Reference private EventService eventService; - @WebMethod(exclude = true) public void setEventService(EventService eventService) { this.eventService = eventService; } diff --git a/rest/src/main/java/org/apache/unomi/rest/endpoints/EventsCollectorEndpoint.java b/rest/src/main/java/org/apache/unomi/rest/endpoints/EventsCollectorEndpoint.java index c9b3109dd..6ab08e084 100644 --- a/rest/src/main/java/org/apache/unomi/rest/endpoints/EventsCollectorEndpoint.java +++ b/rest/src/main/java/org/apache/unomi/rest/endpoints/EventsCollectorEndpoint.java @@ -28,23 +28,15 @@ import org.osgi.service.component.annotations.Component; import org.osgi.service.component.annotations.Reference; -import javax.jws.WebService; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import javax.ws.rs.Consumes; -import javax.ws.rs.GET; -import javax.ws.rs.OPTIONS; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.QueryParam; +import javax.ws.rs.*; import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import java.util.Date; import java.util.List; -@WebService @Produces(MediaType.APPLICATION_JSON + ";charset=UTF-8") @Consumes(MediaType.APPLICATION_JSON) @CrossOriginResourceSharing(allowAllOrigins = true, allowCredentials = true) diff --git a/rest/src/main/java/org/apache/unomi/rest/endpoints/GoalsServiceEndPoint.java b/rest/src/main/java/org/apache/unomi/rest/endpoints/GoalsServiceEndPoint.java index 936986a76..68121e62e 100644 --- a/rest/src/main/java/org/apache/unomi/rest/endpoints/GoalsServiceEndPoint.java +++ b/rest/src/main/java/org/apache/unomi/rest/endpoints/GoalsServiceEndPoint.java @@ -28,8 +28,6 @@ import org.osgi.service.component.annotations.Component; import org.osgi.service.component.annotations.Reference; -import javax.jws.WebMethod; -import javax.jws.WebService; import javax.ws.rs.*; import javax.ws.rs.core.MediaType; import java.util.Set; @@ -37,7 +35,6 @@ /** * A JAX-RS endpoint to manage {@link Goal}s and related information. */ -@WebService @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) @CrossOriginResourceSharing( @@ -51,7 +48,6 @@ public class GoalsServiceEndPoint { @Reference private GoalsService goalsService; - @WebMethod(exclude = true) public void setGoalsService(GoalsService goalsService) { this.goalsService = goalsService; } diff --git a/rest/src/main/java/org/apache/unomi/rest/endpoints/PatchServiceEndPoint.java b/rest/src/main/java/org/apache/unomi/rest/endpoints/PatchServiceEndPoint.java index 338bf4189..3f6d81f68 100644 --- a/rest/src/main/java/org/apache/unomi/rest/endpoints/PatchServiceEndPoint.java +++ b/rest/src/main/java/org/apache/unomi/rest/endpoints/PatchServiceEndPoint.java @@ -23,14 +23,12 @@ import org.osgi.service.component.annotations.Component; import org.osgi.service.component.annotations.Reference; -import javax.jws.WebService; import javax.ws.rs.*; import javax.ws.rs.core.MediaType; /** * A JAX-RS endpoint to manage patches. */ -@WebService @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) @CrossOriginResourceSharing( diff --git a/rest/src/main/java/org/apache/unomi/rest/endpoints/ProfileServiceEndPoint.java b/rest/src/main/java/org/apache/unomi/rest/endpoints/ProfileServiceEndPoint.java index 2c9d040b9..7461965b4 100644 --- a/rest/src/main/java/org/apache/unomi/rest/endpoints/ProfileServiceEndPoint.java +++ b/rest/src/main/java/org/apache/unomi/rest/endpoints/ProfileServiceEndPoint.java @@ -17,7 +17,7 @@ package org.apache.unomi.rest.endpoints; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.apache.cxf.rs.security.cors.CrossOriginResourceSharing; import org.apache.unomi.api.*; import org.apache.unomi.api.conditions.Condition; @@ -32,8 +32,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.jws.WebMethod; -import javax.jws.WebService; import javax.servlet.http.HttpServletResponse; import javax.ws.rs.*; import javax.ws.rs.core.Context; @@ -47,7 +45,6 @@ /** * A JAX-RS endpoint to manage {@link Profile}s and {@link Persona}s. */ -@WebService @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) @CrossOriginResourceSharing( @@ -76,22 +73,18 @@ public ProfileServiceEndPoint() { LOGGER.info("Initializing profile service endpoint..."); } - @WebMethod(exclude = true) public void setProfileService(ProfileService profileService) { this.profileService = profileService; } - @WebMethod(exclude = true) public void setEventService(EventService eventService) { this.eventService = eventService; } - @WebMethod(exclude = true) public void setSegmentService(SegmentService segmentService) { this.segmentService = segmentService; } - @WebMethod(exclude = true) public void setLocalizationHelper(LocalizationHelper localizationHelper) { this.localizationHelper = localizationHelper; } @@ -439,12 +432,10 @@ public PartialList getSessionEvents(@PathParam("sessionId") String sessio return eventService.searchEvents(sessionId, eventTypes, query, offset, size, sortBy); } - @WebMethod(exclude = true) public PartialList findProfileSessions(String profileId) { return null; } - @WebMethod(exclude = true) public boolean matchCondition(Condition condition, Profile profile, Session session) { return profileService.matchCondition(condition, profile, session); } diff --git a/rest/src/main/java/org/apache/unomi/rest/endpoints/QueryServiceEndPoint.java b/rest/src/main/java/org/apache/unomi/rest/endpoints/QueryServiceEndPoint.java index 8b2b2a7c1..56168259d 100644 --- a/rest/src/main/java/org/apache/unomi/rest/endpoints/QueryServiceEndPoint.java +++ b/rest/src/main/java/org/apache/unomi/rest/endpoints/QueryServiceEndPoint.java @@ -28,8 +28,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.jws.WebMethod; -import javax.jws.WebService; import javax.servlet.http.HttpServletResponse; import javax.ws.rs.*; import javax.ws.rs.core.Context; @@ -40,7 +38,6 @@ /** * A JAX-RS endpoint to perform queries against context-server data. */ -@WebService @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) @CrossOriginResourceSharing( @@ -58,13 +55,10 @@ public class QueryServiceEndPoint { @Reference private LocalizationHelper localizationHelper; - @WebMethod(exclude = true) public void setQueryService(QueryService queryService) { this.queryService = queryService; } - - @WebMethod(exclude = true) public void setLocalizationHelper(LocalizationHelper localizationHelper) { this.localizationHelper = localizationHelper; } diff --git a/rest/src/main/java/org/apache/unomi/rest/endpoints/RulesServiceEndPoint.java b/rest/src/main/java/org/apache/unomi/rest/endpoints/RulesServiceEndPoint.java index f204a3929..657ea7bc2 100644 --- a/rest/src/main/java/org/apache/unomi/rest/endpoints/RulesServiceEndPoint.java +++ b/rest/src/main/java/org/apache/unomi/rest/endpoints/RulesServiceEndPoint.java @@ -29,8 +29,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.jws.WebMethod; -import javax.jws.WebService; import javax.ws.rs.*; import javax.ws.rs.core.MediaType; import java.util.Map; @@ -39,7 +37,6 @@ /** * A JAX-RS endpoint to manage {@link Rule}s. */ -@WebService @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) @CrossOriginResourceSharing( @@ -59,7 +56,6 @@ public RulesServiceEndPoint() { LOGGER.info("Initializing rule service endpoint..."); } - @WebMethod(exclude=true) public void setRulesService(RulesService rulesService) { this.rulesService = rulesService; } diff --git a/rest/src/main/java/org/apache/unomi/rest/endpoints/ScopeServiceEndPoint.java b/rest/src/main/java/org/apache/unomi/rest/endpoints/ScopeServiceEndPoint.java index a9dc82041..6ec5a054a 100644 --- a/rest/src/main/java/org/apache/unomi/rest/endpoints/ScopeServiceEndPoint.java +++ b/rest/src/main/java/org/apache/unomi/rest/endpoints/ScopeServiceEndPoint.java @@ -25,15 +25,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.jws.WebMethod; -import javax.jws.WebService; -import javax.ws.rs.Consumes; -import javax.ws.rs.DELETE; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; +import javax.ws.rs.*; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import java.util.List; @@ -41,7 +33,6 @@ /** * A JAX-RS endpoint to manage {@link org.apache.unomi.api.Scope}s. */ -@WebService @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) @CrossOriginResourceSharing(allowAllOrigins = true, allowCredentials = true) @@ -58,7 +49,6 @@ public ScopeServiceEndPoint() { LOGGER.info("Initializing scope service endpoint..."); } - @WebMethod(exclude = true) public void setScopeService(ScopeService scopeService) { this.scopeService = scopeService; } diff --git a/rest/src/main/java/org/apache/unomi/rest/endpoints/ScoringServiceEndPoint.java b/rest/src/main/java/org/apache/unomi/rest/endpoints/ScoringServiceEndPoint.java index 2c4dda495..471e419e0 100644 --- a/rest/src/main/java/org/apache/unomi/rest/endpoints/ScoringServiceEndPoint.java +++ b/rest/src/main/java/org/apache/unomi/rest/endpoints/ScoringServiceEndPoint.java @@ -30,8 +30,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.jws.WebMethod; -import javax.jws.WebService; import javax.ws.rs.*; import javax.ws.rs.core.MediaType; import java.util.List; @@ -39,7 +37,6 @@ /** * A JAX-RS endpoint to manage {@link Scoring}s */ -@WebService @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) @CrossOriginResourceSharing( @@ -59,7 +56,6 @@ public ScoringServiceEndPoint() { LOGGER.info("Initializing scoring service endpoint..."); } - @WebMethod(exclude = true) public void setSegmentService(SegmentService segmentService) { this.segmentService = segmentService; } diff --git a/rest/src/main/java/org/apache/unomi/rest/endpoints/SegmentServiceEndPoint.java b/rest/src/main/java/org/apache/unomi/rest/endpoints/SegmentServiceEndPoint.java index d987f2b03..24f4d8878 100644 --- a/rest/src/main/java/org/apache/unomi/rest/endpoints/SegmentServiceEndPoint.java +++ b/rest/src/main/java/org/apache/unomi/rest/endpoints/SegmentServiceEndPoint.java @@ -30,8 +30,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.jws.WebMethod; -import javax.jws.WebService; import javax.ws.rs.*; import javax.ws.rs.core.MediaType; import java.util.List; @@ -39,7 +37,6 @@ /** * A JAX-RS endpoint to manage {@link Segment}s. */ -@WebService @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) @CrossOriginResourceSharing( @@ -59,7 +56,6 @@ public SegmentServiceEndPoint() { LOGGER.info("Initializing segment service endpoint..."); } - @WebMethod(exclude=true) public void setSegmentService(SegmentService segmentService) { this.segmentService = segmentService; } diff --git a/rest/src/main/java/org/apache/unomi/rest/endpoints/TestEndPoint.java b/rest/src/main/java/org/apache/unomi/rest/endpoints/TestEndPoint.java new file mode 100644 index 000000000..ea013e12d --- /dev/null +++ b/rest/src/main/java/org/apache/unomi/rest/endpoints/TestEndPoint.java @@ -0,0 +1,50 @@ +/* + * 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. + */ +package org.apache.unomi.rest.endpoints; + +import org.apache.cxf.rs.security.cors.CrossOriginResourceSharing; +import org.osgi.service.component.annotations.Component; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; + +/** + * @author Jerome Blanchard + */ +@Produces(MediaType.TEXT_PLAIN + ";charset=UTF-8") +@Path("/test") +@CrossOriginResourceSharing(allowAllOrigins = true, allowCredentials = true) +@Component(service = TestEndPoint.class, property = "osgi.jaxrs.resource=true") +public class TestEndPoint { + + private static final Logger LOGGER = LoggerFactory.getLogger(TestEndPoint.class.getName()); + + public TestEndPoint() { + LOGGER.info("TestEndPoint initialized."); + } + + @GET + @Path("/ping") + public String ping() { + LOGGER.info("Ping received."); + return "pong"; + } +} diff --git a/rest/src/main/java/org/apache/unomi/rest/endpoints/UserListServiceEndPoint.java b/rest/src/main/java/org/apache/unomi/rest/endpoints/UserListServiceEndPoint.java index 910f7564f..bbb12496f 100644 --- a/rest/src/main/java/org/apache/unomi/rest/endpoints/UserListServiceEndPoint.java +++ b/rest/src/main/java/org/apache/unomi/rest/endpoints/UserListServiceEndPoint.java @@ -30,8 +30,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.jws.WebMethod; -import javax.jws.WebService; import javax.ws.rs.*; import javax.ws.rs.core.MediaType; import java.util.List; @@ -39,7 +37,6 @@ /** * A JAX-RS endpoint to manage {@link UserList}s. */ -@WebService @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) @CrossOriginResourceSharing( @@ -59,7 +56,6 @@ public UserListServiceEndPoint() { LOGGER.info("Initializing user lists service endpoint..."); } - @WebMethod(exclude=true) public void setUserListService(UserListService userListService) { this.userListService = userListService; } diff --git a/rest/src/main/java/org/apache/unomi/rest/exception/RuntimeExceptionMapper.java b/rest/src/main/java/org/apache/unomi/rest/exception/RuntimeExceptionMapper.java index 69cb70813..c505d57d4 100644 --- a/rest/src/main/java/org/apache/unomi/rest/exception/RuntimeExceptionMapper.java +++ b/rest/src/main/java/org/apache/unomi/rest/exception/RuntimeExceptionMapper.java @@ -16,7 +16,7 @@ */ package org.apache.unomi.rest.exception; -import org.apache.commons.lang.ArrayUtils; +import org.apache.commons.lang3.ArrayUtils; import org.osgi.service.component.annotations.Component; import org.slf4j.Logger; import org.slf4j.LoggerFactory; 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 1f49acd13..1ec0c2a36 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 @@ -27,6 +27,7 @@ import org.apache.cxf.jaxrs.openapi.OpenApiFeature; import org.apache.cxf.jaxrs.security.SimpleAuthorizingFilter; import org.apache.cxf.message.Message; +import org.apache.cxf.rs.security.cors.CrossOriginResourceSharingFilter; import org.apache.unomi.api.ContextRequest; import org.apache.unomi.api.EventsCollectorRequest; import org.apache.unomi.api.services.ConfigSharingService; @@ -56,6 +57,7 @@ import javax.xml.namespace.QName; import java.util.*; import java.util.concurrent.CopyOnWriteArrayList; +import java.util.stream.Collectors; @Component public class RestServer { @@ -166,6 +168,7 @@ public void deactivate() throws Exception { } private synchronized void refreshServer() { + LOGGER.info("Refreshing JAX RS server..."); long now = System.currentTimeMillis(); LOGGER.info("Time (millis) since last update: {}", now - timeOfLastUpdate); if (now - timeOfLastUpdate < startupDelay) { @@ -204,14 +207,13 @@ public void run() { desers.put(ContextRequest.class, new ContextRequestDeserializer(schemaService)); desers.put(EventsCollectorRequest.class, new EventsCollectorRequestDeserializer(schemaService)); - // Build the server ObjectMapper objectMapper = new org.apache.unomi.persistence.spi.CustomObjectMapper(desers); JAXRSServerFactoryBean jaxrsServerFactoryBean = new JAXRSServerFactoryBean(); jaxrsServerFactoryBean.setAddress("/"); jaxrsServerFactoryBean.setBus(serverBus); jaxrsServerFactoryBean.setProvider(new JacksonJaxbJsonProvider(objectMapper, JacksonJaxbJsonProvider.DEFAULT_ANNOTATIONS)); - jaxrsServerFactoryBean.setProvider(new org.apache.cxf.rs.security.cors.CrossOriginResourceSharingFilter()); + jaxrsServerFactoryBean.setProvider(new CrossOriginResourceSharingFilter()); jaxrsServerFactoryBean.setProvider(new RetroCompatibilityParamConverterProvider(objectMapper)); // Authentication filter (used for authenticating user from request) @@ -233,8 +235,7 @@ public void run() { openApiFeature.setLicense("Apache 2.0 License"); openApiFeature.setLicenseUrl("http://www.apache.org/licenses/LICENSE-2.0.html"); openApiFeature.setScan(false); - openApiFeature.setUseContextBasedConfig( - true); //Set resourceClasses = serviceBeans.stream().map(service -> service.getClass().getName()).collect(toSet()); + openApiFeature.setUseContextBasedConfig(true); OpenApiCustomizer customizer = new OpenApiCustomizer(); customizer.setDynamicBasePath(true); openApiFeature.setCustomizer(customizer); diff --git a/samples/graphql-providers-feature/pom.xml b/samples/graphql-providers-feature/pom.xml index 7a6475aaf..bb4249c70 100644 --- a/samples/graphql-providers-feature/pom.xml +++ b/samples/graphql-providers-feature/pom.xml @@ -17,35 +17,43 @@ --> + 4.0.0 - samples org.apache.unomi - 2.7.0-SNAPSHOT + samples + 3.0.0-SNAPSHOT - graphql-providers-sample-feature Apache Unomi :: Samples :: Graphql Providers :: Karaf Feature This is a simple Apache Unomi plugin. - 4.0.0 - feature + pom + + + + + org.apache.unomi + unomi-bom + ${project.version} + pom + import + + + org.apache.unomi unomi-api - ${project.version} compile org.apache.unomi cdp-graphql-api-impl - ${project.version} compile org.apache.unomi graphql-providers-sample - ${project.version} compile @@ -61,13 +69,23 @@ org.apache.karaf.tooling karaf-maven-plugin - ${version.karaf} + ${karaf.version} true 80 true true + true + + + generate-features + generate-resources + + features-generate-descriptor + + + diff --git a/samples/graphql-providers/pom.xml b/samples/graphql-providers/pom.xml index 0d9fc89b2..4fc6aac93 100644 --- a/samples/graphql-providers/pom.xml +++ b/samples/graphql-providers/pom.xml @@ -17,47 +17,56 @@ --> + 4.0.0 - samples org.apache.unomi - 2.7.0-SNAPSHOT + samples + 3.0.0-SNAPSHOT - graphql-providers-sample Apache Unomi :: Samples :: Graphql Providers This is a simple Apache Unomi plugin. - 4.0.0 bundle + + + + org.apache.unomi + unomi-bom + ${project.version} + pom + import + + + + org.apache.unomi unomi-api - ${project.version} provided org.apache.unomi cdp-graphql-api-impl - ${project.version} - provided - - - io.github.graphql-java - graphql-java-annotations - ${graphql.java.annotations.version} provided + org.osgi osgi.enterprise - 6.0.0 provided org.osgi osgi.core - 6.0.0 + provided + + + + io.github.graphql-java + graphql-java-annotations + ${graphql.java.annotations.version} provided diff --git a/samples/groovy-actions/pom.xml b/samples/groovy-actions/pom.xml index c9f07a5d1..68cf87550 100644 --- a/samples/groovy-actions/pom.xml +++ b/samples/groovy-actions/pom.xml @@ -19,21 +19,31 @@ 4.0.0 - samples org.apache.unomi - 2.7.0-SNAPSHOT + samples + 3.0.0-SNAPSHOT - test-groovy-action-sample Apache Unomi :: Samples :: Test Groovy Action - bundle This is a simple Apache Unomi plugin that demonstrate how to define and use a Groovy Action + bundle + + + + + org.apache.unomi + unomi-bom + ${project.version} + pom + import + + + org.apache.unomi unomi-api - ${project.version} provided diff --git a/samples/login-integration/pom.xml b/samples/login-integration/pom.xml index 5dde3922d..5ccc86689 100644 --- a/samples/login-integration/pom.xml +++ b/samples/login-integration/pom.xml @@ -19,21 +19,31 @@ 4.0.0 - samples org.apache.unomi - 2.7.0-SNAPSHOT + samples + 3.0.0-SNAPSHOT - login-integration-sample Apache Unomi :: Samples :: External Login plugin - bundle This is a simple Apache Unomi plugin. + bundle + + + + + org.apache.unomi + unomi-bom + ${project.version} + pom + import + + + org.apache.unomi unomi-api - ${project.version} provided diff --git a/samples/pom.xml b/samples/pom.xml index 2ae966fd2..9c6c1c720 100644 --- a/samples/pom.xml +++ b/samples/pom.xml @@ -16,20 +16,16 @@ ~ limitations under the License. --> + 4.0.0 unomi-root org.apache.unomi - 2.7.0-SNAPSHOT + 3.0.0-SNAPSHOT - 4.0.0 - - - 8.0 - - samples Apache Unomi :: Samples pom + tweet-button-plugin login-integration @@ -38,5 +34,4 @@ graphql-providers graphql-providers-feature - diff --git a/samples/trainingplugin/pom.xml b/samples/trainingplugin/pom.xml index 8b648f1e2..476f4ac40 100644 --- a/samples/trainingplugin/pom.xml +++ b/samples/trainingplugin/pom.xml @@ -16,22 +16,33 @@ ~ limitations under the License. --> + 4.0.0 - samples org.apache.unomi - 2.7.0-SNAPSHOT + samples + 3.0.0-SNAPSHOT training-plugin Apache Unomi :: Samples :: Training plugin - bundle This is a simple Apache Unomi plugin. - 4.0.0 + bundle + + + + + org.apache.unomi + unomi-bom + ${project.version} + pom + import + + + org.apache.unomi unomi-api - 2.7.0-SNAPSHOT provided @@ -43,7 +54,6 @@ true - diff --git a/samples/trainingplugin/src/main/resources/OSGI-INF/blueprint/blueprint.xml b/samples/trainingplugin/src/main/resources/OSGI-INF/blueprint/blueprint.xml index 01ae5ab93..7a536af12 100644 --- a/samples/trainingplugin/src/main/resources/OSGI-INF/blueprint/blueprint.xml +++ b/samples/trainingplugin/src/main/resources/OSGI-INF/blueprint/blueprint.xml @@ -18,7 +18,7 @@ + xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd"> diff --git a/samples/tweet-button-plugin/pom.xml b/samples/tweet-button-plugin/pom.xml index 6664bb79b..02de7d9b6 100644 --- a/samples/tweet-button-plugin/pom.xml +++ b/samples/tweet-button-plugin/pom.xml @@ -19,21 +19,31 @@ 4.0.0 - samples org.apache.unomi - 2.7.0-SNAPSHOT + samples + 3.0.0-SNAPSHOT - tweet-button-plugin Apache Unomi :: Samples :: Tweet Button plugin - bundle This is a simple Apache Unomi plugin. + bundle + + + + + org.apache.unomi + unomi-bom + ${project.version} + pom + import + + + org.apache.unomi unomi-api - ${project.version} provided diff --git a/samples/tweet-button-plugin/src/main/resources/OSGI-INF/blueprint/blueprint.xml b/samples/tweet-button-plugin/src/main/resources/OSGI-INF/blueprint/blueprint.xml index 0059ec7b1..9acae1583 100644 --- a/samples/tweet-button-plugin/src/main/resources/OSGI-INF/blueprint/blueprint.xml +++ b/samples/tweet-button-plugin/src/main/resources/OSGI-INF/blueprint/blueprint.xml @@ -18,7 +18,7 @@ + xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd"> diff --git a/scripting/pom.xml b/scripting/pom.xml index a4569828a..800f0481c 100644 --- a/scripting/pom.xml +++ b/scripting/pom.xml @@ -18,61 +18,74 @@ 4.0.0 - org.apache.unomi unomi-root - 2.7.0-SNAPSHOT + 3.0.0-SNAPSHOT - unomi-scripting Apache Unomi :: Scripting Services Scripting services used in the Apache Unomi Context server bundle + + + + org.apache.unomi + unomi-bom + ${project.version} + pom + import + + + + - junit - junit - test + org.osgi + osgi.core + provided + + + org.slf4j + slf4j-api + provided + + + com.fasterxml.jackson.core + jackson-databind + provided - org.mvel mvel2 - org.apache.commons commons-lang3 + provided + + + org.slf4j + slf4j-api + provided + + junit + junit + test + org.apache.unomi unomi-api - 2.7.0-SNAPSHOT test - org.slf4j slf4j-simple - 1.7.36 test - - - org.osgi - osgi.core - provided - - - - com.fasterxml.jackson.core - jackson-databind - provided - - diff --git a/scripting/src/main/java/org/apache/unomi/scripting/ExpressionFilterFactory.java b/scripting/src/main/java/org/apache/unomi/scripting/ExpressionFilterFactory.java index 67bcc7abe..ec92882d9 100644 --- a/scripting/src/main/java/org/apache/unomi/scripting/ExpressionFilterFactory.java +++ b/scripting/src/main/java/org/apache/unomi/scripting/ExpressionFilterFactory.java @@ -23,7 +23,7 @@ public interface ExpressionFilterFactory { /** * Retrieve an expression filter for the specified filterCollection identifier. - * @param filterCollection a filter collection identifier, typically something like "mvel", "ognl" + * @param filterCollection a filter collection identifier, typically something like "mvel" * @return an instance of a ExpressionFilter with the configuration retrieved for the specified collection identifier */ ExpressionFilter getExpressionFilter(String filterCollection); diff --git a/scripting/src/main/java/org/apache/unomi/scripting/SecureFilteringClassLoader.java b/scripting/src/main/java/org/apache/unomi/scripting/SecureFilteringClassLoader.java index 4af57e1a3..6f59ca16f 100644 --- a/scripting/src/main/java/org/apache/unomi/scripting/SecureFilteringClassLoader.java +++ b/scripting/src/main/java/org/apache/unomi/scripting/SecureFilteringClassLoader.java @@ -22,7 +22,7 @@ /** * A class loader that uses a allow list and a deny list of classes that it will allow to resolve. This is useful for providing proper - * sandboxing to scripting engine such as MVEL, OGNL or Groovy. + * sandboxing to scripting engine such as MVEL or Groovy. */ public class SecureFilteringClassLoader extends ClassLoader { @@ -34,7 +34,7 @@ public class SecureFilteringClassLoader extends ClassLoader { static { String systemAllowedClasses = System.getProperty("org.apache.unomi.scripting.allow", - "org.apache.unomi.api.Event,org.apache.unomi.api.Profile,org.apache.unomi.api.Session,org.apache.unomi.api.Item,org.apache.unomi.api.CustomItem,ognl.*,java.lang.Object,java.util.Map,java.util.HashMap,java.lang.Integer,org.mvel2.*,java.lang.String"); + "org.apache.unomi.api.Event,org.apache.unomi.api.Profile,org.apache.unomi.api.Session,org.apache.unomi.api.Item,org.apache.unomi.api.CustomItem,java.lang.Object,java.util.Map,java.util.HashMap,java.lang.Integer,org.mvel2.*,java.lang.String"); if (systemAllowedClasses != null) { if ("all".equals(systemAllowedClasses.trim())) { defaultAllowedClasses = null; diff --git a/scripting/src/main/java/org/apache/unomi/scripting/internal/ExpressionFilterFactoryImpl.java b/scripting/src/main/java/org/apache/unomi/scripting/internal/ExpressionFilterFactoryImpl.java index bb98e6541..cdfd6f4d9 100644 --- a/scripting/src/main/java/org/apache/unomi/scripting/internal/ExpressionFilterFactoryImpl.java +++ b/scripting/src/main/java/org/apache/unomi/scripting/internal/ExpressionFilterFactoryImpl.java @@ -56,7 +56,7 @@ public ExpressionFilterFactoryImpl() { } public void init() { - String initialFilterCollections = System.getProperty("org.apache.unomi.scripting.filter.collections", "mvel,ognl"); + String initialFilterCollections = System.getProperty("org.apache.unomi.scripting.filter.collections", "mvel"); String[] initialFilterCollectionParts = initialFilterCollections.split(","); if (initialFilterCollectionParts != null) { for (String initialFilterCollection : initialFilterCollectionParts) { diff --git a/scripting/src/main/resources/OSGI-INF/blueprint/blueprint.xml b/scripting/src/main/resources/OSGI-INF/blueprint/blueprint.xml index f4a72889a..169edaacf 100644 --- a/scripting/src/main/resources/OSGI-INF/blueprint/blueprint.xml +++ b/scripting/src/main/resources/OSGI-INF/blueprint/blueprint.xml @@ -17,10 +17,8 @@ --> + xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd"> diff --git a/services/pom.xml b/services/pom.xml index c9fb46411..577590bcc 100644 --- a/services/pom.xml +++ b/services/pom.xml @@ -18,78 +18,78 @@ 4.0.0 - org.apache.unomi unomi-root - 2.7.0-SNAPSHOT + 3.0.0-SNAPSHOT - unomi-services Apache Unomi :: Core Services Apache Unomi Context Server Core Services bundle + + + + org.apache.unomi + unomi-bom + ${project.version} + pom + import + + + + org.apache.unomi unomi-api - ${project.version} provided - - org.osgi - osgi.core + org.apache.unomi + unomi-metrics provided - - org.osgi - osgi.cmpn + org.apache.unomi + unomi-common provided - org.apache.unomi unomi-persistence-spi - ${project.version} provided org.apache.unomi unomi-lifecycle-watcher - ${project.version} provided - - javax.servlet - javax.servlet-api + org.apache.unomi + unomi-scripting provided - org.apache.cxf - cxf-rt-frontend-jaxrs + org.osgi + osgi.core provided - org.apache.cxf - cxf-rt-transports-http + org.osgi + org.osgi.service.cm provided - - net.jodah - failsafe - 2.4.0 + javax.servlet + javax.servlet-api + provided - - com.github.fge + com.github.java-json-tools json-patch - ${json-patch.version} provided @@ -102,7 +102,6 @@ jackson-databind provided - com.fasterxml.jackson.module jackson-module-jaxb-annotations @@ -112,52 +111,39 @@ org.apache.commons commons-lang3 + provided commons-beanutils commons-beanutils - - - - org.apache.unomi - unomi-metrics - ${project.version} provided - - org.apache.unomi - unomi-common - ${project.version} + org.slf4j + slf4j-api provided com.github.seancfoley ipaddress - 4.3.0 + + + net.jodah + failsafe - + junit junit - 4.11 test org.slf4j slf4j-simple - 1.7.36 test - - - org.apache.unomi - unomi-scripting - ${project.version} - provided - diff --git a/services/src/main/resources/OSGI-INF/blueprint/blueprint.xml b/services/src/main/resources/OSGI-INF/blueprint/blueprint.xml index bf64a77d7..36218d094 100644 --- a/services/src/main/resources/OSGI-INF/blueprint/blueprint.xml +++ b/services/src/main/resources/OSGI-INF/blueprint/blueprint.xml @@ -17,10 +17,10 @@ --> + xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd + http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.3.0 https://aries.apache.org/schemas/blueprint-cm/blueprint-cm-1.3.0.xsd"> @@ -67,8 +67,7 @@ - + diff --git a/setenv.sh b/setenv.sh index 8a14e8d34..dd042c07f 100755 --- a/setenv.sh +++ b/setenv.sh @@ -19,6 +19,6 @@ ################################################################################ export UNOMI_VERSION=`mvn org.apache.maven.plugins:maven-help-plugin:2.1.1:evaluate -Dexpression=project.version | grep -Ev '(^\[|Download\w+:)'` echo Detected project version=$UNOMI_VERSION -export KARAF_VERSION=3.0.2 +export KARAF_VERSION=4.4.8 # Uncomment the following line if you need Apache Unomi to start automatically at the first start # export KARAF_OPTS="-Dunomi.autoStart=true" diff --git a/tools/pom.xml b/tools/pom.xml index 41b1b3e01..a6411b948 100644 --- a/tools/pom.xml +++ b/tools/pom.xml @@ -17,16 +17,14 @@ --> 4.0.0 - org.apache.unomi unomi-root - 2.7.0-SNAPSHOT + 3.0.0-SNAPSHOT - unomi-tools Apache Unomi :: Tools - Apache Unomi Context Server tools + Apache Unomi Context Server commands pom diff --git a/tools/shell-commands/pom.xml b/tools/shell-commands/pom.xml index 707c9f806..4cb1fd39b 100644 --- a/tools/shell-commands/pom.xml +++ b/tools/shell-commands/pom.xml @@ -17,26 +17,34 @@ --> 4.0.0 - unomi-tools org.apache.unomi - 2.7.0-SNAPSHOT + 3.0.0-SNAPSHOT - shell-commands Apache Unomi :: Tools :: Shell commands Provides the shell commands to interact with Apache Unomi Context Server bundle + + + + org.apache.unomi + unomi-bom + ${project.version} + pom + import + + + + org.apache.karaf.shell org.apache.karaf.shell.console - ${version.karaf} provided - org.apache.httpcomponents httpclient-osgi @@ -45,68 +53,74 @@ - org.apache.commons - commons-lang3 + org.osgi + osgi.core + provided - - commons-io - commons-io + org.osgi + org.osgi.service.http provided - - org.json - json + org.osgi + org.osgi.service.useradmin + 1.1.0 provided - org.osgi - osgi.core + org.osgi.service.component provided - org.osgi - osgi.cmpn + org.osgi.service.component.annotations provided - junit - junit - 4.13.2 - test + org.apache.commons + commons-lang3 + provided - - org.apache.groovy - groovy - ${groovy.version} + commons-io + commons-io provided - - org.apache.groovy - groovy-json - ${groovy.version} + org.json + json provided - com.fasterxml.jackson.core jackson-core - ${version.jackson.core} provided - com.fasterxml.jackson.core jackson-databind - ${version.jackson.databind} provided + + + org.apache.groovy + groovy + provided + + + org.apache.groovy + groovy-json + provided + + + + junit + junit + test + @@ -116,10 +130,6 @@ maven-bundle-plugin - - sun.nio.ch;resolution:=optional, - * - org.apache.unomi.shell.migration.utils, org.apache.unomi.shell.migration.service, diff --git a/tools/shell-dev-commands/pom.xml b/tools/shell-dev-commands/pom.xml index d47ab9d75..df3ba175a 100644 --- a/tools/shell-dev-commands/pom.xml +++ b/tools/shell-dev-commands/pom.xml @@ -17,93 +17,93 @@ --> 4.0.0 - unomi-tools org.apache.unomi - 2.7.0-SNAPSHOT + 3.0.0-SNAPSHOT - shell-dev-commands Apache Unomi :: Tools :: Shell Dev commands Provides the shell developer commands to interact with Apache Unomi Context Server bundle + + + + org.apache.unomi + unomi-bom + ${project.version} + pom + import + + + + - org.apache.karaf.shell - org.apache.karaf.shell.console - ${version.karaf} + org.apache.unomi + unomi-api provided - - org.apache.karaf.shell - org.apache.karaf.shell.table - ${version.karaf} + org.apache.unomi + unomi-persistence-spi provided - org.apache.unomi - unomi-api - ${project.version} + unomi-common provided - com.fasterxml.jackson.core - jackson-core + org.osgi + osgi.core provided - com.fasterxml.jackson.core - jackson-databind + org.osgi + org.osgi.service.component.annotations provided - org.apache.unomi - unomi-persistence-spi - ${project.version} + org.apache.karaf.shell + org.apache.karaf.shell.console provided - - org.apache.httpcomponents - httpclient-osgi - bundle + org.apache.karaf.shell + org.apache.karaf.shell.table provided - org.apache.commons - commons-lang3 + com.fasterxml.jackson.core + jackson-core + provided - - org.osgi - osgi.core + com.fasterxml.jackson.core + jackson-databind provided - org.osgi - osgi.cmpn + org.apache.httpcomponents + httpclient-osgi + bundle provided - - org.apache.unomi - unomi-common - ${project.version} + org.apache.commons + commons-lang3 provided junit junit - 4.13.2 test diff --git a/wab/pom.xml b/wab/pom.xml index f72628870..0474a14fc 100644 --- a/wab/pom.xml +++ b/wab/pom.xml @@ -18,88 +18,135 @@ 4.0.0 - org.apache.unomi unomi-root - 2.7.0-SNAPSHOT + 3.0.0-SNAPSHOT - unomi-wab Apache Unomi :: Core Web Application Apache Unomi Context Server Core Web application bundle + + + + org.apache.unomi + unomi-bom + ${project.version} + pom + import + + + + - javax.servlet - javax.servlet-api + org.apache.unomi + unomi-api provided - commons-io - commons-io + org.apache.unomi + unomi-persistence-spi + provided + - org.apache.commons - commons-lang3 + org.osgi + org.osgi.framework + provided - org.apache.unomi - unomi-api - ${project.version} + org.osgi + org.osgi.util.tracker provided - org.apache.unomi - unomi-persistence-spi - ${project.version} + org.osgi + org.osgi.service.component provided - - com.fasterxml.jackson.core - jackson-databind - provided + org.osgi + org.osgi.service.component.annotations + provided - com.fasterxml.jackson.dataformat - jackson-dataformat-yaml - ${version.jackson.core} + org.osgi + org.osgi.service.metatype provided - org.yaml - snakeyaml - 2.2 + org.osgi + org.osgi.service.metatype.annotations + provided - - com.opencsv - opencsv - 3.10 + javax.servlet + javax.servlet-api + provided - commons-beanutils - commons-beanutils + com.fasterxml.jackson.core + jackson-databind + provided - - - com.fasterxml.jackson.core - jackson-annotations - provided + com.fasterxml.jackson.dataformat + jackson-dataformat-yaml + provided + + + com.fasterxml.jackson.core + jackson-annotations + provided - com.fasterxml.jackson.core - jackson-core - provided + com.fasterxml.jackson.core + jackson-core + provided org.ops4j.pax.web pax-web-api provided + + commons-io + commons-io + provided + + + commons-collections + commons-collections + provided + + + org.apache.commons + commons-lang3 + provided + + + org.yaml + snakeyaml + provided + + + commons-beanutils + commons-beanutils + provided + + + org.slf4j + slf4j-api + provided + + + + com.opencsv + opencsv + @@ -113,15 +160,6 @@ <_wab>src/main/webapp *;scope=compile|runtime WEB-INF/lib - - org.apache.unomi.api, - org.apache.unomi.api.conditions, - org.apache.unomi.api.segments, - org.apache.unomi.api.rules, - org.apache.unomi.api.query, - sun.nio.ch;resolution:=optional, - * - / diff --git a/wab/src/main/java/org/apache/unomi/web/ClientServlet.java b/wab/src/main/java/org/apache/unomi/web/ClientServlet.java index 80a0a1910..94850e6ad 100644 --- a/wab/src/main/java/org/apache/unomi/web/ClientServlet.java +++ b/wab/src/main/java/org/apache/unomi/web/ClientServlet.java @@ -17,12 +17,12 @@ package org.apache.unomi.web; -import org.apache.unomi.api.services.ConfigSharingService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.servlet.ServletConfig; import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -33,26 +33,20 @@ * A servlet filter to serve a context-specific Javascript containing the current request context object. */ @Deprecated +@WebServlet(name = "ClientServlet", urlPatterns = "/client/*") public class ClientServlet extends HttpServlet { private static final Logger LOGGER = LoggerFactory.getLogger(ClientServlet.class.getName()); - private static final long serialVersionUID = 2928875960103325238L; - - private String allowedProfileDownloadFormats; - - private ConfigSharingService configSharingService; @Override public void init(ServletConfig config) throws ServletException { super.init(config); - configSharingService.setProperty("allowedProfileDownloadFormats", allowedProfileDownloadFormats); LOGGER.info("ClientServlet initialized."); } @Override public void destroy() { super.destroy(); - LOGGER.info("Client servlet shutdown."); } @@ -61,11 +55,4 @@ protected void service(HttpServletRequest request, HttpServletResponse response) HttpServletRequestForwardWrapper.forward(request, response); } - public void setConfigSharingService(ConfigSharingService configSharingService) { - this.configSharingService = configSharingService; - } - - public void setAllowedProfileDownloadFormats(String allowedProfileDownloadFormats) { - this.allowedProfileDownloadFormats = allowedProfileDownloadFormats; - } } diff --git a/wab/src/main/java/org/apache/unomi/web/ContextServlet.java b/wab/src/main/java/org/apache/unomi/web/ContextServlet.java index 785a80a24..6c04f60b6 100644 --- a/wab/src/main/java/org/apache/unomi/web/ContextServlet.java +++ b/wab/src/main/java/org/apache/unomi/web/ContextServlet.java @@ -17,12 +17,12 @@ package org.apache.unomi.web; -import org.apache.unomi.api.services.ConfigSharingService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.servlet.ServletConfig; import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -33,28 +33,19 @@ * A servlet filter to serve a context-specific Javascript containing the current request context object. */ @Deprecated +@WebServlet(name = "ContextServlet", urlPatterns = {"/context.json", "/context.js"}) public class ContextServlet extends HttpServlet { - private static final long serialVersionUID = 2928875830103325238L; - private static final Logger LOGGER = LoggerFactory.getLogger(ContextServlet.class.getName()); - - private static final int MAX_COOKIE_AGE_IN_SECONDS = 60 * 60 * 24 * 365; // 1 year - private String profileIdCookieName = "context-profile-id"; - private String profileIdCookieDomain; - private int profileIdCookieMaxAgeInSeconds = MAX_COOKIE_AGE_IN_SECONDS; - private boolean profileIdCookieHttpOnly = false; - private int publicPostRequestBytesLimit = 200000; + private static final Logger LOGGER = LoggerFactory.getLogger(ContextServlet.class.getName()); - private ConfigSharingService configSharingService; + public ContextServlet() { + super(); + LOGGER.info("ContextServlet created."); + } @Override public void init(ServletConfig config) throws ServletException { super.init(config); - configSharingService.setProperty("profileIdCookieName", profileIdCookieName); - configSharingService.setProperty("profileIdCookieDomain", profileIdCookieDomain); - configSharingService.setProperty("profileIdCookieMaxAgeInSeconds", profileIdCookieMaxAgeInSeconds); - configSharingService.setProperty("profileIdCookieHttpOnly", profileIdCookieHttpOnly); - configSharingService.setProperty("publicPostRequestBytesLimit", publicPostRequestBytesLimit); LOGGER.info("ContextServlet initialized."); } @@ -68,27 +59,4 @@ public void destroy() { LOGGER.info("Context servlet shutdown."); } - public void setProfileIdCookieDomain(String profileIdCookieDomain) { - this.profileIdCookieDomain = profileIdCookieDomain; - } - - public void setProfileIdCookieName(String profileIdCookieName) { - this.profileIdCookieName = profileIdCookieName; - } - - public void setProfileIdCookieMaxAgeInSeconds(int profileIdCookieMaxAgeInSeconds) { - this.profileIdCookieMaxAgeInSeconds = profileIdCookieMaxAgeInSeconds; - } - - public void setProfileIdCookieHttpOnly(boolean profileIdCookieHttpOnly) { - this.profileIdCookieHttpOnly = profileIdCookieHttpOnly; - } - - public void setPublicPostRequestBytesLimit(int publicPostRequestBytesLimit) { - this.publicPostRequestBytesLimit = publicPostRequestBytesLimit; - } - - public void setConfigSharingService(ConfigSharingService configSharingService) { - this.configSharingService = configSharingService; - } } diff --git a/wab/src/main/java/org/apache/unomi/web/EventsCollectorServlet.java b/wab/src/main/java/org/apache/unomi/web/EventsCollectorServlet.java index 14ca67c3c..bb72b2cb2 100644 --- a/wab/src/main/java/org/apache/unomi/web/EventsCollectorServlet.java +++ b/wab/src/main/java/org/apache/unomi/web/EventsCollectorServlet.java @@ -22,6 +22,7 @@ import javax.servlet.ServletConfig; import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -31,8 +32,9 @@ * @deprecated this servlet is now deprecated, because it have been migrated to REST endpoint. */ @Deprecated +@WebServlet(name = "EventsCollectorServlet", urlPatterns = "/eventcollector") public class EventsCollectorServlet extends HttpServlet { - private static final long serialVersionUID = 2008054804885122957L; + private static final Logger LOGGER = LoggerFactory.getLogger(EventsCollectorServlet.class.getName()); @Override diff --git a/wab/src/main/java/org/apache/unomi/web/WebConfig.java b/wab/src/main/java/org/apache/unomi/web/WebConfig.java new file mode 100644 index 000000000..42d927d45 --- /dev/null +++ b/wab/src/main/java/org/apache/unomi/web/WebConfig.java @@ -0,0 +1,116 @@ +/* + * 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. + */ +package org.apache.unomi.web; + +import org.apache.unomi.api.services.ConfigSharingService; +import org.osgi.service.component.annotations.Activate; +import org.osgi.service.component.annotations.Component; +import org.osgi.service.component.annotations.Reference; +import org.osgi.service.metatype.annotations.AttributeDefinition; +import org.osgi.service.metatype.annotations.Designate; +import org.osgi.service.metatype.annotations.ObjectClassDefinition; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * @author Jerome Blanchard + */ +@Component(service = WebConfig.class, immediate = true, configurationPid = "org.apache.unomi.web") +@Designate(ocd = WebConfig.Config.class) +public class WebConfig { + + private static final Logger LOGGER = LoggerFactory.getLogger(WebConfig.class.getName()); + + private String contextserverDomain; + private String contexserverProfileIdCookieName; + private int contextserverProfileIdCookieMaxAgeInSeconds; + private boolean contextserverProfileIdCookieHttpOnly; + private String[] allowedProfileDownloadFormats; + private int publicPostRequestBytesLimit; + + @Reference + private ConfigSharingService configSharingService; + + @ObjectClassDefinition + public @interface Config { + + @AttributeDefinition + String contextserver_domain() default ""; + + @AttributeDefinition + String contexserver_profileIdCookieName() default "context-profile-id"; + + @AttributeDefinition + int contextserver_profileIdCookieMaxAgeInSeconds() default 31536000; + + @AttributeDefinition + boolean contextserver_profileIdCookieHttpOnly() default false; + + @AttributeDefinition + String[] allowed_profile_download_formats() default {"csv", "yaml", "json", "text"}; + + @AttributeDefinition + int public_post_request_bytes_limit() default 200000; + + } + + public WebConfig() { + LOGGER.info("WebConfig created."); + } + + @Activate + public void activate(Config config) { + this.contextserverDomain = config.contextserver_domain(); + this.contexserverProfileIdCookieName = config.contexserver_profileIdCookieName(); + this.contextserverProfileIdCookieMaxAgeInSeconds = config.contextserver_profileIdCookieMaxAgeInSeconds(); + this.contextserverProfileIdCookieHttpOnly = config.contextserver_profileIdCookieHttpOnly(); + this.allowedProfileDownloadFormats = config.allowed_profile_download_formats(); + this.publicPostRequestBytesLimit = config.public_post_request_bytes_limit(); + + configSharingService.setProperty("profileIdCookieName", contexserverProfileIdCookieName); + configSharingService.setProperty("profileIdCookieDomain", contextserverDomain); + configSharingService.setProperty("profileIdCookieMaxAgeInSeconds", contextserverProfileIdCookieMaxAgeInSeconds); + configSharingService.setProperty("profileIdCookieHttpOnly", contextserverProfileIdCookieHttpOnly); + configSharingService.setProperty("publicPostRequestBytesLimit", publicPostRequestBytesLimit); + configSharingService.setProperty("allowedProfileDownloadFormats", allowedProfileDownloadFormats); + LOGGER.info("WebConfig activated."); + } + + public String getContextserverDomain() { + return contextserverDomain; + } + + public String getContexserverProfileIdCookieName() { + return contexserverProfileIdCookieName; + } + + public int getContextserverProfileIdCookieMaxAgeInSeconds() { + return contextserverProfileIdCookieMaxAgeInSeconds; + } + + public boolean isContextserverProfileIdCookieHttpOnly() { + return contextserverProfileIdCookieHttpOnly; + } + + public String[] getAllowedProfileDownloadFormats() { + return allowedProfileDownloadFormats; + } + + public int getPublicPostRequestBytesLimit() { + return publicPostRequestBytesLimit; + } +} diff --git a/wab/src/main/resources/OSGI-INF/blueprint/blueprint.xml b/wab/src/main/resources/OSGI-INF/blueprint/blueprint.xml deleted file mode 100644 index 5437e3b49..000000000 --- a/wab/src/main/resources/OSGI-INF/blueprint/blueprint.xml +++ /dev/null @@ -1,99 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - javax.servlet.Servlet - javax.servlet.ServletConfig - java.io.Serializable - - - - - /context.json - /context.js - - - - - - - - - - javax.servlet.Servlet - javax.servlet.ServletConfig - java.io.Serializable - - - - - - - - - - - - - - javax.servlet.Servlet - javax.servlet.ServletConfig - java.io.Serializable - - - - - - -