Skip to content

Commit 0f7c883

Browse files
committed
#1650 provide WoT TM validation
* restructuring of "ditto-wot" module to enable re-usability of non-pekko/non-Ditto specifics * adding "validator" concept and first sample implementation (WIP) Signed-off-by: Thomas Jäckle <[email protected]>
1 parent 3aca212 commit 0f7c883

File tree

212 files changed

+5122
-1279
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

212 files changed

+5122
-1279
lines changed

base/model/src/main/java/org/eclipse/ditto/base/model/signals/commands/streaming/SubscribeForPersistedEvents.java

-5
Original file line numberDiff line numberDiff line change
@@ -384,11 +384,6 @@ protected void appendPayload(final JsonObjectBuilder jsonObjectBuilder,
384384
getFilter().ifPresent(theFilter -> jsonObjectBuilder.set(JsonFields.FILTER, theFilter));
385385
}
386386

387-
@Override
388-
public String getTypePrefix() {
389-
return TYPE_PREFIX;
390-
}
391-
392387
@Override
393388
public SubscribeForPersistedEvents setDittoHeaders(final DittoHeaders dittoHeaders) {
394389
return new SubscribeForPersistedEvents(entityId, resourcePath, fromHistoricalRevision, toHistoricalRevision,

base/service/pom.xml

+4
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,10 @@
3838
<groupId>org.eclipse.ditto</groupId>
3939
<artifactId>ditto-internal-utils-metrics</artifactId>
4040
</dependency>
41+
<dependency>
42+
<groupId>org.eclipse.ditto</groupId>
43+
<artifactId>ditto-internal-utils-metrics-service</artifactId>
44+
</dependency>
4145
<dependency>
4246
<groupId>org.eclipse.ditto</groupId>
4347
<artifactId>ditto-internal-utils-tracing</artifactId>

base/service/src/main/java/org/eclipse/ditto/base/service/DittoService.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@
4747
import org.eclipse.ditto.internal.utils.config.raw.RawConfigSupplier;
4848
import org.eclipse.ditto.internal.utils.health.status.StatusSupplierActor;
4949
import org.eclipse.ditto.internal.utils.metrics.config.MetricsConfig;
50-
import org.eclipse.ditto.internal.utils.metrics.prometheus.PrometheusReporterRoute;
50+
import org.eclipse.ditto.internal.utils.metrics.service.prometheus.PrometheusReporterRoute;
5151
import org.eclipse.ditto.internal.utils.tracing.DittoTracing;
5252
import org.slf4j.Logger;
5353
import org.slf4j.LoggerFactory;

bom/pom.xml

+39-2
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727

2828
<properties>
2929
<scala.version>2.13</scala.version> <!-- for scala libraries the scala version is used in their artifactId -->
30-
<scala.full.version>2.13.12</scala.full.version>
30+
<scala.full.version>2.13.14</scala.full.version>
3131
<scala-parser-combinators.version>1.1.2</scala-parser-combinators.version>
3232
<scala-java8-compat.version>1.0.2</scala-java8-compat.version>
3333

@@ -37,6 +37,7 @@
3737
<!-- ### Compile dependencies versions -->
3838
<minimal-json.version>0.9.5</minimal-json.version>
3939
<jackson-bom.version>2.16.1</jackson-bom.version>
40+
<json-schema-validator.version>1.4.0</json-schema-validator.version>
4041
<typesafe-config.version>1.4.3</typesafe-config.version>
4142
<ssl-config-core.version>0.6.1</ssl-config-core.version>
4243
<kafka-client.version>3.6.1</kafka-client.version>
@@ -75,7 +76,7 @@
7576
<janino.version>3.1.11</janino.version>
7677

7778
<!-- ### Metrics and Tracing -->
78-
<kamon.version>2.7.0</kamon.version>
79+
<kamon.version>2.7.1</kamon.version>
7980

8081
<jsr305.version>3.0.2</jsr305.version>
8182

@@ -130,6 +131,22 @@
130131
<scope>import</scope>
131132
</dependency>
132133

134+
<dependency>
135+
<groupId>com.networknt</groupId>
136+
<artifactId>json-schema-validator</artifactId>
137+
<version>${json-schema-validator.version}</version>
138+
<exclusions>
139+
<exclusion>
140+
<groupId>com.fasterxml.jackson.dataformat</groupId>
141+
<artifactId>jackson-dataformat-yaml</artifactId>
142+
</exclusion>
143+
<exclusion>
144+
<groupId>org.apache.commons</groupId>
145+
<artifactId>commons-lang3</artifactId>
146+
</exclusion>
147+
</exclusions>
148+
</dependency>
149+
133150
<dependency>
134151
<groupId>com.typesafe</groupId>
135152
<artifactId>config</artifactId>
@@ -538,11 +555,21 @@
538555
<artifactId>ditto-rql-query</artifactId>
539556
<version>${project.version}</version>
540557
</dependency>
558+
<dependency>
559+
<groupId>org.eclipse.ditto</groupId>
560+
<artifactId>ditto-wot-api</artifactId>
561+
<version>${project.version}</version>
562+
</dependency>
541563
<dependency>
542564
<groupId>org.eclipse.ditto</groupId>
543565
<artifactId>ditto-wot-model</artifactId>
544566
<version>${project.version}</version>
545567
</dependency>
568+
<dependency>
569+
<groupId>org.eclipse.ditto</groupId>
570+
<artifactId>ditto-wot-validation</artifactId>
571+
<version>${project.version}</version>
572+
</dependency>
546573
<dependency>
547574
<groupId>org.eclipse.ditto</groupId>
548575
<artifactId>ditto-wot-integration</artifactId>
@@ -616,6 +643,11 @@
616643
<artifactId>ditto-internal-utils-http</artifactId>
617644
<version>${project.version}</version>
618645
</dependency>
646+
<dependency>
647+
<groupId>org.eclipse.ditto</groupId>
648+
<artifactId>ditto-internal-utils-json</artifactId>
649+
<version>${project.version}</version>
650+
</dependency>
619651
<dependency>
620652
<groupId>org.eclipse.ditto</groupId>
621653
<artifactId>ditto-internal-utils-jwt</artifactId>
@@ -666,6 +698,11 @@
666698
<artifactId>ditto-internal-utils-metrics</artifactId>
667699
<version>${project.version}</version>
668700
</dependency>
701+
<dependency>
702+
<groupId>org.eclipse.ditto</groupId>
703+
<artifactId>ditto-internal-utils-metrics-service</artifactId>
704+
<version>${project.version}</version>
705+
</dependency>
669706
<dependency>
670707
<groupId>org.eclipse.ditto</groupId>
671708
<artifactId>ditto-internal-utils-extension</artifactId>

connectivity/service/pom.xml

+9-1
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,12 @@
1414
<project xmlns="http://maven.apache.org/POM/4.0.0"
1515
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
1616
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
17+
<modelVersion>4.0.0</modelVersion>
1718
<parent>
1819
<artifactId>ditto-connectivity</artifactId>
1920
<groupId>org.eclipse.ditto</groupId>
2021
<version>${revision}</version>
2122
</parent>
22-
<modelVersion>4.0.0</modelVersion>
2323

2424
<artifactId>ditto-connectivity-service</artifactId>
2525
<name>Eclipse Ditto :: Connectivity :: Service</name>
@@ -55,6 +55,10 @@
5555
<groupId>org.eclipse.ditto</groupId>
5656
<artifactId>ditto-wot-model</artifactId>
5757
</dependency>
58+
<dependency>
59+
<groupId>org.eclipse.ditto</groupId>
60+
<artifactId>ditto-wot-validation</artifactId>
61+
</dependency>
5862

5963
<dependency>
6064
<groupId>org.eclipse.ditto</groupId>
@@ -69,6 +73,10 @@
6973
<groupId>org.eclipse.ditto</groupId>
7074
<artifactId>ditto-internal-models-signalenrichment</artifactId>
7175
</dependency>
76+
<dependency>
77+
<groupId>org.eclipse.ditto</groupId>
78+
<artifactId>ditto-internal-utils-http</artifactId>
79+
</dependency>
7280
<dependency>
7381
<groupId>org.eclipse.ditto</groupId>
7482
<artifactId>ditto-internal-utils-persistence</artifactId>

connectivity/service/src/main/java/org/eclipse/ditto/connectivity/service/config/DefaultHttpPushConfig.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,10 @@
1919

2020
import javax.annotation.concurrent.Immutable;
2121

22-
import org.eclipse.ditto.base.service.config.http.DefaultHttpProxyConfig;
23-
import org.eclipse.ditto.base.service.config.http.HttpProxyConfig;
2422
import org.eclipse.ditto.internal.utils.config.ConfigWithFallback;
2523
import org.eclipse.ditto.internal.utils.config.ScopedConfig;
24+
import org.eclipse.ditto.internal.utils.http.config.DefaultHttpProxyConfig;
25+
import org.eclipse.ditto.internal.utils.http.config.HttpProxyConfig;
2626

2727
import com.typesafe.config.Config;
2828

connectivity/service/src/main/java/org/eclipse/ditto/connectivity/service/config/HttpPushConfig.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@
1616
import java.util.List;
1717
import java.util.Map;
1818

19-
import org.eclipse.ditto.base.service.config.http.HttpProxyConfig;
2019
import org.eclipse.ditto.internal.utils.config.KnownConfigValue;
20+
import org.eclipse.ditto.internal.utils.http.config.HttpProxyConfig;
2121

2222
import com.typesafe.config.Config;
2323

connectivity/service/src/main/java/org/eclipse/ditto/connectivity/service/messaging/httppush/HttpPushClientActor.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@
3939
import org.apache.pekko.stream.javadsl.Sink;
4040
import org.apache.pekko.stream.javadsl.Source;
4141
import org.eclipse.ditto.base.model.headers.DittoHeaders;
42-
import org.eclipse.ditto.base.service.config.http.HttpProxyConfig;
4342
import org.eclipse.ditto.connectivity.model.Connection;
4443
import org.eclipse.ditto.connectivity.model.signals.commands.modify.TestConnection;
4544
import org.eclipse.ditto.connectivity.service.config.HttpPushConfig;
@@ -50,6 +49,7 @@
5049
import org.eclipse.ditto.connectivity.service.messaging.internal.ssl.SSLContextCreator;
5150
import org.eclipse.ditto.connectivity.service.messaging.monitoring.ConnectionMonitor;
5251
import org.eclipse.ditto.connectivity.service.messaging.monitoring.logs.InfoProviderFactory;
52+
import org.eclipse.ditto.internal.utils.config.http.HttpProxyBaseConfig;
5353

5454
import com.typesafe.config.Config;
5555

@@ -215,7 +215,7 @@ private CompletionStage<Status.Status> testSSL(final Connection connection, fina
215215
}
216216

217217
private CompletionStage<Status.Status> connectViaProxy(final String hostWithoutLookup, final int port) {
218-
final HttpProxyConfig httpProxyConfig = this.httpPushConfig.getHttpProxyConfig();
218+
final HttpProxyBaseConfig httpProxyConfig = this.httpPushConfig.getHttpProxyConfig();
219219
try (final Socket proxySocket = new Socket(httpProxyConfig.getHostname(), httpProxyConfig.getPort())) {
220220
String proxyConnect = "CONNECT " + hostWithoutLookup + ":" + port + " HTTP/1.1\n";
221221
proxyConnect += "Host: " + hostWithoutLookup + ":" + port;

connectivity/service/src/main/resources/connectivity.conf

+8-8
Original file line numberDiff line numberDiff line change
@@ -1240,7 +1240,7 @@ pekko-contrib-mongodb-persistence-connection-remember-snapshots {
12401240

12411241
connection-persistence-dispatcher {
12421242
type = Dispatcher
1243-
executor = "org.eclipse.ditto.internal.utils.metrics.executor.InstrumentedForkJoinExecutorServiceConfigurator"
1243+
executor = "org.eclipse.ditto.internal.utils.metrics.service.executor.InstrumentedForkJoinExecutorServiceConfigurator"
12441244
fork-join-executor {
12451245
parallelism-min = 4
12461246
parallelism-factor = 3.0
@@ -1261,7 +1261,7 @@ rabbit-stats-bounded-mailbox {
12611261

12621262
message-mapping-processor-dispatcher {
12631263
type = Dispatcher
1264-
executor = "org.eclipse.ditto.internal.utils.metrics.executor.InstrumentedForkJoinExecutorServiceConfigurator"
1264+
executor = "org.eclipse.ditto.internal.utils.metrics.service.executor.InstrumentedForkJoinExecutorServiceConfigurator"
12651265
fork-join-executor {
12661266
# Min number of threads to cap factor-based parallelism number to
12671267
parallelism-min = 4
@@ -1276,17 +1276,17 @@ message-mapping-processor-dispatcher {
12761276
jms-connection-handling-dispatcher {
12771277
# one thread per actor because the actor blocks.
12781278
type = PinnedDispatcher
1279-
executor = "org.eclipse.ditto.internal.utils.metrics.executor.InstrumentedThreadPoolExecutorServiceConfigurator"
1279+
executor = "org.eclipse.ditto.internal.utils.metrics.service.executor.InstrumentedThreadPoolExecutorServiceConfigurator"
12801280
}
12811281

12821282
signal-enrichment-cache-dispatcher {
12831283
type = Dispatcher
1284-
executor = "org.eclipse.ditto.internal.utils.metrics.executor.InstrumentedThreadPoolExecutorServiceConfigurator"
1284+
executor = "org.eclipse.ditto.internal.utils.metrics.service.executor.InstrumentedThreadPoolExecutorServiceConfigurator"
12851285
}
12861286

12871287
http-push-connection-dispatcher {
12881288
type = Dispatcher
1289-
executor = "org.eclipse.ditto.internal.utils.metrics.executor.InstrumentedThreadPoolExecutorServiceConfigurator"
1289+
executor = "org.eclipse.ditto.internal.utils.metrics.service.executor.InstrumentedThreadPoolExecutorServiceConfigurator"
12901290

12911291
# This executor is meant to be allowed to grow quite big as its limited by the max parallelism of each http connection client.
12921292
# Limit this parallelism here additionally could lead to confusing results regarding througput of some http connections.
@@ -1300,17 +1300,17 @@ http-push-connection-dispatcher {
13001300

13011301
kafka-consumer-dispatcher {
13021302
type = PinnedDispatcher
1303-
executor = "org.eclipse.ditto.internal.utils.metrics.executor.InstrumentedThreadPoolExecutorServiceConfigurator"
1303+
executor = "org.eclipse.ditto.internal.utils.metrics.service.executor.InstrumentedThreadPoolExecutorServiceConfigurator"
13041304
}
13051305

13061306
kafka-producer-dispatcher {
13071307
type = PinnedDispatcher
1308-
executor = "org.eclipse.ditto.internal.utils.metrics.executor.InstrumentedThreadPoolExecutorServiceConfigurator"
1308+
executor = "org.eclipse.ditto.internal.utils.metrics.service.executor.InstrumentedThreadPoolExecutorServiceConfigurator"
13091309
}
13101310

13111311
blocked-namespaces-dispatcher {
13121312
type = Dispatcher
1313-
executor = "org.eclipse.ditto.internal.utils.metrics.executor.InstrumentedForkJoinExecutorServiceConfigurator"
1313+
executor = "org.eclipse.ditto.internal.utils.metrics.service.executor.InstrumentedForkJoinExecutorServiceConfigurator"
13141314
fork-join-executor {
13151315
# Min number of threads to cap factor-based parallelism number to
13161316
parallelism-min = 4

connectivity/service/src/test/java/org/eclipse/ditto/connectivity/service/ConnectivityServiceGlobalErrorRegistryTest.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
import org.eclipse.ditto.thingsearch.api.QueryTimeExceededException;
4646
import org.eclipse.ditto.thingsearch.model.signals.commands.exceptions.InvalidNamespacesException;
4747
import org.eclipse.ditto.wot.model.WotThingModelInvalidException;
48+
import org.eclipse.ditto.wot.validation.WotThingModelPayloadValidationException;
4849

4950
public final class ConnectivityServiceGlobalErrorRegistryTest extends GlobalErrorRegistryTestCases {
5051

@@ -81,7 +82,8 @@ public ConnectivityServiceGlobalErrorRegistryTest() {
8182
JwtInvalidException.class,
8283
IllegalAdaptableException.class,
8384
WotThingModelInvalidException.class,
84-
EdgeServiceTimeoutException.class
85+
EdgeServiceTimeoutException.class,
86+
WotThingModelPayloadValidationException.class
8587
);
8688
}
8789

connectivity/service/src/test/java/org/eclipse/ditto/connectivity/service/config/DefaultHttpPushConfigTest.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
import java.util.Map;
2222

2323
import org.assertj.core.api.JUnitSoftAssertions;
24-
import org.eclipse.ditto.base.service.config.http.HttpProxyConfig;
24+
import org.eclipse.ditto.internal.utils.http.config.HttpProxyConfig;
2525
import org.junit.BeforeClass;
2626
import org.junit.Rule;
2727
import org.junit.Test;

connectivity/service/src/test/java/org/eclipse/ditto/connectivity/service/messaging/httppush/HttpPushFactoryTest.java

+22-22
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,27 @@
3030
import java.util.concurrent.TimeUnit;
3131
import java.util.concurrent.TimeoutException;
3232

33+
import org.apache.pekko.NotUsed;
34+
import org.apache.pekko.actor.ActorSystem;
35+
import org.apache.pekko.http.impl.engine.client.ProxyConnectionFailedException;
36+
import org.apache.pekko.http.javadsl.Http;
37+
import org.apache.pekko.http.javadsl.ServerBinding;
38+
import org.apache.pekko.http.javadsl.model.HttpMethods;
39+
import org.apache.pekko.http.javadsl.model.HttpRequest;
40+
import org.apache.pekko.http.javadsl.model.HttpResponse;
41+
import org.apache.pekko.http.javadsl.model.StatusCodes;
42+
import org.apache.pekko.http.javadsl.model.headers.Authorization;
43+
import org.apache.pekko.japi.Pair;
44+
import org.apache.pekko.stream.KillSwitches;
45+
import org.apache.pekko.stream.OverflowStrategy;
46+
import org.apache.pekko.stream.javadsl.Flow;
47+
import org.apache.pekko.stream.javadsl.Keep;
48+
import org.apache.pekko.stream.javadsl.Sink;
49+
import org.apache.pekko.stream.javadsl.SinkQueueWithCancel;
50+
import org.apache.pekko.stream.javadsl.Source;
51+
import org.apache.pekko.stream.javadsl.SourceQueueWithComplete;
52+
import org.apache.pekko.testkit.javadsl.TestKit;
3353
import org.eclipse.ditto.base.service.config.DittoServiceConfig;
34-
import org.eclipse.ditto.base.service.config.http.DefaultHttpProxyConfig;
35-
import org.eclipse.ditto.base.service.config.http.HttpProxyConfig;
3654
import org.eclipse.ditto.connectivity.model.Connection;
3755
import org.eclipse.ditto.connectivity.model.ConnectionType;
3856
import org.eclipse.ditto.connectivity.model.ConnectivityModelFactory;
@@ -47,33 +65,15 @@
4765
import org.eclipse.ditto.connectivity.service.messaging.monitoring.logs.InfoProviderFactory;
4866
import org.eclipse.ditto.connectivity.service.messaging.tunnel.SshTunnelState;
4967
import org.eclipse.ditto.internal.utils.config.DefaultScopedConfig;
68+
import org.eclipse.ditto.internal.utils.http.config.DefaultHttpProxyConfig;
69+
import org.eclipse.ditto.internal.utils.http.config.HttpProxyConfig;
5070
import org.junit.After;
5171
import org.junit.Before;
5272
import org.junit.Test;
5373

5474
import com.typesafe.config.Config;
5575
import com.typesafe.config.ConfigFactory;
5676

57-
import org.apache.pekko.NotUsed;
58-
import org.apache.pekko.actor.ActorSystem;
59-
import org.apache.pekko.http.impl.engine.client.ProxyConnectionFailedException;
60-
import org.apache.pekko.http.javadsl.Http;
61-
import org.apache.pekko.http.javadsl.ServerBinding;
62-
import org.apache.pekko.http.javadsl.model.HttpMethods;
63-
import org.apache.pekko.http.javadsl.model.HttpRequest;
64-
import org.apache.pekko.http.javadsl.model.HttpResponse;
65-
import org.apache.pekko.http.javadsl.model.StatusCodes;
66-
import org.apache.pekko.http.javadsl.model.headers.Authorization;
67-
import org.apache.pekko.japi.Pair;
68-
import org.apache.pekko.stream.KillSwitches;
69-
import org.apache.pekko.stream.OverflowStrategy;
70-
import org.apache.pekko.stream.javadsl.Flow;
71-
import org.apache.pekko.stream.javadsl.Keep;
72-
import org.apache.pekko.stream.javadsl.Sink;
73-
import org.apache.pekko.stream.javadsl.SinkQueueWithCancel;
74-
import org.apache.pekko.stream.javadsl.Source;
75-
import org.apache.pekko.stream.javadsl.SourceQueueWithComplete;
76-
import org.apache.pekko.testkit.javadsl.TestKit;
7777
import scala.util.Failure;
7878
import scala.util.Try;
7979

gateway/service/pom.xml

+4
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,10 @@
101101
<groupId>org.eclipse.ditto</groupId>
102102
<artifactId>ditto-wot-model</artifactId>
103103
</dependency>
104+
<dependency>
105+
<groupId>org.eclipse.ditto</groupId>
106+
<artifactId>ditto-wot-validation</artifactId>
107+
</dependency>
104108
<dependency>
105109
<groupId>org.eclipse.ditto</groupId>
106110
<artifactId>ditto-internal-models-signalenrichment</artifactId>

gateway/service/src/main/java/org/eclipse/ditto/gateway/service/util/config/security/AuthenticationConfig.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@
1414

1515
import javax.annotation.concurrent.Immutable;
1616

17-
import org.eclipse.ditto.base.service.config.http.HttpProxyConfig;
1817
import org.eclipse.ditto.internal.utils.config.KnownConfigValue;
18+
import org.eclipse.ditto.internal.utils.http.config.HttpProxyConfig;
1919

2020
/**
2121
* Provides configuration settings for the Gateway authentication.

gateway/service/src/main/java/org/eclipse/ditto/gateway/service/util/config/security/DefaultAuthenticationConfig.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@
1717
import javax.annotation.Nullable;
1818
import javax.annotation.concurrent.Immutable;
1919

20-
import org.eclipse.ditto.base.service.config.http.DefaultHttpProxyConfig;
21-
import org.eclipse.ditto.base.service.config.http.HttpProxyConfig;
2220
import org.eclipse.ditto.internal.utils.config.ConfigWithFallback;
2321
import org.eclipse.ditto.internal.utils.config.ScopedConfig;
2422
import org.eclipse.ditto.internal.utils.config.WithConfigPath;
23+
import org.eclipse.ditto.internal.utils.http.config.DefaultHttpProxyConfig;
24+
import org.eclipse.ditto.internal.utils.http.config.HttpProxyConfig;
2525

2626
import com.typesafe.config.Config;
2727

0 commit comments

Comments
 (0)