You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@polygene.apache.org by pa...@apache.org on 2017/03/13 10:35:37 UTC
[45/50] [abbrv] polygene-java git commit: Serialization
implementation details cleanup
Serialization implementation details cleanup
remove unused imports, prefer final fields, introduce constants where
appropriate, uniform Java serialization and Base64 encoding etc\u2026
POLYGENE-231
Project: http://git-wip-us.apache.org/repos/asf/polygene-java/repo
Commit: http://git-wip-us.apache.org/repos/asf/polygene-java/commit/9485717f
Tree: http://git-wip-us.apache.org/repos/asf/polygene-java/tree/9485717f
Diff: http://git-wip-us.apache.org/repos/asf/polygene-java/diff/9485717f
Branch: refs/heads/serialization-3.0
Commit: 9485717fc8a447a5f793d55d4b9ee76d35590242
Parents: 55916ef
Author: Paul Merlin <pa...@apache.org>
Authored: Mon Mar 13 10:04:25 2017 +0100
Committer: Paul Merlin <pa...@apache.org>
Committed: Mon Mar 13 11:24:42 2017 +0100
----------------------------------------------------------------------
.../serialization/javaxjson/JavaxJson.java | 2 ++
.../javaxjson/JavaxJsonAdapters.java | 2 +-
.../javaxjson/JavaxJsonDeserializer.java | 9 ++++-----
.../javaxjson/JavaxJsonSerializer.java | 18 ++++++------------
.../javaxjson/JavaxJsonSettings.java | 4 ++--
.../spi/serialization/JsonDeserializer.java | 5 ++---
.../spi/serialization/XmlDeserializer.java | 5 -----
.../javaxxml/JavaxXmlDeserializer.java | 9 ++++-----
.../javaxxml/JavaxXmlSerializer.java | 13 ++++++-------
.../msgpack/MessagePackDeserializer.java | 11 ++++++-----
.../msgpack/MessagePackSerializer.java | 14 ++++++++------
11 files changed, 41 insertions(+), 51 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/polygene-java/blob/9485717f/core/spi/src/main/java/org/apache/polygene/serialization/javaxjson/JavaxJson.java
----------------------------------------------------------------------
diff --git a/core/spi/src/main/java/org/apache/polygene/serialization/javaxjson/JavaxJson.java b/core/spi/src/main/java/org/apache/polygene/serialization/javaxjson/JavaxJson.java
index 3c44864..3e7ad6f 100644
--- a/core/spi/src/main/java/org/apache/polygene/serialization/javaxjson/JavaxJson.java
+++ b/core/spi/src/main/java/org/apache/polygene/serialization/javaxjson/JavaxJson.java
@@ -33,6 +33,8 @@ import javax.json.JsonValue;
*/
public class JavaxJson
{
+ public static JsonValue EMPTY_STRING = toJsonString( "" );
+
/**
* Create a {@link JsonObjectBuilder} populated with the state of a {@link JsonObject}.
*
http://git-wip-us.apache.org/repos/asf/polygene-java/blob/9485717f/core/spi/src/main/java/org/apache/polygene/serialization/javaxjson/JavaxJsonAdapters.java
----------------------------------------------------------------------
diff --git a/core/spi/src/main/java/org/apache/polygene/serialization/javaxjson/JavaxJsonAdapters.java b/core/spi/src/main/java/org/apache/polygene/serialization/javaxjson/JavaxJsonAdapters.java
index fdc9d27..a46accd 100644
--- a/core/spi/src/main/java/org/apache/polygene/serialization/javaxjson/JavaxJsonAdapters.java
+++ b/core/spi/src/main/java/org/apache/polygene/serialization/javaxjson/JavaxJsonAdapters.java
@@ -38,7 +38,7 @@ public interface JavaxJsonAdapters
class Mixin implements JavaxJsonAdapters
{
- private Map<ValueType, JavaxJsonAdapter<?>> adapters = new LinkedHashMap<>();
+ private final Map<ValueType, JavaxJsonAdapter<?>> adapters = new LinkedHashMap<>();
@Override
public void registerAdapter( ValueType valueType, JavaxJsonAdapter<?> adapter )
http://git-wip-us.apache.org/repos/asf/polygene-java/blob/9485717f/core/spi/src/main/java/org/apache/polygene/serialization/javaxjson/JavaxJsonDeserializer.java
----------------------------------------------------------------------
diff --git a/core/spi/src/main/java/org/apache/polygene/serialization/javaxjson/JavaxJsonDeserializer.java b/core/spi/src/main/java/org/apache/polygene/serialization/javaxjson/JavaxJsonDeserializer.java
index a1e5d75..2d8cc53 100644
--- a/core/spi/src/main/java/org/apache/polygene/serialization/javaxjson/JavaxJsonDeserializer.java
+++ b/core/spi/src/main/java/org/apache/polygene/serialization/javaxjson/JavaxJsonDeserializer.java
@@ -158,7 +158,8 @@ public class JavaxJsonDeserializer extends AbstractTextDeserializer implements J
return (T) deserializeValueComposite( module, valueDescriptor.valueType(), object );
}
case STRING:
- return (T) deserializeBase64( asString( json ) );
+ byte[] bytes = Base64.getDecoder().decode( asString( json ).getBytes( UTF_8 ) );
+ return (T) deserializeJava( bytes );
default:
throw new SerializationException( "Don't know how to deserialize " + valueType + " from " + json );
}
@@ -285,17 +286,15 @@ public class JavaxJsonDeserializer extends AbstractTextDeserializer implements J
};
}
- private Object deserializeBase64( String inputString )
+ private Object deserializeJava( byte[] bytes )
{
- byte[] bytes = inputString.getBytes( UTF_8 );
- bytes = Base64.getDecoder().decode( bytes );
try( ObjectInputStream oin = new ObjectInputStream( new ByteArrayInputStream( bytes ) ) )
{
return oin.readObject();
}
catch( IOException | ClassNotFoundException ex )
{
- throw new SerializationException( "Unable to deserialize Base64 serialized " + inputString, ex );
+ throw new SerializationException( "Unable to deserialize using Java serialization", ex );
}
}
http://git-wip-us.apache.org/repos/asf/polygene-java/blob/9485717f/core/spi/src/main/java/org/apache/polygene/serialization/javaxjson/JavaxJsonSerializer.java
----------------------------------------------------------------------
diff --git a/core/spi/src/main/java/org/apache/polygene/serialization/javaxjson/JavaxJsonSerializer.java b/core/spi/src/main/java/org/apache/polygene/serialization/javaxjson/JavaxJsonSerializer.java
index 07294a9..93a9077 100644
--- a/core/spi/src/main/java/org/apache/polygene/serialization/javaxjson/JavaxJsonSerializer.java
+++ b/core/spi/src/main/java/org/apache/polygene/serialization/javaxjson/JavaxJsonSerializer.java
@@ -20,7 +20,6 @@ package org.apache.polygene.serialization.javaxjson;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
-import java.io.UncheckedIOException;
import java.util.Base64;
import java.util.Map;
import java.util.function.Function;
@@ -32,7 +31,6 @@ import javax.json.JsonArray;
import javax.json.JsonArrayBuilder;
import javax.json.JsonObject;
import javax.json.JsonObjectBuilder;
-import javax.json.JsonString;
import javax.json.JsonValue;
import org.apache.polygene.api.PolygeneAPI;
import org.apache.polygene.api.association.AssociationStateHolder;
@@ -41,6 +39,7 @@ import org.apache.polygene.api.injection.scope.This;
import org.apache.polygene.api.injection.scope.Uses;
import org.apache.polygene.api.serialization.Converter;
import org.apache.polygene.api.serialization.Converters;
+import org.apache.polygene.api.serialization.SerializationException;
import org.apache.polygene.api.service.ServiceDescriptor;
import org.apache.polygene.api.type.ArrayType;
import org.apache.polygene.api.type.MapType;
@@ -111,8 +110,8 @@ public class JavaxJsonSerializer extends AbstractTextSerializer implements JsonS
return serializeStream( options, (Stream<?>) object );
}
// Fallback to Java Serialization in Base 64
- // Include all arrays!
- return serializeBase64( object );
+ byte[] bytes = Base64.getEncoder().encode( serializeJava( object ) );
+ return JavaxJson.toJsonString( new String( bytes, UTF_8 ) );
}
private JsonObject serializeValueComposite( Options options, Object composite, boolean root )
@@ -219,23 +218,18 @@ public class JavaxJsonSerializer extends AbstractTextSerializer implements JsonS
return builder.build();
}
- private JsonString serializeBase64( Object object )
- {
- byte[] bytes = Base64.getEncoder().encode( javaSerialization( object ) );
- return JavaxJson.toJsonString( new String( bytes, UTF_8 ) );
- }
-
- private byte[] javaSerialization( Object object )
+ private byte[] serializeJava( Object object )
{
ByteArrayOutputStream bout = new ByteArrayOutputStream();
try( ObjectOutputStream out = new ObjectOutputStream( bout ) )
{
out.writeUnshared( object );
+ out.flush();
return bout.toByteArray();
}
catch( IOException ex )
{
- throw new UncheckedIOException( ex );
+ throw new SerializationException( "Unable to serialize using Java serialization", ex );
}
}
http://git-wip-us.apache.org/repos/asf/polygene-java/blob/9485717f/core/spi/src/main/java/org/apache/polygene/serialization/javaxjson/JavaxJsonSettings.java
----------------------------------------------------------------------
diff --git a/core/spi/src/main/java/org/apache/polygene/serialization/javaxjson/JavaxJsonSettings.java b/core/spi/src/main/java/org/apache/polygene/serialization/javaxjson/JavaxJsonSettings.java
index 266bd99..e0f993d 100644
--- a/core/spi/src/main/java/org/apache/polygene/serialization/javaxjson/JavaxJsonSettings.java
+++ b/core/spi/src/main/java/org/apache/polygene/serialization/javaxjson/JavaxJsonSettings.java
@@ -56,13 +56,13 @@ public class JavaxJsonSettings
public JavaxJsonSettings withTypeInfoPropertyName( String typeInfoPropertyName )
{
- setTypeInfoPropertyName( typeInfoPropertyName );
+ this.typeInfoPropertyName = typeInfoPropertyName;
return this;
}
public JavaxJsonSettings withJsonAdapter( ValueType valueType, JavaxJsonAdapter<?> adapter )
{
- getAdapters().put( valueType, adapter );
+ adapters.put( valueType, adapter );
return this;
}
http://git-wip-us.apache.org/repos/asf/polygene-java/blob/9485717f/core/spi/src/main/java/org/apache/polygene/spi/serialization/JsonDeserializer.java
----------------------------------------------------------------------
diff --git a/core/spi/src/main/java/org/apache/polygene/spi/serialization/JsonDeserializer.java b/core/spi/src/main/java/org/apache/polygene/spi/serialization/JsonDeserializer.java
index 84c8993..a0dac71 100644
--- a/core/spi/src/main/java/org/apache/polygene/spi/serialization/JsonDeserializer.java
+++ b/core/spi/src/main/java/org/apache/polygene/spi/serialization/JsonDeserializer.java
@@ -34,6 +34,7 @@ import javax.json.stream.JsonParsingException;
import org.apache.polygene.api.serialization.Deserializer;
import org.apache.polygene.api.structure.ModuleDescriptor;
import org.apache.polygene.api.type.ValueType;
+import org.apache.polygene.serialization.javaxjson.JavaxJson;
import org.apache.polygene.spi.module.ModuleSpi;
import static java.util.stream.Collectors.joining;
@@ -157,8 +158,6 @@ public interface JsonDeserializer extends Deserializer
return outOfStructureFunction.apply( stateString );
}
// Empty state string?
- JsonValue emptyJsonString = Json.createReader( new StringReader( "{\"empty\":\"\"}" ) )
- .readObject().get( "empty" );
- return fromJson( module, valueType, emptyJsonString );
+ return fromJson( module, valueType, JavaxJson.EMPTY_STRING );
}
}
http://git-wip-us.apache.org/repos/asf/polygene-java/blob/9485717f/core/spi/src/main/java/org/apache/polygene/spi/serialization/XmlDeserializer.java
----------------------------------------------------------------------
diff --git a/core/spi/src/main/java/org/apache/polygene/spi/serialization/XmlDeserializer.java b/core/spi/src/main/java/org/apache/polygene/spi/serialization/XmlDeserializer.java
index c7ac42b..9e559c8 100644
--- a/core/spi/src/main/java/org/apache/polygene/spi/serialization/XmlDeserializer.java
+++ b/core/spi/src/main/java/org/apache/polygene/spi/serialization/XmlDeserializer.java
@@ -28,12 +28,7 @@ import javax.xml.parsers.ParserConfigurationException;
import org.apache.polygene.api.serialization.Deserializer;
import org.apache.polygene.api.serialization.SerializationException;
import org.apache.polygene.api.structure.ModuleDescriptor;
-import org.apache.polygene.api.type.CollectionType;
-import org.apache.polygene.api.type.EnumType;
-import org.apache.polygene.api.type.MapType;
-import org.apache.polygene.api.type.ValueCompositeType;
import org.apache.polygene.api.type.ValueType;
-import org.apache.polygene.api.value.ValueDescriptor;
import org.apache.polygene.spi.module.ModuleSpi;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
http://git-wip-us.apache.org/repos/asf/polygene-java/blob/9485717f/extensions/serialization-javaxxml/src/main/java/org/apache/polygene/serialization/javaxxml/JavaxXmlDeserializer.java
----------------------------------------------------------------------
diff --git a/extensions/serialization-javaxxml/src/main/java/org/apache/polygene/serialization/javaxxml/JavaxXmlDeserializer.java b/extensions/serialization-javaxxml/src/main/java/org/apache/polygene/serialization/javaxxml/JavaxXmlDeserializer.java
index f477a8c..146d763 100644
--- a/extensions/serialization-javaxxml/src/main/java/org/apache/polygene/serialization/javaxxml/JavaxXmlDeserializer.java
+++ b/extensions/serialization-javaxxml/src/main/java/org/apache/polygene/serialization/javaxxml/JavaxXmlDeserializer.java
@@ -315,22 +315,21 @@ public class JavaxXmlDeserializer extends AbstractTextDeserializer implements Xm
}
if( xml.getNodeType() == Node.CDATA_SECTION_NODE )
{
- return deserializeBase64( xml.getNodeValue() );
+ byte[] bytes = Base64.getDecoder().decode( xml.getNodeValue().getBytes( UTF_8 ) );
+ return deserializeJava( bytes );
}
throw new SerializationException( "Don't know how to deserialize " + valueType + " from " + xml );
}
- private Object deserializeBase64( String inputString )
+ private Object deserializeJava( byte[] bytes )
{
- byte[] bytes = inputString.getBytes( UTF_8 );
- bytes = Base64.getDecoder().decode( bytes );
try( ObjectInputStream oin = new ObjectInputStream( new ByteArrayInputStream( bytes ) ) )
{
return oin.readObject();
}
catch( IOException | ClassNotFoundException ex )
{
- throw new SerializationException( "Unable to deserialize Base64 serialized " + inputString, ex );
+ throw new SerializationException( "Unable to deserialize using Java serialization", ex );
}
}
http://git-wip-us.apache.org/repos/asf/polygene-java/blob/9485717f/extensions/serialization-javaxxml/src/main/java/org/apache/polygene/serialization/javaxxml/JavaxXmlSerializer.java
----------------------------------------------------------------------
diff --git a/extensions/serialization-javaxxml/src/main/java/org/apache/polygene/serialization/javaxxml/JavaxXmlSerializer.java b/extensions/serialization-javaxxml/src/main/java/org/apache/polygene/serialization/javaxxml/JavaxXmlSerializer.java
index 49f1fa0..576647b 100644
--- a/extensions/serialization-javaxxml/src/main/java/org/apache/polygene/serialization/javaxxml/JavaxXmlSerializer.java
+++ b/extensions/serialization-javaxxml/src/main/java/org/apache/polygene/serialization/javaxxml/JavaxXmlSerializer.java
@@ -20,7 +20,6 @@ package org.apache.polygene.serialization.javaxxml;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
-import java.io.UncheckedIOException;
import java.util.Base64;
import java.util.Map;
import java.util.function.Function;
@@ -139,8 +138,8 @@ public class JavaxXmlSerializer extends AbstractTextSerializer implements XmlSer
return serializeStream( document, options, (Stream<?>) object );
}
// Fallback to Java Serialization in Base 64
- // Include all arrays!
- return serializeBase64( document, object );
+ byte[] bytes = Base64.getEncoder().encode( serializeJava( object ) );
+ return document.createCDATASection( new String( bytes, UTF_8 ) );
}
private <T> Node serializeValueComposite( Document document, Options options, T composite, boolean root )
@@ -280,18 +279,18 @@ public class JavaxXmlSerializer extends AbstractTextSerializer implements XmlSer
return collectionElement;
}
- private <T> Node serializeBase64( Document document, T object )
+ private byte[] serializeJava( Object object )
{
ByteArrayOutputStream bout = new ByteArrayOutputStream();
try( ObjectOutputStream out = new ObjectOutputStream( bout ) )
{
out.writeUnshared( object );
- byte[] bytes = Base64.getEncoder().encode( bout.toByteArray() );
- return document.createCDATASection( new String( bytes, UTF_8 ) );
+ out.flush();
+ return bout.toByteArray();
}
catch( IOException ex )
{
- throw new UncheckedIOException( ex );
+ throw new SerializationException( "Unable to serialize using Java serialization", ex );
}
}
http://git-wip-us.apache.org/repos/asf/polygene-java/blob/9485717f/extensions/serialization-msgpack/src/main/java/org/apache/polygene/serialization/msgpack/MessagePackDeserializer.java
----------------------------------------------------------------------
diff --git a/extensions/serialization-msgpack/src/main/java/org/apache/polygene/serialization/msgpack/MessagePackDeserializer.java b/extensions/serialization-msgpack/src/main/java/org/apache/polygene/serialization/msgpack/MessagePackDeserializer.java
index 7a82751..9d5c9df 100644
--- a/extensions/serialization-msgpack/src/main/java/org/apache/polygene/serialization/msgpack/MessagePackDeserializer.java
+++ b/extensions/serialization-msgpack/src/main/java/org/apache/polygene/serialization/msgpack/MessagePackDeserializer.java
@@ -56,7 +56,6 @@ import org.apache.polygene.spi.serialization.AbstractBinaryDeserializer;
import org.msgpack.core.MessagePack;
import org.msgpack.core.MessageUnpacker;
import org.msgpack.value.ArrayValue;
-import org.msgpack.value.BinaryValue;
import org.msgpack.value.ImmutableValue;
import org.msgpack.value.MapValue;
import org.msgpack.value.Value;
@@ -285,7 +284,7 @@ public interface MessagePackDeserializer extends Deserializer
switch( value.getValueType() )
{
case BINARY:
- return deserializeJava( value.asBinaryValue() );
+ return deserializeJava( value.asBinaryValue().asByteArray() );
case MAP:
MapValue mapValue = value.asMapValue();
Optional<String> typeInfo = mapValue
@@ -313,14 +312,16 @@ public interface MessagePackDeserializer extends Deserializer
}
}
- private Object deserializeJava( BinaryValue value )
- throws IOException, ClassNotFoundException
+ private Object deserializeJava( byte[] bytes )
{
- byte[] bytes = value.asByteArray();
try( ObjectInputStream oin = new ObjectInputStream( new ByteArrayInputStream( bytes ) ) )
{
return oin.readObject();
}
+ catch( IOException | ClassNotFoundException ex )
+ {
+ throw new SerializationException( "Unable to deserialize using Java serialization", ex );
+ }
}
}
}
http://git-wip-us.apache.org/repos/asf/polygene-java/blob/9485717f/extensions/serialization-msgpack/src/main/java/org/apache/polygene/serialization/msgpack/MessagePackSerializer.java
----------------------------------------------------------------------
diff --git a/extensions/serialization-msgpack/src/main/java/org/apache/polygene/serialization/msgpack/MessagePackSerializer.java b/extensions/serialization-msgpack/src/main/java/org/apache/polygene/serialization/msgpack/MessagePackSerializer.java
index c01ef29..ea66ad0 100644
--- a/extensions/serialization-msgpack/src/main/java/org/apache/polygene/serialization/msgpack/MessagePackSerializer.java
+++ b/extensions/serialization-msgpack/src/main/java/org/apache/polygene/serialization/msgpack/MessagePackSerializer.java
@@ -45,7 +45,6 @@ import org.apache.polygene.spi.serialization.AbstractBinarySerializer;
import org.msgpack.core.MessagePack;
import org.msgpack.core.MessagePacker;
import org.msgpack.value.ArrayValue;
-import org.msgpack.value.BinaryValue;
import org.msgpack.value.MapValue;
import org.msgpack.value.Value;
import org.msgpack.value.ValueFactory;
@@ -124,8 +123,7 @@ public interface MessagePackSerializer extends Serializer
return serializeStream( options, (Stream<?>) object );
}
// Fallback to Java Serialization
- // Include all arrays!
- return serializeJava( object );
+ return ValueFactory.newBinary( serializeJava( object ) );
}
catch( IOException ex )
{
@@ -203,14 +201,18 @@ public interface MessagePackSerializer extends Serializer
.collect( toList() ) );
}
- private BinaryValue serializeJava( Object object ) throws IOException
+ private byte[] serializeJava( Object object )
{
ByteArrayOutputStream bout = new ByteArrayOutputStream();
try( ObjectOutputStream out = new ObjectOutputStream( bout ) )
{
out.writeUnshared( object );
- byte[] bytes = bout.toByteArray();
- return ValueFactory.newBinary( bytes );
+ out.flush();
+ return bout.toByteArray();
+ }
+ catch( IOException ex )
+ {
+ throw new SerializationException( "Unable to serialize using Java serialization", ex );
}
}
}