aboutsummaryrefslogtreecommitdiffstats
path: root/compatibility-server/src/main/java/com/vaadin/v7/util/SerializerHelper.java
diff options
context:
space:
mode:
Diffstat (limited to 'compatibility-server/src/main/java/com/vaadin/v7/util/SerializerHelper.java')
-rw-r--r--compatibility-server/src/main/java/com/vaadin/v7/util/SerializerHelper.java162
1 files changed, 162 insertions, 0 deletions
diff --git a/compatibility-server/src/main/java/com/vaadin/v7/util/SerializerHelper.java b/compatibility-server/src/main/java/com/vaadin/v7/util/SerializerHelper.java
new file mode 100644
index 0000000000..d0ad569988
--- /dev/null
+++ b/compatibility-server/src/main/java/com/vaadin/v7/util/SerializerHelper.java
@@ -0,0 +1,162 @@
+/*
+ * Copyright 2000-2016 Vaadin Ltd.
+ *
+ * Licensed 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 com.vaadin.v7.util;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+
+/**
+ * Helper class for performing serialization. Most of the methods are here are
+ * workarounds for problems in Google App Engine. Used internally by Vaadin and
+ * should not be used by application developers. Subject to change at any time.
+ *
+ * @since 6.0
+ * @deprecated Only used for compatibility-server
+ */
+@Deprecated
+public class SerializerHelper {
+
+ /**
+ * Serializes the class reference so {@link #readClass(ObjectInputStream)}
+ * can deserialize it. Supports null class references.
+ *
+ * @param out
+ * The {@link ObjectOutputStream} to serialize to.
+ * @param cls
+ * A class or null.
+ * @throws IOException
+ * Rethrows any IOExceptions from the ObjectOutputStream
+ */
+ public static void writeClass(ObjectOutputStream out, Class<?> cls)
+ throws IOException {
+ if (cls == null) {
+ out.writeObject(null);
+ } else {
+ out.writeObject(cls.getName());
+ }
+
+ }
+
+ /**
+ * Serializes the class references so
+ * {@link #readClassArray(ObjectInputStream)} can deserialize it. Supports
+ * null class arrays.
+ *
+ * @param out
+ * The {@link ObjectOutputStream} to serialize to.
+ * @param classes
+ * An array containing class references or null.
+ * @throws IOException
+ * Rethrows any IOExceptions from the ObjectOutputStream
+ */
+ public static void writeClassArray(ObjectOutputStream out,
+ Class<?>[] classes) throws IOException {
+ if (classes == null) {
+ out.writeObject(null);
+ } else {
+ String[] classNames = new String[classes.length];
+ for (int i = 0; i < classes.length; i++) {
+ classNames[i] = classes[i].getName();
+ }
+ out.writeObject(classNames);
+ }
+ }
+
+ /**
+ * Deserializes a class references serialized by
+ * {@link #writeClassArray(ObjectOutputStream, Class[])}. Supports null
+ * class arrays.
+ *
+ * @param in
+ * {@link ObjectInputStream} to read from.
+ * @return Class array with the class references or null.
+ * @throws ClassNotFoundException
+ * If one of the classes could not be resolved.
+ * @throws IOException
+ * Rethrows IOExceptions from the ObjectInputStream
+ */
+ public static Class<?>[] readClassArray(ObjectInputStream in)
+ throws ClassNotFoundException, IOException {
+ String[] classNames = (String[]) in.readObject();
+ if (classNames == null) {
+ return null;
+ }
+ Class<?>[] classes = new Class<?>[classNames.length];
+ for (int i = 0; i < classNames.length; i++) {
+ classes[i] = resolveClass(classNames[i]);
+ }
+
+ return classes;
+ }
+
+ /**
+ * List of primitive classes. Google App Engine has problems
+ * serializing/deserializing these (#3064).
+ */
+ private static final Class<?>[] primitiveClasses = new Class<?>[] {
+ byte.class, short.class, int.class, long.class, float.class,
+ double.class, boolean.class, char.class };
+
+ /**
+ * Resolves the class given by {@code className}.
+ *
+ * @param className
+ * The fully qualified class name.
+ * @return A {@code Class} reference.
+ * @throws ClassNotFoundException
+ * If the class could not be resolved.
+ */
+ public static Class<?> resolveClass(String className)
+ throws ClassNotFoundException {
+ for (Class<?> c : primitiveClasses) {
+ if (className.equals(c.getName())) {
+ return c;
+ }
+ }
+
+ return Class.forName(className);
+ }
+
+ /**
+ * Deserializes a class reference serialized by
+ * {@link #writeClass(ObjectOutputStream, Class)}. Supports null class
+ * references.
+ *
+ * @param in
+ * {@code ObjectInputStream} to read from.
+ * @return Class reference to the resolved class
+ * @throws ClassNotFoundException
+ * If the class could not be resolved.
+ * @throws IOException
+ * Rethrows IOExceptions from the ObjectInputStream
+ */
+ public static Class<?> readClass(ObjectInputStream in)
+ throws IOException, ClassNotFoundException {
+ String className = (String) in.readObject();
+ if (className == null) {
+ return null;
+ } else {
+ return resolveClass(className);
+
+ }
+
+ }
+
+ private SerializerHelper() {
+ }
+
+}