This is an automated email from the ASF dual-hosted git repository.
He-Pin pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/pekko.git
The following commit(s) were added to refs/heads/main by this push:
new bb6aa95bac feat: predefined JsonSerializable and CborSerializable
marker traits (#3649)
bb6aa95bac is described below
commit bb6aa95bac6fcd0a92dcf9d9c3d00e0be3a42b5e
Author: PJ Fanning <[email protected]>
AuthorDate: Fri Oct 23 06:59:52 2026 +0100
feat: predefined JsonSerializable and CborSerializable marker traits (#3649)
* feat: predefined JsonSerializable and CborSerializable marker traits
Motivation:
Almost every application using Jackson serialization defines its own
marker trait/interface and binds it to jackson-json or jackson-cbor in
serialization-bindings. Pekko already had such markers, but only in the
test scope, so users could not reuse them.
Modification:
- Move JsonSerializable and CborSerializable from the test scope to the
main scope of serialization-jackson and serialization-jackson3 (same
fully qualified class names as the former test traits).
- Bind them to jackson-json and jackson-cbor in the reference.conf of
both modules and remove the test-only reference.conf that held the
same bindings.
- Use the predefined JsonSerializable in the documentation samples
instead of a custom MySerializable marker and update the Jackson
serialization docs to describe the predefined markers, while still
explaining how to bind a custom marker.
- Remove the unused docs-local marker traits and their bindings from
the docs SerializationDocSpec.
- Add a test that the predefined markers are bound by reference.conf
alone and round trip through the JSON and CBOR serializers.
Result:
Users can extend/implement JsonSerializable or CborSerializable without
any serialization-bindings configuration. Custom marker bindings keep
working as before. No change to serializer ids or the wire format.
Tests:
- Not run locally - left to CI; scalafmt applied
- sbt "serialization-jackson/javafmtAll"
"serialization-jackson3/javafmtAll" (JDK 17): no changes
References:
None - convenience marker traits for Jackson serialization
* docs: note the predefined Jackson marker traits in the migration guide
Motivation:
The new predefined JsonSerializable and CborSerializable marker traits are
bound by default, and messages using them cannot be read by Pekko 1.x nodes.
Modification:
Add an entry to the serialization bindings section of the 1.x to 2.x
migration guide.
Result:
Users doing a rolling update know to adopt the predefined traits only once
no Pekko 1.x nodes remain.
Tests:
- Not run - docs only
References:
Refs #3649
---
.../paradox/migration/migration-guide-1.x-2.x.md | 5 ++++
docs/src/main/paradox/serialization-jackson.md | 20 +++++++++------
.../docs/serialization/SerializationDocSpec.scala | 12 ---------
.../src/main/resources/reference.conf | 3 +++
.../serialization/jackson/CborSerializable.scala | 6 ++++-
.../serialization/jackson/JsonSerializable.scala | 6 ++++-
.../serialization/jackson/MySerializable.java | 5 ++--
.../jackson/SerializationDocTest.java | 10 +++++---
.../pekko/serialization/jackson/v1/Customer.java | 4 +--
.../pekko/serialization/jackson/v1/ItemAdded.java | 4 +--
.../pekko/serialization/jackson/v1/OrderAdded.java | 4 +--
.../pekko/serialization/jackson/v2a/Customer.java | 4 +--
.../pekko/serialization/jackson/v2a/ItemAdded.java | 4 +--
.../serialization/jackson/v2a/OrderPlaced.java | 4 +--
.../pekko/serialization/jackson/v2b/ItemAdded.java | 4 +--
.../pekko/serialization/jackson/v2c/ItemAdded.java | 4 +--
.../src/test/resources/reference.conf | 10 --------
.../jackson/CustomAdtSerializer.scala | 4 ++-
.../jackson/SerializationDocSpec.scala | 15 +++--------
.../pekko/serialization/jackson/v1/Customer.scala | 5 ++--
.../pekko/serialization/jackson/v1/ItemAdded.scala | 4 +--
.../serialization/jackson/v1/OrderAdded.scala | 4 +--
.../pekko/serialization/jackson/v2a/Address.scala | 4 +--
.../pekko/serialization/jackson/v2a/Customer.scala | 4 +--
.../serialization/jackson/v2a/ItemAdded.scala | 4 +--
.../serialization/jackson/v2a/OrderPlaced.scala | 4 +--
.../serialization/jackson/v2b/ItemAdded.scala | 5 ++--
.../serialization/jackson/v2c/ItemAdded.scala | 4 +--
.../jackson/JacksonSerializerSpec.scala | 30 ++++++++++++++++++++++
.../src/main/resources/reference.conf | 3 +++
.../serialization/jackson3/CborSerializable.scala | 6 ++++-
.../serialization/jackson3/JsonSerializable.scala | 6 ++++-
.../serialization/jackson3/MySerializable.java | 5 ++--
.../jackson3/SerializationDocTest.java | 10 +++++---
.../pekko/serialization/jackson3/v1/Customer.java | 4 +--
.../pekko/serialization/jackson3/v1/ItemAdded.java | 4 +--
.../serialization/jackson3/v1/OrderAdded.java | 4 +--
.../pekko/serialization/jackson3/v2a/Customer.java | 4 +--
.../serialization/jackson3/v2a/ItemAdded.java | 4 +--
.../serialization/jackson3/v2a/OrderPlaced.java | 4 +--
.../serialization/jackson3/v2b/ItemAdded.java | 4 +--
.../serialization/jackson3/v2c/ItemAdded.java | 4 +--
.../src/test/resources/reference.conf | 10 --------
.../jackson3/CustomAdtSerializer.scala | 4 ++-
.../jackson3/SerializationDocSpec.scala | 15 +++--------
.../pekko/serialization/jackson3/v1/Customer.scala | 5 ++--
.../serialization/jackson3/v1/ItemAdded.scala | 4 +--
.../serialization/jackson3/v1/OrderAdded.scala | 4 +--
.../pekko/serialization/jackson3/v2a/Address.scala | 4 +--
.../serialization/jackson3/v2a/Customer.scala | 4 +--
.../serialization/jackson3/v2a/ItemAdded.scala | 4 +--
.../serialization/jackson3/v2a/OrderPlaced.scala | 4 +--
.../serialization/jackson3/v2b/ItemAdded.scala | 5 ++--
.../serialization/jackson3/v2c/ItemAdded.scala | 4 +--
.../jackson3/JacksonSerializerSpec.scala | 30 ++++++++++++++++++++++
55 files changed, 205 insertions(+), 150 deletions(-)
diff --git a/docs/src/main/paradox/migration/migration-guide-1.x-2.x.md
b/docs/src/main/paradox/migration/migration-guide-1.x-2.x.md
index c4bddca295..90da020b86 100644
--- a/docs/src/main/paradox/migration/migration-guide-1.x-2.x.md
+++ b/docs/src/main/paradox/migration/migration-guide-1.x-2.x.md
@@ -234,3 +234,8 @@ written.
([PR3275](https://github.com/apache/pekko/pull/3275))
The same serializer also handles the new `SerializedEvent`, used to write
events that are already
serialized; Pekko 1.x cannot deserialize that either, so do not send
`SerializedEvent` messages to
Pekko 1.x nodes during a rolling update.
([PR3650](https://github.com/apache/pekko/pull/3650))
+* `pekko-serialization-jackson` (and `pekko-serialization-jackson3`) now
provide predefined
+`JsonSerializable` and `CborSerializable` marker traits, bound by default to
`jackson-json` and
+`jackson-cbor`. Your own marker traits and bindings keep working. If you
switch messages to the
+predefined traits, Pekko 1.x nodes cannot load those classes, so only do that
once no Pekko 1.x nodes
+remain in the cluster. ([PR3649](https://github.com/apache/pekko/pull/3649))
diff --git a/docs/src/main/paradox/serialization-jackson.md
b/docs/src/main/paradox/serialization-jackson.md
index 99b62467ff..b55ee6b189 100644
--- a/docs/src/main/paradox/serialization-jackson.md
+++ b/docs/src/main/paradox/serialization-jackson.md
@@ -60,9 +60,15 @@ annotations are needed to specify how to convert the objects
to JSON/bytes.
## Usage
-To enable Jackson serialization for a class you need to configure it or one of
its super classes
-in serialization-bindings configuration. Typically you will create a marker
@scala[trait]@java[interface]
-for that purpose and let the messages @scala[extend]@java[implement] that.
+To enable Jackson serialization for a class there needs to be a serialization
binding for it or one of its
+super classes in serialization-bindings configuration.
+
+The simplest way is to let the messages @scala[extend]@java[implement] one of
the two predefined marker
+@scala[traits]@java[interfaces]
`org.apache.pekko.serialization.jackson.JsonSerializable` or
+`org.apache.pekko.serialization.jackson.CborSerializable`. They are bound to
`jackson-json` and `jackson-cbor`
+respectively in the `reference.conf` of `pekko-serialization-jackson`, so no
additional configuration is needed.
+When using `pekko-serialization-jackson3` the corresponding markers are
+`org.apache.pekko.serialization.jackson3.JsonSerializable` and
`org.apache.pekko.serialization.jackson3.CborSerializable`.
Scala
: @@snip
[SerializationDocSpec.scala](/serialization-jackson/src/test/scala/doc/org/apache/pekko/serialization/jackson/SerializationDocSpec.scala)
{ #marker-interface }
@@ -70,15 +76,13 @@ Scala
Java
: @@snip
[MySerializable.java](/serialization-jackson/src/test/java/jdoc/org/apache/pekko/serialization/jackson/MySerializable.java)
{ #marker-interface }
-Then you configure the class name of the marker @scala[trait]@java[interface]
in `serialization-bindings` to
+If the predefined markers are not suitable for your project it is also
possible to define your own marker
+@scala[trait]@java[interface] and let the messages
@scala[extend]@java[implement] that. You then have to
+configure the class name of your marker @scala[trait]@java[interface] in
`serialization-bindings` to
one of the supported Jackson formats: `jackson-json` or `jackson-cbor`
@@snip
[config](/serialization-jackson/src/test/scala/doc/org/apache/pekko/serialization/jackson/SerializationDocSpec.scala)
{ #serialization-bindings }
-A good convention would be to name the marker interface `CborSerializable` or
`JsonSerializable`.
-In this documentation we have used `MySerializable` to make it clear that the
marker interface itself is not
-provided by Pekko.
-
That is all that is needed for basic classes where Jackson understands the
structure. A few cases that requires
annotations are described below.
diff --git a/docs/src/test/scala/docs/serialization/SerializationDocSpec.scala
b/docs/src/test/scala/docs/serialization/SerializationDocSpec.scala
index fc5ca47363..e7b989846f 100644
--- a/docs/src/test/scala/docs/serialization/SerializationDocSpec.scala
+++ b/docs/src/test/scala/docs/serialization/SerializationDocSpec.scala
@@ -109,16 +109,6 @@ package docs.serialization {
final case class Customer(name: String) extends MyOwnSerializable
final case class User(name: String) extends MyOwnSerializable
- /**
- * Marker trait for serialization with Jackson CBOR
- */
- trait CborSerializable
-
- /**
- * Marker trait for serialization with Jackson JSON
- */
- trait JsonSerializable
-
object SerializerIdConfig {
val config =
"""
@@ -197,8 +187,6 @@ package docs.serialization {
}
serialization-bindings {
- "docs.serialization.JsonSerializable" = jackson-json
- "docs.serialization.CborSerializable" = jackson-cbor
"com.google.protobuf.Message" = proto
"docs.serialization.MyOwnSerializable" = myown
}
diff --git a/serialization-jackson/src/main/resources/reference.conf
b/serialization-jackson/src/main/resources/reference.conf
index 7d54f3d48e..4de5217f79 100644
--- a/serialization-jackson/src/main/resources/reference.conf
+++ b/serialization-jackson/src/main/resources/reference.conf
@@ -296,5 +296,8 @@ pekko.actor {
# open ended types that might be target to be deserialization gadgets,
such as
# java.lang.Object, java.io.Serializable, java.util.Comparable
+ # Predefined marker traits/interfaces
+ "org.apache.pekko.serialization.jackson.JsonSerializable" = jackson-json
+ "org.apache.pekko.serialization.jackson.CborSerializable" = jackson-cbor
}
}
diff --git
a/serialization-jackson/src/test/scala/org/apache/pekko/serialization/jackson/CborSerializable.scala
b/serialization-jackson/src/main/scala/org/apache/pekko/serialization/jackson/CborSerializable.scala
similarity index 60%
rename from
serialization-jackson/src/test/scala/org/apache/pekko/serialization/jackson/CborSerializable.scala
rename to
serialization-jackson/src/main/scala/org/apache/pekko/serialization/jackson/CborSerializable.scala
index d8747773a3..968aa0e615 100644
---
a/serialization-jackson/src/test/scala/org/apache/pekko/serialization/jackson/CborSerializable.scala
+++
b/serialization-jackson/src/main/scala/org/apache/pekko/serialization/jackson/CborSerializable.scala
@@ -14,6 +14,10 @@
package org.apache.pekko.serialization.jackson
/**
- * Marker trait for serialization with Jackson CBOR in tests
+ * Predefined marker trait for serialization with Jackson CBOR.
+ *
+ * Messages, events and snapshots that extend/implement this marker are
serialized with the
+ * `jackson-cbor` serializer, since it is bound in
`pekko.actor.serialization-bindings`
+ * in the `reference.conf` of this module.
*/
trait CborSerializable
diff --git
a/serialization-jackson/src/test/scala/org/apache/pekko/serialization/jackson/JsonSerializable.scala
b/serialization-jackson/src/main/scala/org/apache/pekko/serialization/jackson/JsonSerializable.scala
similarity index 60%
rename from
serialization-jackson/src/test/scala/org/apache/pekko/serialization/jackson/JsonSerializable.scala
rename to
serialization-jackson/src/main/scala/org/apache/pekko/serialization/jackson/JsonSerializable.scala
index 8f40cc759b..063a0e0dc3 100644
---
a/serialization-jackson/src/test/scala/org/apache/pekko/serialization/jackson/JsonSerializable.scala
+++
b/serialization-jackson/src/main/scala/org/apache/pekko/serialization/jackson/JsonSerializable.scala
@@ -14,6 +14,10 @@
package org.apache.pekko.serialization.jackson
/**
- * Marker trait for serialization with Jackson JSON in tests
+ * Predefined marker trait for serialization with Jackson JSON.
+ *
+ * Messages, events and snapshots that extend/implement this marker are
serialized with the
+ * `jackson-json` serializer, since it is bound in
`pekko.actor.serialization-bindings`
+ * in the `reference.conf` of this module.
*/
trait JsonSerializable
diff --git
a/serialization-jackson/src/test/java/jdoc/org/apache/pekko/serialization/jackson/MySerializable.java
b/serialization-jackson/src/test/java/jdoc/org/apache/pekko/serialization/jackson/MySerializable.java
index eb59e1b07e..a142e7d075 100644
---
a/serialization-jackson/src/test/java/jdoc/org/apache/pekko/serialization/jackson/MySerializable.java
+++
b/serialization-jackson/src/test/java/jdoc/org/apache/pekko/serialization/jackson/MySerializable.java
@@ -14,10 +14,9 @@
package jdoc.org.apache.pekko.serialization.jackson;
// #marker-interface
-/** Marker interface for messages, events and snapshots that are serialized
with Jackson. */
-public interface MySerializable {}
+import org.apache.pekko.serialization.jackson.JsonSerializable;
-class MyMessage implements MySerializable {
+class MyMessage implements JsonSerializable {
public final String name;
public final int nr;
diff --git
a/serialization-jackson/src/test/java/jdoc/org/apache/pekko/serialization/jackson/SerializationDocTest.java
b/serialization-jackson/src/test/java/jdoc/org/apache/pekko/serialization/jackson/SerializationDocTest.java
index 9b06ea5274..573c81e71d 100644
---
a/serialization-jackson/src/test/java/jdoc/org/apache/pekko/serialization/jackson/SerializationDocTest.java
+++
b/serialization-jackson/src/test/java/jdoc/org/apache/pekko/serialization/jackson/SerializationDocTest.java
@@ -13,6 +13,8 @@
package jdoc.org.apache.pekko.serialization.jackson;
+import org.apache.pekko.serialization.jackson.JsonSerializable;
+
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonSubTypes;
@@ -23,7 +25,7 @@ public class SerializationDocTest {
interface OneConstructorParamExample1 {
// #one-constructor-param-1
- public class SimpleCommand implements MySerializable {
+ public class SimpleCommand implements JsonSerializable {
private final String name;
public SimpleCommand(String name) {
@@ -35,7 +37,7 @@ public class SerializationDocTest {
interface OneConstructorParamExample2 {
// #one-constructor-param-2
- public class SimpleCommand implements MySerializable {
+ public class SimpleCommand implements JsonSerializable {
private final String name;
@JsonCreator
@@ -48,7 +50,7 @@ public class SerializationDocTest {
interface OneConstructorParamExample3 {
// #one-constructor-param-3
- public class SimpleCommand implements MySerializable {
+ public class SimpleCommand implements JsonSerializable {
private final String name;
public SimpleCommand(@JsonProperty("name") String name) {
@@ -60,7 +62,7 @@ public class SerializationDocTest {
interface Polymorphism {
// #polymorphism
- public class Zoo implements MySerializable {
+ public class Zoo implements JsonSerializable {
public final Animal primaryAttraction;
@JsonCreator
diff --git
a/serialization-jackson/src/test/java/jdoc/org/apache/pekko/serialization/jackson/v1/Customer.java
b/serialization-jackson/src/test/java/jdoc/org/apache/pekko/serialization/jackson/v1/Customer.java
index 6605501967..b3fb75c242 100644
---
a/serialization-jackson/src/test/java/jdoc/org/apache/pekko/serialization/jackson/v1/Customer.java
+++
b/serialization-jackson/src/test/java/jdoc/org/apache/pekko/serialization/jackson/v1/Customer.java
@@ -13,10 +13,10 @@
package jdoc.org.apache.pekko.serialization.jackson.v1;
-import jdoc.org.apache.pekko.serialization.jackson.MySerializable;
+import org.apache.pekko.serialization.jackson.JsonSerializable;
// #structural
-public class Customer implements MySerializable {
+public class Customer implements JsonSerializable {
public final String name;
public final String street;
public final String city;
diff --git
a/serialization-jackson/src/test/java/jdoc/org/apache/pekko/serialization/jackson/v1/ItemAdded.java
b/serialization-jackson/src/test/java/jdoc/org/apache/pekko/serialization/jackson/v1/ItemAdded.java
index 097b081130..6ca79b8b1f 100644
---
a/serialization-jackson/src/test/java/jdoc/org/apache/pekko/serialization/jackson/v1/ItemAdded.java
+++
b/serialization-jackson/src/test/java/jdoc/org/apache/pekko/serialization/jackson/v1/ItemAdded.java
@@ -13,11 +13,11 @@
package jdoc.org.apache.pekko.serialization.jackson.v1;
-import jdoc.org.apache.pekko.serialization.jackson.MySerializable;
+import org.apache.pekko.serialization.jackson.JsonSerializable;
// #add-optional
// #forward-one-rename
-public class ItemAdded implements MySerializable {
+public class ItemAdded implements JsonSerializable {
public final String shoppingCartId;
public final String productId;
public final int quantity;
diff --git
a/serialization-jackson/src/test/java/jdoc/org/apache/pekko/serialization/jackson/v1/OrderAdded.java
b/serialization-jackson/src/test/java/jdoc/org/apache/pekko/serialization/jackson/v1/OrderAdded.java
index f1b3037b25..e3a76b61b8 100644
---
a/serialization-jackson/src/test/java/jdoc/org/apache/pekko/serialization/jackson/v1/OrderAdded.java
+++
b/serialization-jackson/src/test/java/jdoc/org/apache/pekko/serialization/jackson/v1/OrderAdded.java
@@ -14,10 +14,10 @@
package jdoc.org.apache.pekko.serialization.jackson.v1;
import com.fasterxml.jackson.annotation.JsonCreator;
-import jdoc.org.apache.pekko.serialization.jackson.MySerializable;
+import org.apache.pekko.serialization.jackson.JsonSerializable;
// #rename-class
-public class OrderAdded implements MySerializable {
+public class OrderAdded implements JsonSerializable {
public final String shoppingCartId;
@JsonCreator
diff --git
a/serialization-jackson/src/test/java/jdoc/org/apache/pekko/serialization/jackson/v2a/Customer.java
b/serialization-jackson/src/test/java/jdoc/org/apache/pekko/serialization/jackson/v2a/Customer.java
index 2eb2241303..c3b3f5c14a 100644
---
a/serialization-jackson/src/test/java/jdoc/org/apache/pekko/serialization/jackson/v2a/Customer.java
+++
b/serialization-jackson/src/test/java/jdoc/org/apache/pekko/serialization/jackson/v2a/Customer.java
@@ -14,10 +14,10 @@
package jdoc.org.apache.pekko.serialization.jackson.v2a;
import java.util.Optional;
-import jdoc.org.apache.pekko.serialization.jackson.MySerializable;
+import org.apache.pekko.serialization.jackson.JsonSerializable;
// #structural
-public class Customer implements MySerializable {
+public class Customer implements JsonSerializable {
public final String name;
public final Address shippingAddress;
public final Optional<Address> billingAddress;
diff --git
a/serialization-jackson/src/test/java/jdoc/org/apache/pekko/serialization/jackson/v2a/ItemAdded.java
b/serialization-jackson/src/test/java/jdoc/org/apache/pekko/serialization/jackson/v2a/ItemAdded.java
index 4f2b4b8ca8..ee3eb145ca 100644
---
a/serialization-jackson/src/test/java/jdoc/org/apache/pekko/serialization/jackson/v2a/ItemAdded.java
+++
b/serialization-jackson/src/test/java/jdoc/org/apache/pekko/serialization/jackson/v2a/ItemAdded.java
@@ -15,10 +15,10 @@ package jdoc.org.apache.pekko.serialization.jackson.v2a;
import com.fasterxml.jackson.annotation.JsonCreator;
import java.util.Optional;
-import jdoc.org.apache.pekko.serialization.jackson.MySerializable;
+import org.apache.pekko.serialization.jackson.JsonSerializable;
// #add-optional
-public class ItemAdded implements MySerializable {
+public class ItemAdded implements JsonSerializable {
public final String shoppingCartId;
public final String productId;
public final int quantity;
diff --git
a/serialization-jackson/src/test/java/jdoc/org/apache/pekko/serialization/jackson/v2a/OrderPlaced.java
b/serialization-jackson/src/test/java/jdoc/org/apache/pekko/serialization/jackson/v2a/OrderPlaced.java
index 0b206f3ba4..c031415998 100644
---
a/serialization-jackson/src/test/java/jdoc/org/apache/pekko/serialization/jackson/v2a/OrderPlaced.java
+++
b/serialization-jackson/src/test/java/jdoc/org/apache/pekko/serialization/jackson/v2a/OrderPlaced.java
@@ -14,10 +14,10 @@
package jdoc.org.apache.pekko.serialization.jackson.v2a;
import com.fasterxml.jackson.annotation.JsonCreator;
-import jdoc.org.apache.pekko.serialization.jackson.MySerializable;
+import org.apache.pekko.serialization.jackson.JsonSerializable;
// #rename-class
-public class OrderPlaced implements MySerializable {
+public class OrderPlaced implements JsonSerializable {
public final String shoppingCartId;
@JsonCreator
diff --git
a/serialization-jackson/src/test/java/jdoc/org/apache/pekko/serialization/jackson/v2b/ItemAdded.java
b/serialization-jackson/src/test/java/jdoc/org/apache/pekko/serialization/jackson/v2b/ItemAdded.java
index 2b3f6dec84..301df2a73a 100644
---
a/serialization-jackson/src/test/java/jdoc/org/apache/pekko/serialization/jackson/v2b/ItemAdded.java
+++
b/serialization-jackson/src/test/java/jdoc/org/apache/pekko/serialization/jackson/v2b/ItemAdded.java
@@ -13,10 +13,10 @@
package jdoc.org.apache.pekko.serialization.jackson.v2b;
-import jdoc.org.apache.pekko.serialization.jackson.MySerializable;
+import org.apache.pekko.serialization.jackson.JsonSerializable;
// #add-mandatory
-public class ItemAdded implements MySerializable {
+public class ItemAdded implements JsonSerializable {
public final String shoppingCartId;
public final String productId;
public final int quantity;
diff --git
a/serialization-jackson/src/test/java/jdoc/org/apache/pekko/serialization/jackson/v2c/ItemAdded.java
b/serialization-jackson/src/test/java/jdoc/org/apache/pekko/serialization/jackson/v2c/ItemAdded.java
index 38b260c85c..7ee1652f6d 100644
---
a/serialization-jackson/src/test/java/jdoc/org/apache/pekko/serialization/jackson/v2c/ItemAdded.java
+++
b/serialization-jackson/src/test/java/jdoc/org/apache/pekko/serialization/jackson/v2c/ItemAdded.java
@@ -13,10 +13,10 @@
package jdoc.org.apache.pekko.serialization.jackson.v2c;
-import jdoc.org.apache.pekko.serialization.jackson.MySerializable;
+import org.apache.pekko.serialization.jackson.JsonSerializable;
// #rename
-public class ItemAdded implements MySerializable {
+public class ItemAdded implements JsonSerializable {
public final String shoppingCartId;
public final String itemId;
diff --git a/serialization-jackson/src/test/resources/reference.conf
b/serialization-jackson/src/test/resources/reference.conf
deleted file mode 100644
index 66ebe312d1..0000000000
--- a/serialization-jackson/src/test/resources/reference.conf
+++ /dev/null
@@ -1,10 +0,0 @@
-# SPDX-License-Identifier: Apache-2.0
-
-pekko {
- actor {
- serialization-bindings {
- "org.apache.pekko.serialization.jackson.CborSerializable" = jackson-cbor
- "org.apache.pekko.serialization.jackson.JsonSerializable" = jackson-json
- }
- }
-}
diff --git
a/serialization-jackson/src/test/scala/doc/org/apache/pekko/serialization/jackson/CustomAdtSerializer.scala
b/serialization-jackson/src/test/scala/doc/org/apache/pekko/serialization/jackson/CustomAdtSerializer.scala
index ef7eb10d1c..c4585b8454 100644
---
a/serialization-jackson/src/test/scala/doc/org/apache/pekko/serialization/jackson/CustomAdtSerializer.scala
+++
b/serialization-jackson/src/test/scala/doc/org/apache/pekko/serialization/jackson/CustomAdtSerializer.scala
@@ -13,6 +13,8 @@
package doc.org.apache.pekko.serialization.jackson
+import org.apache.pekko.serialization.jackson.JsonSerializable
+
object CustomAdtSerializer {
// #adt-trait-object
@@ -63,6 +65,6 @@ object CustomAdtSerializer {
}
}
- final case class Compass(currentDirection: Direction) extends MySerializable
+ final case class Compass(currentDirection: Direction) extends
JsonSerializable
// #adt-trait-object
}
diff --git
a/serialization-jackson/src/test/scala/doc/org/apache/pekko/serialization/jackson/SerializationDocSpec.scala
b/serialization-jackson/src/test/scala/doc/org/apache/pekko/serialization/jackson/SerializationDocSpec.scala
index 67e435aeec..864ead3822 100644
---
a/serialization-jackson/src/test/scala/doc/org/apache/pekko/serialization/jackson/SerializationDocSpec.scala
+++
b/serialization-jackson/src/test/scala/doc/org/apache/pekko/serialization/jackson/SerializationDocSpec.scala
@@ -33,12 +33,9 @@ import org.scalatest.matchers.should.Matchers
import org.scalatest.wordspec.AnyWordSpecLike
//#marker-interface
-/**
- * Marker interface for messages, events and snapshots that are serialized
with Jackson.
- */
-trait MySerializable
+import org.apache.pekko.serialization.jackson.JsonSerializable
-final case class Message(name: String, nr: Int) extends MySerializable
+final case class Message(name: String, nr: Int) extends JsonSerializable
//#marker-interface
object SerializationDocSpec {
@@ -142,7 +139,7 @@ object SerializationDocSpec {
object Polymorphism {
// #polymorphism
- final case class Zoo(primaryAttraction: Animal) extends MySerializable
+ final case class Zoo(primaryAttraction: Animal) extends JsonSerializable
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type")
@JsonSubTypes(
@@ -160,7 +157,7 @@ object SerializationDocSpec {
object PolymorphismMixedClassObject {
// #polymorphism-case-object
- final case class Zoo(primaryAttraction: Animal) extends MySerializable
+ final case class Zoo(primaryAttraction: Animal) extends JsonSerializable
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type")
@JsonSubTypes(
@@ -223,10 +220,6 @@ class SerializationDocSpec
}
pekko.actor {
allow-java-serialization = off
- serialization-bindings {
-
"${classOf[jdoc.org.apache.pekko.serialization.jackson.MySerializable].getName}"
= jackson-json
-
"${classOf[doc.org.apache.pekko.serialization.jackson.MySerializable].getName}"
= jackson-json
- }
}
""")))
with AnyWordSpecLike
diff --git
a/serialization-jackson/src/test/scala/doc/org/apache/pekko/serialization/jackson/v1/Customer.scala
b/serialization-jackson/src/test/scala/doc/org/apache/pekko/serialization/jackson/v1/Customer.scala
index dac7a014bf..43d5666d1f 100644
---
a/serialization-jackson/src/test/scala/doc/org/apache/pekko/serialization/jackson/v1/Customer.scala
+++
b/serialization-jackson/src/test/scala/doc/org/apache/pekko/serialization/jackson/v1/Customer.scala
@@ -13,8 +13,9 @@
package doc.org.apache.pekko.serialization.jackson.v1
-import doc.org.apache.pekko.serialization.jackson.MySerializable
+import org.apache.pekko.serialization.jackson.JsonSerializable
// #structural
-case class Customer(name: String, street: String, city: String, zipCode:
String, country: String) extends MySerializable
+case class Customer(name: String, street: String, city: String, zipCode:
String, country: String)
+ extends JsonSerializable
// #structural
diff --git
a/serialization-jackson/src/test/scala/doc/org/apache/pekko/serialization/jackson/v1/ItemAdded.scala
b/serialization-jackson/src/test/scala/doc/org/apache/pekko/serialization/jackson/v1/ItemAdded.scala
index a2c050ecc1..849f86d68e 100644
---
a/serialization-jackson/src/test/scala/doc/org/apache/pekko/serialization/jackson/v1/ItemAdded.scala
+++
b/serialization-jackson/src/test/scala/doc/org/apache/pekko/serialization/jackson/v1/ItemAdded.scala
@@ -13,10 +13,10 @@
package doc.org.apache.pekko.serialization.jackson.v1
-import doc.org.apache.pekko.serialization.jackson.MySerializable
+import org.apache.pekko.serialization.jackson.JsonSerializable
// #add-optional
// #forward-one-rename
-case class ItemAdded(shoppingCartId: String, productId: String, quantity: Int)
extends MySerializable
+case class ItemAdded(shoppingCartId: String, productId: String, quantity: Int)
extends JsonSerializable
// #forward-one-rename
// #add-optional
diff --git
a/serialization-jackson/src/test/scala/doc/org/apache/pekko/serialization/jackson/v1/OrderAdded.scala
b/serialization-jackson/src/test/scala/doc/org/apache/pekko/serialization/jackson/v1/OrderAdded.scala
index 07a3500bc8..2a39b3f489 100644
---
a/serialization-jackson/src/test/scala/doc/org/apache/pekko/serialization/jackson/v1/OrderAdded.scala
+++
b/serialization-jackson/src/test/scala/doc/org/apache/pekko/serialization/jackson/v1/OrderAdded.scala
@@ -13,8 +13,8 @@
package doc.org.apache.pekko.serialization.jackson.v1
-import doc.org.apache.pekko.serialization.jackson.MySerializable
+import org.apache.pekko.serialization.jackson.JsonSerializable
// #rename-class
-case class OrderAdded(shoppingCartId: String) extends MySerializable
+case class OrderAdded(shoppingCartId: String) extends JsonSerializable
// #rename-class
diff --git
a/serialization-jackson/src/test/scala/doc/org/apache/pekko/serialization/jackson/v2a/Address.scala
b/serialization-jackson/src/test/scala/doc/org/apache/pekko/serialization/jackson/v2a/Address.scala
index aaaf4dff9f..9ca3b8ca8c 100644
---
a/serialization-jackson/src/test/scala/doc/org/apache/pekko/serialization/jackson/v2a/Address.scala
+++
b/serialization-jackson/src/test/scala/doc/org/apache/pekko/serialization/jackson/v2a/Address.scala
@@ -13,8 +13,8 @@
package doc.org.apache.pekko.serialization.jackson.v2a
-import doc.org.apache.pekko.serialization.jackson.MySerializable
+import org.apache.pekko.serialization.jackson.JsonSerializable
// #structural
-case class Address(street: String, city: String, zipCode: String, country:
String) extends MySerializable
+case class Address(street: String, city: String, zipCode: String, country:
String) extends JsonSerializable
// #structural
diff --git
a/serialization-jackson/src/test/scala/doc/org/apache/pekko/serialization/jackson/v2a/Customer.scala
b/serialization-jackson/src/test/scala/doc/org/apache/pekko/serialization/jackson/v2a/Customer.scala
index 6f2de29938..cb664196a8 100644
---
a/serialization-jackson/src/test/scala/doc/org/apache/pekko/serialization/jackson/v2a/Customer.scala
+++
b/serialization-jackson/src/test/scala/doc/org/apache/pekko/serialization/jackson/v2a/Customer.scala
@@ -13,8 +13,8 @@
package doc.org.apache.pekko.serialization.jackson.v2a
-import doc.org.apache.pekko.serialization.jackson.MySerializable
+import org.apache.pekko.serialization.jackson.JsonSerializable
// #structural
-case class Customer(name: String, shippingAddress: Address, billingAddress:
Option[Address]) extends MySerializable
+case class Customer(name: String, shippingAddress: Address, billingAddress:
Option[Address]) extends JsonSerializable
// #structural
diff --git
a/serialization-jackson/src/test/scala/doc/org/apache/pekko/serialization/jackson/v2a/ItemAdded.scala
b/serialization-jackson/src/test/scala/doc/org/apache/pekko/serialization/jackson/v2a/ItemAdded.scala
index d67fa3278f..8e846cc1ab 100644
---
a/serialization-jackson/src/test/scala/doc/org/apache/pekko/serialization/jackson/v2a/ItemAdded.scala
+++
b/serialization-jackson/src/test/scala/doc/org/apache/pekko/serialization/jackson/v2a/ItemAdded.scala
@@ -14,11 +14,11 @@
package doc.org.apache.pekko.serialization.jackson.v2a
import com.fasterxml.jackson.annotation.JsonCreator
-import jdoc.org.apache.pekko.serialization.jackson.MySerializable
+import org.apache.pekko.serialization.jackson.JsonSerializable
// #add-optional
case class ItemAdded(shoppingCartId: String, productId: String, quantity: Int,
discount: Option[Double], note: String)
- extends MySerializable {
+ extends JsonSerializable {
// alternative constructor because `note` should have default value "" when
not defined in json
@JsonCreator
diff --git
a/serialization-jackson/src/test/scala/doc/org/apache/pekko/serialization/jackson/v2a/OrderPlaced.scala
b/serialization-jackson/src/test/scala/doc/org/apache/pekko/serialization/jackson/v2a/OrderPlaced.scala
index 024e188ef0..224e69b6ae 100644
---
a/serialization-jackson/src/test/scala/doc/org/apache/pekko/serialization/jackson/v2a/OrderPlaced.scala
+++
b/serialization-jackson/src/test/scala/doc/org/apache/pekko/serialization/jackson/v2a/OrderPlaced.scala
@@ -13,8 +13,8 @@
package doc.org.apache.pekko.serialization.jackson.v2a
-import doc.org.apache.pekko.serialization.jackson.MySerializable
+import org.apache.pekko.serialization.jackson.JsonSerializable
// #rename-class
-case class OrderPlaced(shoppingCartId: String) extends MySerializable
+case class OrderPlaced(shoppingCartId: String) extends JsonSerializable
// #rename-class
diff --git
a/serialization-jackson/src/test/scala/doc/org/apache/pekko/serialization/jackson/v2b/ItemAdded.scala
b/serialization-jackson/src/test/scala/doc/org/apache/pekko/serialization/jackson/v2b/ItemAdded.scala
index bec83d65aa..7adbfc9784 100644
---
a/serialization-jackson/src/test/scala/doc/org/apache/pekko/serialization/jackson/v2b/ItemAdded.scala
+++
b/serialization-jackson/src/test/scala/doc/org/apache/pekko/serialization/jackson/v2b/ItemAdded.scala
@@ -13,8 +13,9 @@
package doc.org.apache.pekko.serialization.jackson.v2b
-import jdoc.org.apache.pekko.serialization.jackson.MySerializable
+import org.apache.pekko.serialization.jackson.JsonSerializable
// #add-mandatory
-case class ItemAdded(shoppingCartId: String, productId: String, quantity: Int,
discount: Double) extends MySerializable
+case class ItemAdded(shoppingCartId: String, productId: String, quantity: Int,
discount: Double)
+ extends JsonSerializable
// #add-mandatory
diff --git
a/serialization-jackson/src/test/scala/doc/org/apache/pekko/serialization/jackson/v2c/ItemAdded.scala
b/serialization-jackson/src/test/scala/doc/org/apache/pekko/serialization/jackson/v2c/ItemAdded.scala
index 27ae37664b..35d99f2e27 100644
---
a/serialization-jackson/src/test/scala/doc/org/apache/pekko/serialization/jackson/v2c/ItemAdded.scala
+++
b/serialization-jackson/src/test/scala/doc/org/apache/pekko/serialization/jackson/v2c/ItemAdded.scala
@@ -13,8 +13,8 @@
package doc.org.apache.pekko.serialization.jackson.v2c
-import doc.org.apache.pekko.serialization.jackson.MySerializable
+import org.apache.pekko.serialization.jackson.JsonSerializable
// #rename
-case class ItemAdded(shoppingCartId: String, itemId: String, quantity: Int)
extends MySerializable
+case class ItemAdded(shoppingCartId: String, itemId: String, quantity: Int)
extends JsonSerializable
// #rename
diff --git
a/serialization-jackson/src/test/scala/org/apache/pekko/serialization/jackson/JacksonSerializerSpec.scala
b/serialization-jackson/src/test/scala/org/apache/pekko/serialization/jackson/JacksonSerializerSpec.scala
index 59b74adb7f..6701651dc3 100644
---
a/serialization-jackson/src/test/scala/org/apache/pekko/serialization/jackson/JacksonSerializerSpec.scala
+++
b/serialization-jackson/src/test/scala/org/apache/pekko/serialization/jackson/JacksonSerializerSpec.scala
@@ -172,6 +172,11 @@ object ScalaTestMessages {
extends TestMessage
}
+object PredefinedMarkerMessages {
+ final case class JsonMarked(name: String) extends JsonSerializable
+ final case class CborMarked(name: String) extends CborSerializable
+}
+
class JacksonCborSerializerSpec extends JacksonSerializerSpec("jackson-cbor") {
"have compression disabled by default" in {
val conf = JacksonObjectMapperProvider.configForBinding("jackson-cbor",
system.settings.config)
@@ -199,6 +204,31 @@ class JacksonJsonSerializerSpec extends
JacksonSerializerSpec("jackson-json") {
"JacksonJsonSerializer" must {
+ "bind the predefined JsonSerializable and CborSerializable markers in
reference.conf" in {
+ import PredefinedMarkerMessages._
+ // only the reference.conf files, no test specific serialization-bindings
+ val sys = ActorSystem("PredefinedMarkers",
ConfigFactory.defaultReference())
+ try {
+ val ser = SerializationExtension(sys)
+ ser.serializerFor(classOf[JsonMarked]).getClass should
===(classOf[JacksonJsonSerializer])
+ ser.serializerFor(classOf[CborMarked]).getClass should
===(classOf[JacksonCborSerializer])
+
+ val jsonMsg = JsonMarked("json")
+ val jsonSerializer =
ser.findSerializerFor(jsonMsg).asInstanceOf[SerializerWithStringManifest]
+ ser.deserialize(
+ jsonSerializer.toBinary(jsonMsg),
+ jsonSerializer.identifier,
+ jsonSerializer.manifest(jsonMsg)).get should ===(jsonMsg)
+
+ val cborMsg = CborMarked("cbor")
+ val cborSerializer =
ser.findSerializerFor(cborMsg).asInstanceOf[SerializerWithStringManifest]
+ ser.deserialize(
+ cborSerializer.toBinary(cborMsg),
+ cborSerializer.identifier,
+ cborSerializer.manifest(cborMsg)).get should ===(cborMsg)
+ } finally shutdown(sys)
+ }
+
"support lookup of same ObjectMapper via JacksonObjectMapperProvider" in {
val mapper = serialization()
.serializerFor(classOf[JavaTestMessages.TestMessage])
diff --git a/serialization-jackson3/src/main/resources/reference.conf
b/serialization-jackson3/src/main/resources/reference.conf
index 1c6a022a7f..35c550633f 100644
--- a/serialization-jackson3/src/main/resources/reference.conf
+++ b/serialization-jackson3/src/main/resources/reference.conf
@@ -277,5 +277,8 @@ pekko.actor {
# open ended types that might be target to be deserialization gadgets,
such as
# java.lang.Object, java.io.Serializable, java.util.Comparable
+ # Predefined marker traits/interfaces
+ "org.apache.pekko.serialization.jackson3.JsonSerializable" = jackson-json
+ "org.apache.pekko.serialization.jackson3.CborSerializable" = jackson-cbor
}
}
diff --git
a/serialization-jackson3/src/test/scala/org/apache/pekko/serialization/jackson3/CborSerializable.scala
b/serialization-jackson3/src/main/scala/org/apache/pekko/serialization/jackson3/CborSerializable.scala
similarity index 60%
rename from
serialization-jackson3/src/test/scala/org/apache/pekko/serialization/jackson3/CborSerializable.scala
rename to
serialization-jackson3/src/main/scala/org/apache/pekko/serialization/jackson3/CborSerializable.scala
index 5c3cb6dc6a..303c358c46 100644
---
a/serialization-jackson3/src/test/scala/org/apache/pekko/serialization/jackson3/CborSerializable.scala
+++
b/serialization-jackson3/src/main/scala/org/apache/pekko/serialization/jackson3/CborSerializable.scala
@@ -14,6 +14,10 @@
package org.apache.pekko.serialization.jackson3
/**
- * Marker trait for serialization with Jackson CBOR in tests
+ * Predefined marker trait for serialization with Jackson CBOR.
+ *
+ * Messages, events and snapshots that extend/implement this marker are
serialized with the
+ * `jackson-cbor` serializer, since it is bound in
`pekko.actor.serialization-bindings`
+ * in the `reference.conf` of this module.
*/
trait CborSerializable
diff --git
a/serialization-jackson3/src/test/scala/org/apache/pekko/serialization/jackson3/JsonSerializable.scala
b/serialization-jackson3/src/main/scala/org/apache/pekko/serialization/jackson3/JsonSerializable.scala
similarity index 60%
rename from
serialization-jackson3/src/test/scala/org/apache/pekko/serialization/jackson3/JsonSerializable.scala
rename to
serialization-jackson3/src/main/scala/org/apache/pekko/serialization/jackson3/JsonSerializable.scala
index 0d893bc0f5..1b2e67be68 100644
---
a/serialization-jackson3/src/test/scala/org/apache/pekko/serialization/jackson3/JsonSerializable.scala
+++
b/serialization-jackson3/src/main/scala/org/apache/pekko/serialization/jackson3/JsonSerializable.scala
@@ -14,6 +14,10 @@
package org.apache.pekko.serialization.jackson3
/**
- * Marker trait for serialization with Jackson JSON in tests
+ * Predefined marker trait for serialization with Jackson JSON.
+ *
+ * Messages, events and snapshots that extend/implement this marker are
serialized with the
+ * `jackson-json` serializer, since it is bound in
`pekko.actor.serialization-bindings`
+ * in the `reference.conf` of this module.
*/
trait JsonSerializable
diff --git
a/serialization-jackson3/src/test/java/jdoc/org/apache/pekko/serialization/jackson3/MySerializable.java
b/serialization-jackson3/src/test/java/jdoc/org/apache/pekko/serialization/jackson3/MySerializable.java
index 0a7ae60eb0..2125b5951e 100644
---
a/serialization-jackson3/src/test/java/jdoc/org/apache/pekko/serialization/jackson3/MySerializable.java
+++
b/serialization-jackson3/src/test/java/jdoc/org/apache/pekko/serialization/jackson3/MySerializable.java
@@ -14,10 +14,9 @@
package jdoc.org.apache.pekko.serialization.jackson3;
// #marker-interface
-/** Marker interface for messages, events and snapshots that are serialized
with Jackson. */
-public interface MySerializable {}
+import org.apache.pekko.serialization.jackson3.JsonSerializable;
-class MyMessage implements MySerializable {
+class MyMessage implements JsonSerializable {
public final String name;
public final int nr;
diff --git
a/serialization-jackson3/src/test/java/jdoc/org/apache/pekko/serialization/jackson3/SerializationDocTest.java
b/serialization-jackson3/src/test/java/jdoc/org/apache/pekko/serialization/jackson3/SerializationDocTest.java
index 54e8d3dde7..3a8ffedeb9 100644
---
a/serialization-jackson3/src/test/java/jdoc/org/apache/pekko/serialization/jackson3/SerializationDocTest.java
+++
b/serialization-jackson3/src/test/java/jdoc/org/apache/pekko/serialization/jackson3/SerializationDocTest.java
@@ -13,6 +13,8 @@
package jdoc.org.apache.pekko.serialization.jackson3;
+import org.apache.pekko.serialization.jackson3.JsonSerializable;
+
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonSubTypes;
@@ -23,7 +25,7 @@ public class SerializationDocTest {
interface OneConstructorParamExample1 {
// #one-constructor-param-1
- public class SimpleCommand implements MySerializable {
+ public class SimpleCommand implements JsonSerializable {
private final String name;
public SimpleCommand(String name) {
@@ -35,7 +37,7 @@ public class SerializationDocTest {
interface OneConstructorParamExample2 {
// #one-constructor-param-2
- public class SimpleCommand implements MySerializable {
+ public class SimpleCommand implements JsonSerializable {
private final String name;
@JsonCreator
@@ -48,7 +50,7 @@ public class SerializationDocTest {
interface OneConstructorParamExample3 {
// #one-constructor-param-3
- public class SimpleCommand implements MySerializable {
+ public class SimpleCommand implements JsonSerializable {
private final String name;
public SimpleCommand(@JsonProperty("name") String name) {
@@ -60,7 +62,7 @@ public class SerializationDocTest {
interface Polymorphism {
// #polymorphism
- public class Zoo implements MySerializable {
+ public class Zoo implements JsonSerializable {
public final Animal primaryAttraction;
@JsonCreator
diff --git
a/serialization-jackson3/src/test/java/jdoc/org/apache/pekko/serialization/jackson3/v1/Customer.java
b/serialization-jackson3/src/test/java/jdoc/org/apache/pekko/serialization/jackson3/v1/Customer.java
index 90684b23f1..7bdae3be17 100644
---
a/serialization-jackson3/src/test/java/jdoc/org/apache/pekko/serialization/jackson3/v1/Customer.java
+++
b/serialization-jackson3/src/test/java/jdoc/org/apache/pekko/serialization/jackson3/v1/Customer.java
@@ -13,10 +13,10 @@
package jdoc.org.apache.pekko.serialization.jackson3.v1;
-import jdoc.org.apache.pekko.serialization.jackson3.MySerializable;
+import org.apache.pekko.serialization.jackson3.JsonSerializable;
// #structural
-public class Customer implements MySerializable {
+public class Customer implements JsonSerializable {
public final String name;
public final String street;
public final String city;
diff --git
a/serialization-jackson3/src/test/java/jdoc/org/apache/pekko/serialization/jackson3/v1/ItemAdded.java
b/serialization-jackson3/src/test/java/jdoc/org/apache/pekko/serialization/jackson3/v1/ItemAdded.java
index d24fc43eca..5f2f56bfb6 100644
---
a/serialization-jackson3/src/test/java/jdoc/org/apache/pekko/serialization/jackson3/v1/ItemAdded.java
+++
b/serialization-jackson3/src/test/java/jdoc/org/apache/pekko/serialization/jackson3/v1/ItemAdded.java
@@ -13,11 +13,11 @@
package jdoc.org.apache.pekko.serialization.jackson3.v1;
-import jdoc.org.apache.pekko.serialization.jackson3.MySerializable;
+import org.apache.pekko.serialization.jackson3.JsonSerializable;
// #add-optional
// #forward-one-rename
-public class ItemAdded implements MySerializable {
+public class ItemAdded implements JsonSerializable {
public final String shoppingCartId;
public final String productId;
public final int quantity;
diff --git
a/serialization-jackson3/src/test/java/jdoc/org/apache/pekko/serialization/jackson3/v1/OrderAdded.java
b/serialization-jackson3/src/test/java/jdoc/org/apache/pekko/serialization/jackson3/v1/OrderAdded.java
index b43c7edd10..2ed8e1034c 100644
---
a/serialization-jackson3/src/test/java/jdoc/org/apache/pekko/serialization/jackson3/v1/OrderAdded.java
+++
b/serialization-jackson3/src/test/java/jdoc/org/apache/pekko/serialization/jackson3/v1/OrderAdded.java
@@ -14,10 +14,10 @@
package jdoc.org.apache.pekko.serialization.jackson3.v1;
import com.fasterxml.jackson.annotation.JsonCreator;
-import jdoc.org.apache.pekko.serialization.jackson3.MySerializable;
+import org.apache.pekko.serialization.jackson3.JsonSerializable;
// #rename-class
-public class OrderAdded implements MySerializable {
+public class OrderAdded implements JsonSerializable {
public final String shoppingCartId;
@JsonCreator
diff --git
a/serialization-jackson3/src/test/java/jdoc/org/apache/pekko/serialization/jackson3/v2a/Customer.java
b/serialization-jackson3/src/test/java/jdoc/org/apache/pekko/serialization/jackson3/v2a/Customer.java
index f060290c14..1755f0211f 100644
---
a/serialization-jackson3/src/test/java/jdoc/org/apache/pekko/serialization/jackson3/v2a/Customer.java
+++
b/serialization-jackson3/src/test/java/jdoc/org/apache/pekko/serialization/jackson3/v2a/Customer.java
@@ -14,10 +14,10 @@
package jdoc.org.apache.pekko.serialization.jackson3.v2a;
import java.util.Optional;
-import jdoc.org.apache.pekko.serialization.jackson3.MySerializable;
+import org.apache.pekko.serialization.jackson3.JsonSerializable;
// #structural
-public class Customer implements MySerializable {
+public class Customer implements JsonSerializable {
public final String name;
public final Address shippingAddress;
public final Optional<Address> billingAddress;
diff --git
a/serialization-jackson3/src/test/java/jdoc/org/apache/pekko/serialization/jackson3/v2a/ItemAdded.java
b/serialization-jackson3/src/test/java/jdoc/org/apache/pekko/serialization/jackson3/v2a/ItemAdded.java
index 1018999b76..c26a3acb5a 100644
---
a/serialization-jackson3/src/test/java/jdoc/org/apache/pekko/serialization/jackson3/v2a/ItemAdded.java
+++
b/serialization-jackson3/src/test/java/jdoc/org/apache/pekko/serialization/jackson3/v2a/ItemAdded.java
@@ -15,10 +15,10 @@ package jdoc.org.apache.pekko.serialization.jackson3.v2a;
import com.fasterxml.jackson.annotation.JsonCreator;
import java.util.Optional;
-import jdoc.org.apache.pekko.serialization.jackson3.MySerializable;
+import org.apache.pekko.serialization.jackson3.JsonSerializable;
// #add-optional
-public class ItemAdded implements MySerializable {
+public class ItemAdded implements JsonSerializable {
public final String shoppingCartId;
public final String productId;
public final int quantity;
diff --git
a/serialization-jackson3/src/test/java/jdoc/org/apache/pekko/serialization/jackson3/v2a/OrderPlaced.java
b/serialization-jackson3/src/test/java/jdoc/org/apache/pekko/serialization/jackson3/v2a/OrderPlaced.java
index adc5bbbb9e..e8807bde45 100644
---
a/serialization-jackson3/src/test/java/jdoc/org/apache/pekko/serialization/jackson3/v2a/OrderPlaced.java
+++
b/serialization-jackson3/src/test/java/jdoc/org/apache/pekko/serialization/jackson3/v2a/OrderPlaced.java
@@ -14,10 +14,10 @@
package jdoc.org.apache.pekko.serialization.jackson3.v2a;
import com.fasterxml.jackson.annotation.JsonCreator;
-import jdoc.org.apache.pekko.serialization.jackson3.MySerializable;
+import org.apache.pekko.serialization.jackson3.JsonSerializable;
// #rename-class
-public class OrderPlaced implements MySerializable {
+public class OrderPlaced implements JsonSerializable {
public final String shoppingCartId;
@JsonCreator
diff --git
a/serialization-jackson3/src/test/java/jdoc/org/apache/pekko/serialization/jackson3/v2b/ItemAdded.java
b/serialization-jackson3/src/test/java/jdoc/org/apache/pekko/serialization/jackson3/v2b/ItemAdded.java
index f8fa4fa461..68d7585349 100644
---
a/serialization-jackson3/src/test/java/jdoc/org/apache/pekko/serialization/jackson3/v2b/ItemAdded.java
+++
b/serialization-jackson3/src/test/java/jdoc/org/apache/pekko/serialization/jackson3/v2b/ItemAdded.java
@@ -13,10 +13,10 @@
package jdoc.org.apache.pekko.serialization.jackson3.v2b;
-import jdoc.org.apache.pekko.serialization.jackson3.MySerializable;
+import org.apache.pekko.serialization.jackson3.JsonSerializable;
// #add-mandatory
-public class ItemAdded implements MySerializable {
+public class ItemAdded implements JsonSerializable {
public final String shoppingCartId;
public final String productId;
public final int quantity;
diff --git
a/serialization-jackson3/src/test/java/jdoc/org/apache/pekko/serialization/jackson3/v2c/ItemAdded.java
b/serialization-jackson3/src/test/java/jdoc/org/apache/pekko/serialization/jackson3/v2c/ItemAdded.java
index 7c66f06e01..b42312bab1 100644
---
a/serialization-jackson3/src/test/java/jdoc/org/apache/pekko/serialization/jackson3/v2c/ItemAdded.java
+++
b/serialization-jackson3/src/test/java/jdoc/org/apache/pekko/serialization/jackson3/v2c/ItemAdded.java
@@ -13,10 +13,10 @@
package jdoc.org.apache.pekko.serialization.jackson3.v2c;
-import jdoc.org.apache.pekko.serialization.jackson3.MySerializable;
+import org.apache.pekko.serialization.jackson3.JsonSerializable;
// #rename
-public class ItemAdded implements MySerializable {
+public class ItemAdded implements JsonSerializable {
public final String shoppingCartId;
public final String itemId;
diff --git a/serialization-jackson3/src/test/resources/reference.conf
b/serialization-jackson3/src/test/resources/reference.conf
deleted file mode 100644
index 67211c9615..0000000000
--- a/serialization-jackson3/src/test/resources/reference.conf
+++ /dev/null
@@ -1,10 +0,0 @@
-# SPDX-License-Identifier: Apache-2.0
-
-pekko {
- actor {
- serialization-bindings {
- "org.apache.pekko.serialization.jackson3.CborSerializable" = jackson-cbor
- "org.apache.pekko.serialization.jackson3.JsonSerializable" = jackson-json
- }
- }
-}
diff --git
a/serialization-jackson3/src/test/scala/doc/org/apache/pekko/serialization/jackson3/CustomAdtSerializer.scala
b/serialization-jackson3/src/test/scala/doc/org/apache/pekko/serialization/jackson3/CustomAdtSerializer.scala
index a5daf371c1..b9353d9cab 100644
---
a/serialization-jackson3/src/test/scala/doc/org/apache/pekko/serialization/jackson3/CustomAdtSerializer.scala
+++
b/serialization-jackson3/src/test/scala/doc/org/apache/pekko/serialization/jackson3/CustomAdtSerializer.scala
@@ -13,6 +13,8 @@
package doc.org.apache.pekko.serialization.jackson3
+import org.apache.pekko.serialization.jackson3.JsonSerializable
+
object CustomAdtSerializer {
// #adt-trait-object
@@ -63,6 +65,6 @@ object CustomAdtSerializer {
}
}
- final case class Compass(currentDirection: Direction) extends MySerializable
+ final case class Compass(currentDirection: Direction) extends
JsonSerializable
// #adt-trait-object
}
diff --git
a/serialization-jackson3/src/test/scala/doc/org/apache/pekko/serialization/jackson3/SerializationDocSpec.scala
b/serialization-jackson3/src/test/scala/doc/org/apache/pekko/serialization/jackson3/SerializationDocSpec.scala
index 71062fbbae..19045fadf2 100644
---
a/serialization-jackson3/src/test/scala/doc/org/apache/pekko/serialization/jackson3/SerializationDocSpec.scala
+++
b/serialization-jackson3/src/test/scala/doc/org/apache/pekko/serialization/jackson3/SerializationDocSpec.scala
@@ -33,12 +33,9 @@ import org.scalatest.matchers.should.Matchers
import org.scalatest.wordspec.AnyWordSpecLike
//#marker-interface
-/**
- * Marker interface for messages, events and snapshots that are serialized
with Jackson.
- */
-trait MySerializable
+import org.apache.pekko.serialization.jackson3.JsonSerializable
-final case class Message(name: String, nr: Int) extends MySerializable
+final case class Message(name: String, nr: Int) extends JsonSerializable
//#marker-interface
object SerializationDocSpec {
@@ -142,7 +139,7 @@ object SerializationDocSpec {
object Polymorphism {
// #polymorphism
- final case class Zoo(primaryAttraction: Animal) extends MySerializable
+ final case class Zoo(primaryAttraction: Animal) extends JsonSerializable
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type")
@JsonSubTypes(
@@ -160,7 +157,7 @@ object SerializationDocSpec {
object PolymorphismMixedClassObject {
// #polymorphism-case-object
- final case class Zoo(primaryAttraction: Animal) extends MySerializable
+ final case class Zoo(primaryAttraction: Animal) extends JsonSerializable
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type")
@JsonSubTypes(
@@ -223,10 +220,6 @@ class SerializationDocSpec
}
pekko.actor {
allow-java-serialization = off
- serialization-bindings {
-
"${classOf[jdoc.org.apache.pekko.serialization.jackson3.MySerializable].getName}"
= jackson-json
-
"${classOf[doc.org.apache.pekko.serialization.jackson3.MySerializable].getName}"
= jackson-json
- }
}
""")))
with AnyWordSpecLike
diff --git
a/serialization-jackson3/src/test/scala/doc/org/apache/pekko/serialization/jackson3/v1/Customer.scala
b/serialization-jackson3/src/test/scala/doc/org/apache/pekko/serialization/jackson3/v1/Customer.scala
index a2398e82e0..8af4360aca 100644
---
a/serialization-jackson3/src/test/scala/doc/org/apache/pekko/serialization/jackson3/v1/Customer.scala
+++
b/serialization-jackson3/src/test/scala/doc/org/apache/pekko/serialization/jackson3/v1/Customer.scala
@@ -13,8 +13,9 @@
package doc.org.apache.pekko.serialization.jackson3.v1
-import doc.org.apache.pekko.serialization.jackson3.MySerializable
+import org.apache.pekko.serialization.jackson3.JsonSerializable
// #structural
-case class Customer(name: String, street: String, city: String, zipCode:
String, country: String) extends MySerializable
+case class Customer(name: String, street: String, city: String, zipCode:
String, country: String)
+ extends JsonSerializable
// #structural
diff --git
a/serialization-jackson3/src/test/scala/doc/org/apache/pekko/serialization/jackson3/v1/ItemAdded.scala
b/serialization-jackson3/src/test/scala/doc/org/apache/pekko/serialization/jackson3/v1/ItemAdded.scala
index d855d9890e..bf6341e024 100644
---
a/serialization-jackson3/src/test/scala/doc/org/apache/pekko/serialization/jackson3/v1/ItemAdded.scala
+++
b/serialization-jackson3/src/test/scala/doc/org/apache/pekko/serialization/jackson3/v1/ItemAdded.scala
@@ -13,10 +13,10 @@
package doc.org.apache.pekko.serialization.jackson3.v1
-import doc.org.apache.pekko.serialization.jackson3.MySerializable
+import org.apache.pekko.serialization.jackson3.JsonSerializable
// #add-optional
// #forward-one-rename
-case class ItemAdded(shoppingCartId: String, productId: String, quantity: Int)
extends MySerializable
+case class ItemAdded(shoppingCartId: String, productId: String, quantity: Int)
extends JsonSerializable
// #forward-one-rename
// #add-optional
diff --git
a/serialization-jackson3/src/test/scala/doc/org/apache/pekko/serialization/jackson3/v1/OrderAdded.scala
b/serialization-jackson3/src/test/scala/doc/org/apache/pekko/serialization/jackson3/v1/OrderAdded.scala
index f865044803..33da328cfd 100644
---
a/serialization-jackson3/src/test/scala/doc/org/apache/pekko/serialization/jackson3/v1/OrderAdded.scala
+++
b/serialization-jackson3/src/test/scala/doc/org/apache/pekko/serialization/jackson3/v1/OrderAdded.scala
@@ -13,8 +13,8 @@
package doc.org.apache.pekko.serialization.jackson3.v1
-import doc.org.apache.pekko.serialization.jackson3.MySerializable
+import org.apache.pekko.serialization.jackson3.JsonSerializable
// #rename-class
-case class OrderAdded(shoppingCartId: String) extends MySerializable
+case class OrderAdded(shoppingCartId: String) extends JsonSerializable
// #rename-class
diff --git
a/serialization-jackson3/src/test/scala/doc/org/apache/pekko/serialization/jackson3/v2a/Address.scala
b/serialization-jackson3/src/test/scala/doc/org/apache/pekko/serialization/jackson3/v2a/Address.scala
index e6fa3e990c..b2e0d94d66 100644
---
a/serialization-jackson3/src/test/scala/doc/org/apache/pekko/serialization/jackson3/v2a/Address.scala
+++
b/serialization-jackson3/src/test/scala/doc/org/apache/pekko/serialization/jackson3/v2a/Address.scala
@@ -13,8 +13,8 @@
package doc.org.apache.pekko.serialization.jackson3.v2a
-import doc.org.apache.pekko.serialization.jackson3.MySerializable
+import org.apache.pekko.serialization.jackson3.JsonSerializable
// #structural
-case class Address(street: String, city: String, zipCode: String, country:
String) extends MySerializable
+case class Address(street: String, city: String, zipCode: String, country:
String) extends JsonSerializable
// #structural
diff --git
a/serialization-jackson3/src/test/scala/doc/org/apache/pekko/serialization/jackson3/v2a/Customer.scala
b/serialization-jackson3/src/test/scala/doc/org/apache/pekko/serialization/jackson3/v2a/Customer.scala
index 20f35751c8..ab8db3ec9b 100644
---
a/serialization-jackson3/src/test/scala/doc/org/apache/pekko/serialization/jackson3/v2a/Customer.scala
+++
b/serialization-jackson3/src/test/scala/doc/org/apache/pekko/serialization/jackson3/v2a/Customer.scala
@@ -13,8 +13,8 @@
package doc.org.apache.pekko.serialization.jackson3.v2a
-import doc.org.apache.pekko.serialization.jackson3.MySerializable
+import org.apache.pekko.serialization.jackson3.JsonSerializable
// #structural
-case class Customer(name: String, shippingAddress: Address, billingAddress:
Option[Address]) extends MySerializable
+case class Customer(name: String, shippingAddress: Address, billingAddress:
Option[Address]) extends JsonSerializable
// #structural
diff --git
a/serialization-jackson3/src/test/scala/doc/org/apache/pekko/serialization/jackson3/v2a/ItemAdded.scala
b/serialization-jackson3/src/test/scala/doc/org/apache/pekko/serialization/jackson3/v2a/ItemAdded.scala
index c820d7fce4..37721ea432 100644
---
a/serialization-jackson3/src/test/scala/doc/org/apache/pekko/serialization/jackson3/v2a/ItemAdded.scala
+++
b/serialization-jackson3/src/test/scala/doc/org/apache/pekko/serialization/jackson3/v2a/ItemAdded.scala
@@ -14,11 +14,11 @@
package doc.org.apache.pekko.serialization.jackson3.v2a
import com.fasterxml.jackson.annotation.JsonCreator
-import jdoc.org.apache.pekko.serialization.jackson3.MySerializable
+import org.apache.pekko.serialization.jackson3.JsonSerializable
// #add-optional
case class ItemAdded(shoppingCartId: String, productId: String, quantity: Int,
discount: Option[Double], note: String)
- extends MySerializable {
+ extends JsonSerializable {
// alternative constructor because `note` should have default value "" when
not defined in json
@JsonCreator
diff --git
a/serialization-jackson3/src/test/scala/doc/org/apache/pekko/serialization/jackson3/v2a/OrderPlaced.scala
b/serialization-jackson3/src/test/scala/doc/org/apache/pekko/serialization/jackson3/v2a/OrderPlaced.scala
index 6984bcbee8..ef320e7c76 100644
---
a/serialization-jackson3/src/test/scala/doc/org/apache/pekko/serialization/jackson3/v2a/OrderPlaced.scala
+++
b/serialization-jackson3/src/test/scala/doc/org/apache/pekko/serialization/jackson3/v2a/OrderPlaced.scala
@@ -13,8 +13,8 @@
package doc.org.apache.pekko.serialization.jackson3.v2a
-import doc.org.apache.pekko.serialization.jackson3.MySerializable
+import org.apache.pekko.serialization.jackson3.JsonSerializable
// #rename-class
-case class OrderPlaced(shoppingCartId: String) extends MySerializable
+case class OrderPlaced(shoppingCartId: String) extends JsonSerializable
// #rename-class
diff --git
a/serialization-jackson3/src/test/scala/doc/org/apache/pekko/serialization/jackson3/v2b/ItemAdded.scala
b/serialization-jackson3/src/test/scala/doc/org/apache/pekko/serialization/jackson3/v2b/ItemAdded.scala
index 35c6f2478e..1804510013 100644
---
a/serialization-jackson3/src/test/scala/doc/org/apache/pekko/serialization/jackson3/v2b/ItemAdded.scala
+++
b/serialization-jackson3/src/test/scala/doc/org/apache/pekko/serialization/jackson3/v2b/ItemAdded.scala
@@ -13,8 +13,9 @@
package doc.org.apache.pekko.serialization.jackson3.v2b
-import jdoc.org.apache.pekko.serialization.jackson3.MySerializable
+import org.apache.pekko.serialization.jackson3.JsonSerializable
// #add-mandatory
-case class ItemAdded(shoppingCartId: String, productId: String, quantity: Int,
discount: Double) extends MySerializable
+case class ItemAdded(shoppingCartId: String, productId: String, quantity: Int,
discount: Double)
+ extends JsonSerializable
// #add-mandatory
diff --git
a/serialization-jackson3/src/test/scala/doc/org/apache/pekko/serialization/jackson3/v2c/ItemAdded.scala
b/serialization-jackson3/src/test/scala/doc/org/apache/pekko/serialization/jackson3/v2c/ItemAdded.scala
index 7f82551574..4a273c0794 100644
---
a/serialization-jackson3/src/test/scala/doc/org/apache/pekko/serialization/jackson3/v2c/ItemAdded.scala
+++
b/serialization-jackson3/src/test/scala/doc/org/apache/pekko/serialization/jackson3/v2c/ItemAdded.scala
@@ -13,8 +13,8 @@
package doc.org.apache.pekko.serialization.jackson3.v2c
-import doc.org.apache.pekko.serialization.jackson3.MySerializable
+import org.apache.pekko.serialization.jackson3.JsonSerializable
// #rename
-case class ItemAdded(shoppingCartId: String, itemId: String, quantity: Int)
extends MySerializable
+case class ItemAdded(shoppingCartId: String, itemId: String, quantity: Int)
extends JsonSerializable
// #rename
diff --git
a/serialization-jackson3/src/test/scala/org/apache/pekko/serialization/jackson3/JacksonSerializerSpec.scala
b/serialization-jackson3/src/test/scala/org/apache/pekko/serialization/jackson3/JacksonSerializerSpec.scala
index e2450866f4..dff3deca43 100644
---
a/serialization-jackson3/src/test/scala/org/apache/pekko/serialization/jackson3/JacksonSerializerSpec.scala
+++
b/serialization-jackson3/src/test/scala/org/apache/pekko/serialization/jackson3/JacksonSerializerSpec.scala
@@ -151,6 +151,11 @@ object ScalaTestMessages {
extends TestMessage
}
+object PredefinedMarkerMessages {
+ final case class JsonMarked(name: String) extends JsonSerializable
+ final case class CborMarked(name: String) extends CborSerializable
+}
+
class JacksonCborSerializerSpec extends JacksonSerializerSpec("jackson-cbor") {
"have compression disabled by default" in {
val conf = JacksonObjectMapperProvider.configForBinding("jackson-cbor",
system.settings.config)
@@ -178,6 +183,31 @@ class JacksonJsonSerializerSpec extends
JacksonSerializerSpec("jackson-json") {
"JacksonJsonSerializer" must {
+ "bind the predefined JsonSerializable and CborSerializable markers in
reference.conf" in {
+ import PredefinedMarkerMessages._
+ // only the reference.conf files, no test specific serialization-bindings
+ val sys = ActorSystem("PredefinedMarkers",
ConfigFactory.defaultReference())
+ try {
+ val ser = SerializationExtension(sys)
+ ser.serializerFor(classOf[JsonMarked]).getClass should
===(classOf[JacksonJsonSerializer])
+ ser.serializerFor(classOf[CborMarked]).getClass should
===(classOf[JacksonCborSerializer])
+
+ val jsonMsg = JsonMarked("json")
+ val jsonSerializer =
ser.findSerializerFor(jsonMsg).asInstanceOf[SerializerWithStringManifest]
+ ser.deserialize(
+ jsonSerializer.toBinary(jsonMsg),
+ jsonSerializer.identifier,
+ jsonSerializer.manifest(jsonMsg)).get should ===(jsonMsg)
+
+ val cborMsg = CborMarked("cbor")
+ val cborSerializer =
ser.findSerializerFor(cborMsg).asInstanceOf[SerializerWithStringManifest]
+ ser.deserialize(
+ cborSerializer.toBinary(cborMsg),
+ cborSerializer.identifier,
+ cborSerializer.manifest(cborMsg)).get should ===(cborMsg)
+ } finally shutdown(sys)
+ }
+
"support lookup of same ObjectMapper via JacksonObjectMapperProvider" in {
val mapper = serialization()
.serializerFor(classOf[JavaTestMessages.TestMessage])
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]