You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@deltaspike.apache.org by st...@apache.org on 2012/07/08 12:06:59 UTC
[1/2] git commit: DELTASPIKE-232 make Messages and handling
Serializable
Updated Branches:
refs/heads/master 1d09e789c -> 6055b4255
DELTASPIKE-232 make Messages and handling Serializable
Project: http://git-wip-us.apache.org/repos/asf/incubator-deltaspike/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-deltaspike/commit/6055b425
Tree: http://git-wip-us.apache.org/repos/asf/incubator-deltaspike/tree/6055b425
Diff: http://git-wip-us.apache.org/repos/asf/incubator-deltaspike/diff/6055b425
Branch: refs/heads/master
Commit: 6055b4255b5353424a53776f1748949ff021cd48
Parents: 0319ee6
Author: Mark Struberg <st...@apache.org>
Authored: Sun Jul 8 12:05:50 2012 +0200
Committer: Mark Struberg <st...@apache.org>
Committed: Sun Jul 8 12:05:50 2012 +0200
----------------------------------------------------------------------
.../deltaspike/core/api/message/Message.java | 6 +-
.../core/api/message/MessageInterpolator.java | 2 +-
.../core/impl/message/DefaultMessage.java | 11 +-
.../impl/message/DefaultMessageInterpolator.java | 2 +-
.../message/MessageBundleInvocationHandler.java | 32 ++++--
.../test/core/api/message/MessageContextTest.java | 19 ++++
.../core/api/message/TestMessageInterpolator.java | 3 +-
.../deltaspike/test/category/Serializer.java | 81 +++++++++++++++
8 files changed, 137 insertions(+), 19 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-deltaspike/blob/6055b425/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/api/message/Message.java
----------------------------------------------------------------------
diff --git a/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/api/message/Message.java b/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/api/message/Message.java
index f03b54c..885b53a 100644
--- a/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/api/message/Message.java
+++ b/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/api/message/Message.java
@@ -18,10 +18,12 @@
*/
package org.apache.deltaspike.core.api.message;
+import java.io.Serializable;
+
/**
* Basic interface for all message-types
*/
-public interface Message
+public interface Message extends Serializable
{
/**
* @param messageTemplate message key (or inline-text) for the current message
@@ -33,7 +35,7 @@ public interface Message
* @param arguments numbered and/or named argument(s) for the current message
* @return the current instance of the message builder to allow a fluent api
*/
- Message argument(Object... arguments);
+ Message argument(Serializable... arguments);
/**
* @return the message key (or inline-text) of the current message
http://git-wip-us.apache.org/repos/asf/incubator-deltaspike/blob/6055b425/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/api/message/MessageInterpolator.java
----------------------------------------------------------------------
diff --git a/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/api/message/MessageInterpolator.java b/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/api/message/MessageInterpolator.java
index ee9b559..13d2d86 100644
--- a/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/api/message/MessageInterpolator.java
+++ b/deltaspike/core/api/src/main/java/org/apache/deltaspike/core/api/message/MessageInterpolator.java
@@ -47,5 +47,5 @@ public interface MessageInterpolator extends Serializable, DeltaSpikeConfig
* if it was possible to replace the parameters with the given arguments
* the unmodified messageText otherwise
*/
- String interpolate(String messageText, Object[] arguments, Locale locale);
+ String interpolate(String messageText, Serializable[] arguments, Locale locale);
}
http://git-wip-us.apache.org/repos/asf/incubator-deltaspike/blob/6055b425/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/message/DefaultMessage.java
----------------------------------------------------------------------
diff --git a/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/message/DefaultMessage.java b/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/message/DefaultMessage.java
index 8d9d38c..b3916ce 100644
--- a/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/message/DefaultMessage.java
+++ b/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/message/DefaultMessage.java
@@ -24,6 +24,7 @@ import org.apache.deltaspike.core.api.message.MessageInterpolator;
import org.apache.deltaspike.core.api.message.MessageResolver;
import javax.enterprise.inject.Typed;
+import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
@@ -39,7 +40,7 @@ import static org.apache.deltaspike.core.api.message.MessageResolver.MISSING_RES
class DefaultMessage implements Message
{
protected String messageTemplate;
- protected List<Object> arguments = new ArrayList<Object>();
+ protected List<Serializable> arguments = new ArrayList<Serializable>();
private MessageContext messageContext;
@@ -53,11 +54,11 @@ class DefaultMessage implements Message
protected void reset()
{
messageTemplate = null;
- arguments = new ArrayList<Object>();
+ arguments = new ArrayList<Serializable>();
}
@Override
- public Message argument(Object... arguments)
+ public Message argument(Serializable... arguments)
{
Collections.addAll(this.arguments, arguments);
return this;
@@ -77,9 +78,9 @@ class DefaultMessage implements Message
}
@Override
- public Object[] getArguments()
+ public Serializable[] getArguments()
{
- return arguments.toArray();
+ return arguments.toArray(new Serializable[arguments.size()]);
}
http://git-wip-us.apache.org/repos/asf/incubator-deltaspike/blob/6055b425/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/message/DefaultMessageInterpolator.java
----------------------------------------------------------------------
diff --git a/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/message/DefaultMessageInterpolator.java b/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/message/DefaultMessageInterpolator.java
index 6f00db2..028a0dc 100644
--- a/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/message/DefaultMessageInterpolator.java
+++ b/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/message/DefaultMessageInterpolator.java
@@ -33,7 +33,7 @@ public class DefaultMessageInterpolator implements MessageInterpolator, Serializ
private static final long serialVersionUID = -8854087197813424812L;
@Override
- public String interpolate(String messageTemplate, Object[] arguments, Locale locale)
+ public String interpolate(String messageTemplate, Serializable[] arguments, Locale locale)
{
if (arguments == null || arguments.length == 0)
{
http://git-wip-us.apache.org/repos/asf/incubator-deltaspike/blob/6055b425/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/message/MessageBundleInvocationHandler.java
----------------------------------------------------------------------
diff --git a/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/message/MessageBundleInvocationHandler.java b/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/message/MessageBundleInvocationHandler.java
index b89269a..feac510 100644
--- a/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/message/MessageBundleInvocationHandler.java
+++ b/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/message/MessageBundleInvocationHandler.java
@@ -18,6 +18,7 @@
*/
package org.apache.deltaspike.core.impl.message;
+import java.io.Serializable;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.util.ArrayList;
@@ -25,6 +26,7 @@ import java.util.List;
import org.apache.deltaspike.core.api.literal.AnyLiteral;
import org.apache.deltaspike.core.api.message.LocaleResolver;
+import org.apache.deltaspike.core.api.message.Message;
import org.apache.deltaspike.core.api.message.MessageContext;
import org.apache.deltaspike.core.api.message.MessageInterpolator;
import org.apache.deltaspike.core.api.message.MessageResolver;
@@ -57,7 +59,7 @@ class MessageBundleInvocationHandler implements InvocationHandler
}
MessageContext messageContext = resolveMessageContextFromArguments(args);
- List<Object> arguments = resolveMessageArguments(args);
+ List<Serializable> arguments = resolveMessageArguments(args);
if (messageContext == null)
{
@@ -74,15 +76,17 @@ class MessageBundleInvocationHandler implements InvocationHandler
String messageBundleName = method.getDeclaringClass().getName();
+ Message message = messageContext
+ .messageSource(messageBundleName).message()
+ .template(messageTemplateValue)
+ .argument(arguments.toArray(new Serializable[arguments.size()]));
+
if (String.class.isAssignableFrom(method.getReturnType()))
{
- return messageContext.messageSource(messageBundleName).message().template(messageTemplateValue)
- .argument(arguments.toArray()).toString();
+ return message.toString();
}
- return messageContext.messageSource(messageBundleName).message().template(messageTemplateValue)
- .argument(arguments.toArray());
-
+ return message;
}
private void applyMessageContextConfig(MessageContext messageContext, MessageContextConfig messageContextConfig)
@@ -119,19 +123,29 @@ class MessageBundleInvocationHandler implements InvocationHandler
}
- private List<Object> resolveMessageArguments(Object[] args)
+ private List<Serializable> resolveMessageArguments(Object[] args)
{
- List<Object> arguments = new ArrayList<Object>();
+ List<Serializable> arguments = new ArrayList<Serializable>();
if (args != null && args.length > 0)
{
for (int i = 0; i < args.length; i++)
{
+ Object arg = args[i];
+
if (i == 0 && MessageContext.class.isAssignableFrom(args[0].getClass()))
{
continue;
}
- arguments.add(args[i]);
+ if (arg instanceof Serializable)
+ {
+ arguments.add((Serializable) arg);
+ }
+ else
+ {
+ // for non-serializable objects we perform an immediate toString() instead
+ arguments.add(arg.toString());
+ }
}
}
http://git-wip-us.apache.org/repos/asf/incubator-deltaspike/blob/6055b425/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/message/MessageContextTest.java
----------------------------------------------------------------------
diff --git a/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/message/MessageContextTest.java b/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/message/MessageContextTest.java
index 9408f9a..091a47e 100644
--- a/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/message/MessageContextTest.java
+++ b/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/message/MessageContextTest.java
@@ -166,4 +166,23 @@ public class MessageContextTest
Assert.assertFalse(m1.equals(m2));
Assert.assertFalse(m2.equals(m1));
}
+
+ @Test
+ public void testSerialisation()
+ {
+ Serializer<Message> messageSerializer = new Serializer<Message>();
+
+ LocaleResolver localeResolver = new FixedGermanLocaleResolver();
+ Message message = messageContext
+ .localeResolver(localeResolver)
+ .messageResolver(new TestMessageResolver())
+ .message().template("{hello}").argument("hans");
+ Assert.assertEquals("Test Nachricht an hans", message.toString());
+
+ Message messageClone = messageSerializer.roundTrip(message);
+
+ Assert.assertEquals(message, messageClone);
+ Assert.assertEquals("Test Nachricht an hans", messageClone.toString());
+
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-deltaspike/blob/6055b425/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/message/TestMessageInterpolator.java
----------------------------------------------------------------------
diff --git a/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/message/TestMessageInterpolator.java b/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/message/TestMessageInterpolator.java
index 47a1730..0da5178 100644
--- a/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/message/TestMessageInterpolator.java
+++ b/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/message/TestMessageInterpolator.java
@@ -21,6 +21,7 @@ package org.apache.deltaspike.test.core.api.message;
import org.apache.deltaspike.core.api.message.MessageInterpolator;
import javax.enterprise.context.ApplicationScoped;
+import java.io.Serializable;
import java.util.Locale;
@ApplicationScoped
@@ -31,7 +32,7 @@ public class TestMessageInterpolator implements MessageInterpolator
public static final String SPECIALFORMATTED = "specialformatted ";
@Override
- public String interpolate(String messageTemplate, Object[] arguments, Locale locale)
+ public String interpolate(String messageTemplate, Serializable[] arguments, Locale locale)
{
return SPECIALFORMATTED + String.format(locale, messageTemplate, arguments);
}
http://git-wip-us.apache.org/repos/asf/incubator-deltaspike/blob/6055b425/deltaspike/test-utils/src/main/java/org/apache/deltaspike/test/category/Serializer.java
----------------------------------------------------------------------
diff --git a/deltaspike/test-utils/src/main/java/org/apache/deltaspike/test/category/Serializer.java b/deltaspike/test-utils/src/main/java/org/apache/deltaspike/test/category/Serializer.java
new file mode 100644
index 0000000..bd03e94
--- /dev/null
+++ b/deltaspike/test-utils/src/main/java/org/apache/deltaspike/test/category/Serializer.java
@@ -0,0 +1,81 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.deltaspike.test.category;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+
+/**
+ * A few helper methods for testing serialisation.
+ * They help serializing to a byte[] and back to the object
+ */
+public class Serializer<T>
+{
+
+ /**
+ * Serializes the given instance to a byte[] and immediately
+ * de-serialize it back.
+ * @param original instance
+ * @return the deserialized new instance
+ */
+ public T roundTrip(T original)
+ {
+ return deserialize(serialize(original));
+ }
+
+ /**
+ * Serializes the given instance to a byte[].
+ */
+ public byte[] serialize(T o)
+ {
+ try
+ {
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ ObjectOutputStream oos = null;
+ oos = new ObjectOutputStream(baos);
+ oos.writeObject(o);
+ return baos.toByteArray();
+ }
+ catch (IOException e)
+ {
+ throw new RuntimeException(e);
+ }
+ }
+
+ /**
+ * De-serializes the given byte[] to an instance of T.
+ */
+ public T deserialize(byte[] serial)
+ {
+ try
+ {
+ ByteArrayInputStream bais = new ByteArrayInputStream(serial);
+ ObjectInputStream ois = new ObjectInputStream(bais);
+ return (T) ois.readObject();
+ }
+ catch (Exception e)
+ {
+ throw new RuntimeException(e);
+ }
+ }
+
+}