You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by ma...@apache.org on 2014/09/10 05:06:32 UTC

git commit: Serializable updates and better variable names.

Repository: logging-log4j2
Updated Branches:
  refs/heads/master 313520a9f -> 8c8581235


Serializable updates and better variable names.

  - Noticed that the previous readObject and writeObject methods would be incompatible with each other.
  - No longer using default(Read|Write)Object since we serialize all the relevant fields manually.
  - Added unit tests to verify roundtrip serialization equality.
  - New serialVersionUID value due to stream format changes.


Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/8c858123
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/8c858123
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/8c858123

Branch: refs/heads/master
Commit: 8c8581235bfb0893016d712120aed00415c468f0
Parents: 313520a
Author: Matt Sicker <ma...@apache.org>
Authored: Tue Sep 9 22:06:24 2014 -0500
Committer: Matt Sicker <ma...@apache.org>
Committed: Tue Sep 9 22:06:24 2014 -0500

----------------------------------------------------------------------
 .../log4j/message/MessageFormatMessage.java     | 56 ++++++++++----------
 .../log4j/message/MessageFormatMessageTest.java | 17 ++++++
 2 files changed, 45 insertions(+), 28 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/8c858123/log4j-api/src/main/java/org/apache/logging/log4j/message/MessageFormatMessage.java
----------------------------------------------------------------------
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/message/MessageFormatMessage.java b/log4j-api/src/main/java/org/apache/logging/log4j/message/MessageFormatMessage.java
index 0493b0f..eae6fb5 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/message/MessageFormatMessage.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/message/MessageFormatMessage.java
@@ -14,6 +14,7 @@
  * See the license for the specific language governing permissions and
  * limitations under the license.
  */
+
 package org.apache.logging.log4j.message;
 
 import java.io.IOException;
@@ -33,21 +34,22 @@ public class MessageFormatMessage implements Message {
 
     private static final Logger LOGGER = StatusLogger.getLogger();
 
-    private static final long serialVersionUID = -665975803997290697L;
+    private static final long serialVersionUID = 1L;
 
     private static final int HASHVAL = 31;
 
     private String messagePattern;
-    private transient Object[] argArray;
-    private String[] stringArgs;
+    private transient Object[] parameters;
+    private String[] serializedParameters;
     private transient String formattedMessage;
     private transient Throwable throwable;
 
-    public MessageFormatMessage(final String messagePattern, final Object... arguments) {
+    public MessageFormatMessage(final String messagePattern, final Object... parameters) {
         this.messagePattern = messagePattern;
-        this.argArray = arguments;
-        if (arguments != null && arguments.length > 0 && arguments[arguments.length - 1] instanceof Throwable) {
-            this.throwable = (Throwable) arguments[arguments.length - 1];
+        this.parameters = parameters;
+        final int length = parameters == null ? 0 : parameters.length;
+        if (length > 0 && parameters[length - 1] instanceof Throwable) {
+            this.throwable = (Throwable) parameters[length - 1];
         }
     }
 
@@ -58,7 +60,7 @@ public class MessageFormatMessage implements Message {
     @Override
     public String getFormattedMessage() {
         if (formattedMessage == null) {
-            formattedMessage = formatMessage(messagePattern, argArray);
+            formattedMessage = formatMessage(messagePattern, parameters);
         }
         return formattedMessage;
     }
@@ -78,10 +80,10 @@ public class MessageFormatMessage implements Message {
      */
     @Override
     public Object[] getParameters() {
-        if (argArray != null) {
-            return argArray;
+        if (parameters != null) {
+            return parameters;
         }
-        return stringArgs;
+        return serializedParameters;
     }
 
     protected String formatMessage(final String msgPattern, final Object... args) {
@@ -107,17 +109,13 @@ public class MessageFormatMessage implements Message {
         if (messagePattern != null ? !messagePattern.equals(that.messagePattern) : that.messagePattern != null) {
             return false;
         }
-        if (!Arrays.equals(stringArgs, that.stringArgs)) {
-            return false;
-        }
-
-        return true;
+        return Arrays.equals(serializedParameters, that.serializedParameters);
     }
 
     @Override
     public int hashCode() {
         int result = messagePattern != null ? messagePattern.hashCode() : 0;
-        result = HASHVAL * result + (stringArgs != null ? Arrays.hashCode(stringArgs) : 0);
+        result = HASHVAL * result + (serializedParameters != null ? Arrays.hashCode(serializedParameters) : 0);
         return result;
     }
 
@@ -125,31 +123,33 @@ public class MessageFormatMessage implements Message {
     @Override
     public String toString() {
         return "StringFormatMessage[messagePattern=" + messagePattern + ", args=" +
-            Arrays.toString(argArray) + ']';
+            Arrays.toString(parameters) + ']';
     }
 
     private void writeObject(final ObjectOutputStream out) throws IOException {
-        out.defaultWriteObject();
         getFormattedMessage();
         out.writeUTF(formattedMessage);
         out.writeUTF(messagePattern);
-        out.writeInt(argArray.length);
-        stringArgs = new String[argArray.length];
-        int i = 0;
-        for (final Object obj : argArray) {
-            stringArgs[i] = obj.toString();
-            ++i;
+        final int length = parameters == null ? 0 : parameters.length;
+        out.writeInt(length);
+        serializedParameters = new String[length];
+        if (length > 0) {
+            for (int i = 0; i < length; i++) {
+                serializedParameters[i] = String.valueOf(parameters[i]);
+                out.writeUTF(serializedParameters[i]);
+            }
         }
     }
 
     private void readObject(final ObjectInputStream in) throws IOException, ClassNotFoundException {
-        in.defaultReadObject();
+        parameters = null;
+        throwable = null;
         formattedMessage = in.readUTF();
         messagePattern = in.readUTF();
         final int length = in.readInt();
-        stringArgs = new String[length];
+        serializedParameters = new String[length];
         for (int i = 0; i < length; ++i) {
-            stringArgs[i] = in.readUTF();
+            serializedParameters[i] = in.readUTF();
         }
     }
 

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/8c858123/log4j-api/src/test/java/org/apache/logging/log4j/message/MessageFormatMessageTest.java
----------------------------------------------------------------------
diff --git a/log4j-api/src/test/java/org/apache/logging/log4j/message/MessageFormatMessageTest.java b/log4j-api/src/test/java/org/apache/logging/log4j/message/MessageFormatMessageTest.java
index f66a931..1e6417c 100644
--- a/log4j-api/src/test/java/org/apache/logging/log4j/message/MessageFormatMessageTest.java
+++ b/log4j-api/src/test/java/org/apache/logging/log4j/message/MessageFormatMessageTest.java
@@ -14,8 +14,10 @@
  * See the license for the specific language governing permissions and
  * limitations under the license.
  */
+
 package org.apache.logging.log4j.message;
 
+import org.apache.logging.log4j.SerializationTestUtils;
 import org.junit.Test;
 
 import static org.junit.Assert.*;
@@ -86,4 +88,19 @@ public class MessageFormatMessageTest {
         final String actual = msg.getFormattedMessage();
         assertEquals("Should use initial param value", "Test message abc", actual);
     }
+
+    @Test
+    public void testSerializationWithParameters() throws Exception {
+        SerializationTestUtils.roundtripEquals(new MessageFormatMessage("Test {0} {1}", "message", "test"));
+    }
+
+    @Test
+    public void testSerializationWithNoParameters() throws Exception {
+        SerializationTestUtils.roundtripEquals(new MessageFormatMessage("Test"));
+    }
+
+    @Test
+    public void testSerializationWithNonStringParameters() throws Exception {
+        SerializationTestUtils.roundtripEquals(new MessageFormatMessage("{0}{1}{2}", 3, '.', 14L));
+    }
 }