This is an automated email from the ASF dual-hosted git repository.
ntimofeev pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cayenne.git
The following commit(s) were added to refs/heads/master by this push:
new 76cd99e CAY-2547 CayenneDataObject serialization issue
76cd99e is described below
commit 76cd99e36a286d33e818454103a5e717b9c445c1
Author: Nikita Timofeev <[email protected]>
AuthorDate: Thu Feb 28 14:03:58 2019 +0300
CAY-2547 CayenneDataObject serialization issue
---
RELEASE-NOTES.txt | 1 +
.../java/org/apache/cayenne/CayenneDataObject.java | 17 +++++++++++
.../apache/cayenne/DataObjectSerializationIT.java | 34 ++++++++++++++++++++++
3 files changed, 52 insertions(+)
diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index 22c3cf3..f792a72 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -29,6 +29,7 @@ Bug Fixes:
CAY-2332 Property API: unable to use eq() and in() methods for toMany
relationships
CAY-2509 Result of resolving lazily faulted relationships can be out-of-date
+CAY-2547 CayenneDataObject serialization issue
----------------------------------
Release: 4.1.M3
diff --git
a/cayenne-server/src/main/java/org/apache/cayenne/CayenneDataObject.java
b/cayenne-server/src/main/java/org/apache/cayenne/CayenneDataObject.java
index 3cad849..e7ac141 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/CayenneDataObject.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/CayenneDataObject.java
@@ -112,6 +112,23 @@ public class CayenneDataObject extends BaseDataObject {
buffer.append("]");
}
+ /**
+ * Serialization support.
+ */
+ private void writeObject(ObjectOutputStream out) throws IOException {
+ writeSerialized(out);
+ }
+
+ /**
+ * Serialization support.
+ */
+ private void readObject(ObjectInputStream in) throws IOException,
ClassNotFoundException {
+ readSerialized(in);
+ if(values == null) {
+ values = new HashMap<>();
+ }
+ }
+
@Override
protected void readState(ObjectInputStream in) throws IOException,
ClassNotFoundException {
super.readState(in);
diff --git
a/cayenne-server/src/test/java/org/apache/cayenne/DataObjectSerializationIT.java
b/cayenne-server/src/test/java/org/apache/cayenne/DataObjectSerializationIT.java
index 7307402..96e7584 100644
---
a/cayenne-server/src/test/java/org/apache/cayenne/DataObjectSerializationIT.java
+++
b/cayenne-server/src/test/java/org/apache/cayenne/DataObjectSerializationIT.java
@@ -128,4 +128,38 @@ public class DataObjectSerializationIT extends ServerCase {
assertNull(deserialized.getObjectContext());
assertEquals(null, deserialized.getArtistName());
}
+
+ @Test
+ public void testSerializeModifiedMapBasedObject() throws Exception {
+ ObjectId objectId = new ObjectId("test", "id", 42);
+
+ CayenneDataObject dataObject = new CayenneDataObject();
+ dataObject.setObjectContext(context);
+ dataObject.setObjectId(objectId);
+ dataObject.writePropertyDirectly("test", 123);
+ dataObject.setPersistenceState(PersistenceState.MODIFIED);
+
+ CayenneDataObject cloned = Util.cloneViaSerialization(dataObject);
+ assertEquals(PersistenceState.MODIFIED, cloned.getPersistenceState());
+ assertEquals(123, cloned.readProperty("test"));
+ assertNull(cloned.getObjectContext());
+ assertEquals(dataObject.getObjectId(), cloned.getObjectId());
+ }
+
+ @Test
+ public void testSerializeCommittedMapBasedObject() throws Exception {
+ ObjectId objectId = new ObjectId("test", "id", 42);
+
+ CayenneDataObject dataObject = new CayenneDataObject();
+ dataObject.setObjectContext(context);
+ dataObject.setObjectId(objectId);
+ dataObject.writePropertyDirectly("test", 123);
+ dataObject.setPersistenceState(PersistenceState.COMMITTED);
+
+ CayenneDataObject cloned = Util.cloneViaSerialization(dataObject);
+ assertEquals(PersistenceState.HOLLOW, cloned.getPersistenceState());
+ assertNull(cloned.readProperty("test"));
+ assertNull(cloned.getObjectContext());
+ assertEquals(dataObject.getObjectId(), cloned.getObjectId());
+ }
}