Skip to content

Commit f2b8dc0

Browse files
authored
Merge pull request #1887 from eclipse-ditto/dependencies-2024-02
updating dependencies to latest ones @ 2024-01
2 parents f6e156d + 36840f8 commit f2b8dc0

File tree

9 files changed

+57
-69
lines changed

9 files changed

+57
-69
lines changed

bom/pom.xml

+12-12
Original file line numberDiff line numberDiff line change
@@ -36,37 +36,37 @@
3636

3737
<!-- ### Compile dependencies versions -->
3838
<minimal-json.version>0.9.5</minimal-json.version>
39-
<jackson-bom.version>2.14.3</jackson-bom.version>
40-
<typesafe-config.version>1.4.2</typesafe-config.version>
39+
<jackson-bom.version>2.16.1</jackson-bom.version>
40+
<typesafe-config.version>1.4.3</typesafe-config.version>
4141
<ssl-config-core.version>0.6.1</ssl-config-core.version>
42-
<kafka-client.version>3.5.1</kafka-client.version>
42+
<kafka-client.version>3.6.1</kafka-client.version>
4343
<hivemq-mqtt-client.version>1.3.3</hivemq-mqtt-client.version>
4444
<sshd.version>2.9.2</sshd.version>
4545
<eddsa.version>0.3.0</eddsa.version>
4646
<lz4-java.version>1.8.0</lz4-java.version>
4747

48-
<pekko-bom.version>1.0.1</pekko-bom.version>
48+
<pekko-bom.version>1.0.2</pekko-bom.version>
4949
<pekko-http-bom.version>1.0.0</pekko-http-bom.version>
50-
<pekko-persistence-mongodb.version>1.0.1</pekko-persistence-mongodb.version>
50+
<pekko-persistence-mongodb.version>1.1.0</pekko-persistence-mongodb.version>
5151
<pekko-persistence-inmemory.version>1.0.0</pekko-persistence-inmemory.version>
5252
<pekko-management.version>1.0.0</pekko-management.version>
5353
<pekko-connector-kafka.version>1.0.0</pekko-connector-kafka.version>
54-
<parboiled.version>2.5.0</parboiled.version>
54+
<parboiled.version>2.5.1</parboiled.version>
5555

5656
<!-- Necessary for pekko-persistence-mongodb -->
5757
<metrics4-scala.version>4.2.9</metrics4-scala.version>
5858

5959
<!-- Keep these version consistent with pekko-persistence-mongodb.version's build.sbt -->
60-
<mongo-java-driver.version>4.10.2</mongo-java-driver.version>
60+
<mongo-java-driver.version>4.11.1</mongo-java-driver.version>
6161

62-
<jjwt.version>0.11.5</jjwt.version>
62+
<jjwt.version>0.12.5</jjwt.version>
6363
<asm.version>9.2</asm.version>
64-
<qpid-jms-client.version>1.10.0</qpid-jms-client.version>
64+
<qpid-jms-client.version>1.11.0</qpid-jms-client.version>
6565
<pjfanning-pekko-rabbitmq.version>7.0.0</pjfanning-pekko-rabbitmq.version>
6666
<amqp-client.version>5.18.0</amqp-client.version>
6767
<reactive-streams.version>1.0.4</reactive-streams.version>
68-
<netty-bom.version>4.1.99.Final</netty-bom.version>
69-
<cloudevents.version>2.3.0</cloudevents.version>
68+
<netty-bom.version>4.1.106.Final</netty-bom.version>
69+
<cloudevents.version>2.5.0</cloudevents.version>
7070

7171
<slf4j.version>2.0.11</slf4j.version>
7272
<logback.version>1.4.14</logback.version>
@@ -75,7 +75,7 @@
7575
<janino.version>3.1.11</janino.version>
7676

7777
<!-- ### Metrics and Tracing -->
78-
<kamon.version>2.6.6</kamon.version>
78+
<kamon.version>2.7.0</kamon.version>
7979

8080
<jsr305.version>3.0.2</jsr305.version>
8181

gateway/service/src/main/java/org/eclipse/ditto/gateway/service/security/authentication/jwt/DittoPublicKeyProvider.java

+10-10
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,12 @@
3838
import javax.annotation.Nonnull;
3939
import javax.annotation.Nullable;
4040

41+
import org.apache.pekko.http.javadsl.model.HttpRequest;
42+
import org.apache.pekko.http.javadsl.model.HttpResponse;
43+
import org.apache.pekko.stream.Materializer;
44+
import org.apache.pekko.stream.SystemMaterializer;
45+
import org.apache.pekko.stream.javadsl.Sink;
46+
import org.apache.pekko.util.ByteString;
4147
import org.eclipse.ditto.base.model.exceptions.DittoRuntimeException;
4248
import org.eclipse.ditto.gateway.api.GatewayAuthenticationProviderUnavailableException;
4349
import org.eclipse.ditto.gateway.api.GatewayJwtIssuerNotSupportedException;
@@ -65,12 +71,6 @@
6571
import com.github.benmanes.caffeine.cache.Caffeine;
6672
import com.github.benmanes.caffeine.cache.RemovalListener;
6773

68-
import org.apache.pekko.http.javadsl.model.HttpRequest;
69-
import org.apache.pekko.http.javadsl.model.HttpResponse;
70-
import org.apache.pekko.stream.Materializer;
71-
import org.apache.pekko.stream.SystemMaterializer;
72-
import org.apache.pekko.stream.javadsl.Sink;
73-
import org.apache.pekko.util.ByteString;
7474
import io.jsonwebtoken.JwtParser;
7575
import io.jsonwebtoken.Jwts;
7676

@@ -391,10 +391,10 @@ private static JwkInvalidException getJwkInvalidExceptionException(final String
391391
}
392392

393393
private PublicKeyWithParser mapToPublicKeyWithParser(final PublicKey publicKey) {
394-
final var jwtParserBuilder = Jwts.parserBuilder();
395-
final JwtParser jwtParser = jwtParserBuilder.deserializeJsonWith(JjwtDeserializer.getInstance())
396-
.setSigningKey(publicKey)
397-
.setAllowedClockSkewSeconds(oAuthConfig.getAllowedClockSkew().getSeconds())
394+
final var jwtParserBuilder = Jwts.parser();
395+
final JwtParser jwtParser = jwtParserBuilder.json(JjwtDeserializer.getInstance())
396+
.verifyWith(publicKey)
397+
.clockSkewSeconds(oAuthConfig.getAllowedClockSkew().getSeconds())
398398
.build();
399399

400400
return new PublicKeyWithParser(publicKey, jwtParser);

gateway/service/src/test/java/org/eclipse/ditto/gateway/service/security/authentication/jwt/JwtValidatorTest.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -95,10 +95,10 @@ public void validate() throws ExecutionException, InterruptedException {
9595
}
9696

9797
private JwtParser getJwtParser(final PublicKey publicKey) {
98-
final var jwtParserBuilder = Jwts.parserBuilder();
99-
return jwtParserBuilder.deserializeJsonWith(JjwtDeserializer.getInstance())
100-
.setSigningKey(publicKey)
101-
.setAllowedClockSkewSeconds(oAuthConfig.getAllowedClockSkew().getSeconds())
98+
final var jwtParserBuilder = Jwts.parser();
99+
return jwtParserBuilder.json(JjwtDeserializer.getInstance())
100+
.verifyWith(publicKey)
101+
.clockSkewSeconds(oAuthConfig.getAllowedClockSkew().getSeconds())
102102
.build();
103103
}
104104

internal/utils/cluster/src/main/java/org/eclipse/ditto/internal/utils/cluster/JsonValueSourceRef.java

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

20-
import org.eclipse.ditto.json.JsonValue;
20+
import org.apache.pekko.NotUsed;
21+
import org.apache.pekko.stream.SourceRef;
22+
import org.apache.pekko.stream.javadsl.Source;
2123
import org.eclipse.ditto.base.model.common.ConditionChecker;
24+
import org.eclipse.ditto.json.JsonValue;
2225

2326
import com.fasterxml.jackson.annotation.JsonCreator;
2427
import com.fasterxml.jackson.annotation.JsonIgnore;
25-
26-
import org.apache.pekko.NotUsed;
27-
import org.apache.pekko.stream.SourceRef;
28-
import org.apache.pekko.stream.javadsl.Source;
28+
import com.fasterxml.jackson.annotation.JsonProperty;
2929

3030
/**
3131
* Wraps a {@link SourceRef} of {@link JsonValue}s. The purpose of this class is to make working with SourceRef type
@@ -51,7 +51,7 @@ private JsonValueSourceRef(final SourceRef<JsonValue> sourceRef) {
5151
* @throws NullPointerException if {@code sourceRef} is {@code null}.
5252
*/
5353
@JsonCreator
54-
public static JsonValueSourceRef of(final SourceRef<JsonValue> sourceRef) {
54+
public static JsonValueSourceRef of(@JsonProperty("sourceRef") final SourceRef<JsonValue> sourceRef) {
5555
return new JsonValueSourceRef(ConditionChecker.checkNotNull(sourceRef, "sourceRef"));
5656
}
5757

internal/utils/jwt/src/main/java/org/eclipse/ditto/internal/utils/jwt/JjwtDeserializer.java

+7-19
Original file line numberDiff line numberDiff line change
@@ -12,29 +12,29 @@
1212
*/
1313
package org.eclipse.ditto.internal.utils.jwt;
1414

15-
import java.nio.charset.StandardCharsets;
15+
import java.io.Reader;
1616
import java.text.MessageFormat;
1717
import java.util.List;
1818
import java.util.Map;
1919
import java.util.stream.Collectors;
2020

2121
import javax.annotation.concurrent.Immutable;
2222

23-
import org.eclipse.ditto.base.model.common.ConditionChecker;
2423
import org.eclipse.ditto.json.JsonArray;
25-
import org.eclipse.ditto.json.JsonFactory;
2624
import org.eclipse.ditto.json.JsonField;
2725
import org.eclipse.ditto.json.JsonObject;
2826
import org.eclipse.ditto.json.JsonValue;
27+
import org.eclipse.ditto.json.JsonValueParser;
2928

29+
import io.jsonwebtoken.io.AbstractDeserializer;
3030
import io.jsonwebtoken.io.DeserializationException;
3131
import io.jsonwebtoken.io.Deserializer;
3232

3333
/**
3434
* JJWT library Deserializer implementation which translates JSON strings to Java Objects (e.g. Maps).
3535
*/
3636
@Immutable
37-
public final class JjwtDeserializer implements Deserializer<Map<String, ?>> {
37+
public final class JjwtDeserializer extends AbstractDeserializer<Map<String, ?>> {
3838

3939
private static Deserializer<Map<String, ?>> instance;
4040

@@ -49,27 +49,15 @@ public final class JjwtDeserializer implements Deserializer<Map<String, ?>> {
4949
}
5050

5151
@Override
52-
public Map<String, ?> deserialize(final byte[] bytes) {
53-
54-
ConditionChecker.argumentNotNull(bytes, "JSON byte array cannot be null");
55-
56-
if (bytes.length == 0) {
57-
throw new DeserializationException("Invalid JSON: zero length byte array.");
58-
}
59-
52+
@SuppressWarnings("unchecked")
53+
protected Map<String, ?> doDeserialize(final Reader reader) throws Exception {
6054
try {
61-
return parse(new String(bytes, StandardCharsets.UTF_8));
55+
return (Map<String, ?>) toJavaObject(JsonValueParser.fromReader().apply(reader));
6256
} catch (final Exception e) {
6357
throw new DeserializationException("Invalid JSON: " + e.getMessage(), e);
6458
}
6559
}
6660

67-
@SuppressWarnings("unchecked")
68-
private static Map<String, ?> parse(final String json) {
69-
70-
return (Map<String, ?>) toJavaObject(JsonFactory.readFrom(json));
71-
}
72-
7361
private static Map<String, Object> toJavaMap(final JsonObject jsonObject) {
7462
return jsonObject.stream()
7563
.collect(Collectors.toMap(JsonField::getKeyName, field -> toJavaObject(field.getValue())));

internal/utils/jwt/src/main/java/org/eclipse/ditto/internal/utils/jwt/JjwtSerializer.java

+9-9
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
*/
1313
package org.eclipse.ditto.internal.utils.jwt;
1414

15+
import java.io.IOException;
16+
import java.io.OutputStream;
1517
import java.nio.charset.StandardCharsets;
1618
import java.util.Calendar;
1719
import java.util.Collection;
@@ -28,6 +30,7 @@
2830
import org.eclipse.ditto.json.JsonObject;
2931
import org.eclipse.ditto.json.JsonValue;
3032

33+
import io.jsonwebtoken.io.AbstractSerializer;
3134
import io.jsonwebtoken.io.Encoders;
3235
import io.jsonwebtoken.io.SerializationException;
3336
import io.jsonwebtoken.io.Serializer;
@@ -39,7 +42,7 @@
3942
* JJWT library Serializer implementation which translates Java Objects (e.g. Maps) to JSON strings.
4043
*/
4144
@Immutable
42-
public final class JjwtSerializer implements Serializer<Map<String, ?>> {
45+
public final class JjwtSerializer extends AbstractSerializer<Map<String, ?>> {
4346

4447
private static Serializer<Map<String, ?>> instance;
4548

@@ -54,15 +57,12 @@ public final class JjwtSerializer implements Serializer<Map<String, ?>> {
5457
}
5558

5659
@Override
57-
public byte[] serialize(final Map<String, ?> t) {
58-
60+
protected void doSerialize(final Map<String, ?> stringMap, final OutputStream out) throws Exception {
5961
try {
60-
return toJson(t).toString().getBytes(StandardCharsets.UTF_8);
61-
} catch (final SerializationException se) {
62-
throw se;
63-
} catch (final Exception e) {
62+
out.write(toJson(stringMap).toString().getBytes(StandardCharsets.UTF_8));
63+
} catch (final IOException e) {
6464
throw new SerializationException("Unable to serialize object of type " +
65-
Optional.ofNullable(t).map(obj -> obj.getClass().getName()).orElse("<null>") +
65+
Optional.ofNullable(stringMap).map(obj -> obj.getClass().getName()).orElse("<null>") +
6666
" to JSON: " + e.getMessage(), e);
6767
}
6868
}
@@ -91,7 +91,7 @@ private static JsonValue toJson(final Object input) {
9191
return JsonFactory.newValue(Encoders.BASE64.encode((bytes)));
9292
} else if (input instanceof char[] chars) {
9393
return JsonFactory.newValue(new String(chars));
94-
} else if (input instanceof Map map) {
94+
} else if (input instanceof Map<?, ?> map) {
9595
return toJsonObject(map);
9696
} else if (input instanceof Collection<?> collection) {
9797
return toJsonArray(collection);

internal/utils/jwt/src/test/java/org/eclipse/ditto/internal/utils/jwt/JjwtDeserializerTest.java

+7-7
Original file line numberDiff line numberDiff line change
@@ -39,22 +39,22 @@ public void foo() {
3939
claims.put(Claims.ISSUER, KNOWN_ISS);
4040
claims.put(Claims.SUBJECT, KNOWN_SUB);
4141
final String compact = Jwts.builder()
42-
.serializeToJsonWith(JjwtSerializer.getInstance())
43-
.setClaims(claims)
44-
.setExpiration(KNOWN_EXP)
42+
.json(JjwtSerializer.getInstance())
43+
.claims(claims)
44+
.expiration(KNOWN_EXP)
4545
.compact();
4646

47-
final Jwt jwt = Jwts.parserBuilder()
48-
.deserializeJsonWith(JjwtDeserializer.getInstance())
47+
final Jwt<?, ?> jwt = Jwts.parser().json(JjwtDeserializer.getInstance())
48+
.unsecured()
4949
.build()
5050
.parse(compact);
5151

52-
final Object jwtBody = jwt.getBody();
52+
final Object jwtBody = jwt.getPayload();
5353

5454
Assertions.assertThat(jwtBody).isInstanceOf(Claims.class);
5555
Assertions.assertThat(((Claims) jwtBody)).containsEntry(Claims.ISSUER, KNOWN_ISS)
5656
.containsEntry(Claims.SUBJECT, KNOWN_SUB)
57-
.containsEntry(Claims.EXPIRATION, (int) (KNOWN_EXP.getTime() / 1000L));
57+
.containsEntry(Claims.EXPIRATION, (KNOWN_EXP.getTime() / 1000L));
5858
}
5959

6060
}

json/src/main/java/org/eclipse/ditto/json/DefaultDittoJsonHandler.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
* for creating a new {@link JsonArray} or {@link JsonObject}.
2828
*/
2929
@NotThreadSafe
30-
final class DefaultDittoJsonHandler extends DittoJsonHandler<List<JsonValue>, List<JsonField>, JsonValue> {
30+
public final class DefaultDittoJsonHandler extends DittoJsonHandler<List<JsonValue>, List<JsonField>, JsonValue> {
3131

3232
private static final int DEFAULT_INITIAL_STRING_BUILDER_CAPACITY = 512;
3333
private static final char DELIMITER = ',';

json/src/main/java/org/eclipse/ditto/json/JsonValueParser.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
* This class provides access to functionality for parsing a {@link JsonValue} from various inputs.
3131
*/
3232
@Immutable
33-
final class JsonValueParser {
33+
public final class JsonValueParser {
3434

3535
@Nullable private static Function<String, JsonValue> fromStringInstance = null;
3636

0 commit comments

Comments
 (0)