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 15:29:06 UTC
[43/48] polygene-java git commit: Assembly time registration of
serialization Converters
Assembly time registration of serialization Converters
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/eed23026
Tree: http://git-wip-us.apache.org/repos/asf/polygene-java/tree/eed23026
Diff: http://git-wip-us.apache.org/repos/asf/polygene-java/diff/eed23026
Branch: refs/heads/serialization-3.0
Commit: eed23026fe2d034bc2a193234ab4aa83ab409272
Parents: 4e3e683
Author: Paul Merlin <pa...@apache.org>
Authored: Mon Mar 13 12:25:24 2017 +0100
Committer: Paul Merlin <pa...@apache.org>
Committed: Mon Mar 13 16:27:47 2017 +0100
----------------------------------------------------------------------
.../JavaxJsonSerializationService.java | 23 +--
.../javaxjson/JavaxJsonSettings.java | 3 +-
.../serialization/SerializationSettings.java | 60 ++++++
.../AbstractPlainValueSerializationTest.java | 185 +++++++++++++------
.../JavaxJsonPlainValueSerializationTest.java | 9 +
.../javaxxml/JavaxXmlSerializationService.java | 23 +--
.../javaxxml/JavaxXmlSettings.java | 3 +-
.../JavaxXmlPlainValueSerializationTest.java | 4 +-
.../MessagePackSerializationService.java | 23 +--
.../msgpack/MessagePackSettings.java | 3 +-
.../MessagePackPlainValueSerializationTest.java | 4 +-
11 files changed, 237 insertions(+), 103 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/polygene-java/blob/eed23026/core/spi/src/main/java/org/apache/polygene/serialization/javaxjson/JavaxJsonSerializationService.java
----------------------------------------------------------------------
diff --git a/core/spi/src/main/java/org/apache/polygene/serialization/javaxjson/JavaxJsonSerializationService.java b/core/spi/src/main/java/org/apache/polygene/serialization/javaxjson/JavaxJsonSerializationService.java
index 2618db7..4c43039 100644
--- a/core/spi/src/main/java/org/apache/polygene/serialization/javaxjson/JavaxJsonSerializationService.java
+++ b/core/spi/src/main/java/org/apache/polygene/serialization/javaxjson/JavaxJsonSerializationService.java
@@ -59,10 +59,9 @@ public interface JavaxJsonSerializationService extends JavaxJsonSerialization, S
{
if( !registrationDone )
{
- registerCustomConverters();
+ applySettings();
registerBuiltInConverters();
- registerCustomAdapters();
- registerBaseAdapters();
+ registerBaseJavaxJsonAdapters();
registrationDone = true;
}
}
@@ -70,9 +69,14 @@ public interface JavaxJsonSerializationService extends JavaxJsonSerialization, S
@Override
public void passivateService() {}
- private void registerCustomConverters()
+ private void applySettings()
{
- // TODO register custom converters
+ JavaxJsonSettings settings
+ = JavaxJsonSettings.orDefault( descriptor.metaInfo( JavaxJsonSettings.class ) );
+ settings.getConverters()
+ .forEach( ( type, converter ) -> converters.registerConverter( type, converter ) );
+ settings.getAdapters()
+ .forEach( ( type, adapter ) -> adapters.registerAdapter( type, adapter ) );
}
private void registerBuiltInConverters()
@@ -80,14 +84,7 @@ public interface JavaxJsonSerializationService extends JavaxJsonSerialization, S
builtInConverters.registerBuiltInConverters( converters );
}
- private void registerCustomAdapters()
- {
- JavaxJsonSettings.orDefault( descriptor.metaInfo( JavaxJsonSettings.class ) )
- .getAdapters()
- .forEach( ( valueType, adapter ) -> adapters.registerAdapter( valueType, adapter ) );
- }
-
- private void registerBaseAdapters()
+ private void registerBaseJavaxJsonAdapters()
{
// Primitive Value types
adapters.registerAdapter( ValueType.STRING, new StringAdapter() );
http://git-wip-us.apache.org/repos/asf/polygene-java/blob/eed23026/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 e0f993d..7042638 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
@@ -20,8 +20,9 @@ package org.apache.polygene.serialization.javaxjson;
import java.util.LinkedHashMap;
import java.util.Map;
import org.apache.polygene.api.type.ValueType;
+import org.apache.polygene.spi.serialization.SerializationSettings;
-public class JavaxJsonSettings
+public class JavaxJsonSettings extends SerializationSettings<JavaxJsonSettings>
{
public static final JavaxJsonSettings DEFAULT = new JavaxJsonSettings();
http://git-wip-us.apache.org/repos/asf/polygene-java/blob/eed23026/core/spi/src/main/java/org/apache/polygene/spi/serialization/SerializationSettings.java
----------------------------------------------------------------------
diff --git a/core/spi/src/main/java/org/apache/polygene/spi/serialization/SerializationSettings.java b/core/spi/src/main/java/org/apache/polygene/spi/serialization/SerializationSettings.java
new file mode 100644
index 0000000..cba63a4
--- /dev/null
+++ b/core/spi/src/main/java/org/apache/polygene/spi/serialization/SerializationSettings.java
@@ -0,0 +1,60 @@
+/*
+ * 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.polygene.spi.serialization;
+
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import org.apache.polygene.api.serialization.Converter;
+import org.apache.polygene.api.type.ValueType;
+
+/**
+ * Serialization Settings.
+ *
+ * Serialization implementations might extend this with additional specialized settings.
+ *
+ * @param <SettingsType> Specialization type of SerializationSettings for a fluent usage
+ */
+public class SerializationSettings<SettingsType extends SerializationSettings>
+{
+ public static final SerializationSettings DEFAULT = new SerializationSettings();
+
+ public static SerializationSettings orDefault( SerializationSettings settings )
+ {
+ return settings != null ? settings : DEFAULT;
+ }
+
+ private final Map<ValueType, Converter<Object>> converters = new LinkedHashMap<>();
+
+ public final Map<ValueType, Converter<Object>> getConverters()
+ {
+ return Collections.unmodifiableMap( converters );
+ }
+
+ @SuppressWarnings( "unchecked" )
+ public final SettingsType withConverter( ValueType valueType, Converter<Object> adapter )
+ {
+ converters.put( valueType, adapter );
+ return (SettingsType) this;
+ }
+
+ public final SettingsType withConverter( Converter<Object> adapter )
+ {
+ return withConverter( ValueType.of( adapter.type() ), adapter );
+ }
+}
http://git-wip-us.apache.org/repos/asf/polygene-java/blob/eed23026/core/testsupport/src/main/java/org/apache/polygene/test/serialization/AbstractPlainValueSerializationTest.java
----------------------------------------------------------------------
diff --git a/core/testsupport/src/main/java/org/apache/polygene/test/serialization/AbstractPlainValueSerializationTest.java b/core/testsupport/src/main/java/org/apache/polygene/test/serialization/AbstractPlainValueSerializationTest.java
index 8f3ad6a..8822a82 100644
--- a/core/testsupport/src/main/java/org/apache/polygene/test/serialization/AbstractPlainValueSerializationTest.java
+++ b/core/testsupport/src/main/java/org/apache/polygene/test/serialization/AbstractPlainValueSerializationTest.java
@@ -31,12 +31,15 @@ import java.time.Period;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
+import java.util.Objects;
import org.apache.polygene.api.entity.EntityReference;
import org.apache.polygene.api.injection.scope.Service;
+import org.apache.polygene.api.serialization.Converter;
import org.apache.polygene.api.serialization.Serialization;
import org.apache.polygene.api.type.EnumType;
import org.apache.polygene.api.type.ValueType;
import org.apache.polygene.bootstrap.ModuleAssembly;
+import org.apache.polygene.spi.serialization.SerializationSettings;
import org.apache.polygene.test.AbstractPolygeneTest;
import org.junit.Test;
@@ -48,15 +51,26 @@ import static org.junit.Assert.assertThat;
/**
* Assert that ValueSerialization behaviour on plain values is correct.
+ *
+ * Implementations must:
+ * <ul>
+ * <li>implement {@link #assemble(ModuleAssembly)}</li>
+ * <li>
+ * apply test {@link SerializationSettings} using {@link #withTestSettings(SerializationSettings)}
+ * in {@literal assemble()}
+ * </li>
+ * <li>implement {@link #getSingleStringRawState(String)}</li>
+ * </ul>
*/
public abstract class AbstractPlainValueSerializationTest extends AbstractPolygeneTest
{
@Service
- protected Serialization stateSerialization;
+ protected Serialization serialization;
- @Override
- public void assemble( ModuleAssembly module )
+ @SuppressWarnings( "unchecked" )
+ protected <T extends SerializationSettings> T withTestSettings( T settings )
{
+ return (T) settings.withConverter( new CustomConverter() );
}
protected abstract String getSingleStringRawState( String state ) throws Exception;
@@ -64,22 +78,22 @@ public abstract class AbstractPlainValueSerializationTest extends AbstractPolyge
@Test
public void givenNullValueWhenSerializingAndDeserializingExpectNull()
{
- String output = stateSerialization.serialize( null );
+ String output = serialization.serialize( null );
System.out.println( output );
- assertThat( stateSerialization.deserialize( module, ValueType.of( Integer.class ), output ), nullValue() );
- assertThat( stateSerialization.deserialize( module, ValueType.of( String.class ), output ), nullValue() );
- assertThat( stateSerialization.deserialize( module, ValueType.of( SomeEnum.class ), output ), nullValue() );
+ assertThat( serialization.deserialize( module, ValueType.of( Integer.class ), output ), nullValue() );
+ assertThat( serialization.deserialize( module, ValueType.of( String.class ), output ), nullValue() );
+ assertThat( serialization.deserialize( module, ValueType.of( SomeEnum.class ), output ), nullValue() );
}
@Test
public void givenEnumValueWhenSerializingAndDeserializingExpectEquals() throws Exception
{
- String output = stateSerialization.serialize( SomeEnum.B�R );
+ String output = serialization.serialize( SomeEnum.B�R );
System.out.println( output );
assertThat( getSingleStringRawState( output ), equalTo( "B�R" ) );
- SomeEnum value = stateSerialization.deserialize( module, EnumType.of( SomeEnum.class ), output );
+ SomeEnum value = serialization.deserialize( module, EnumType.of( SomeEnum.class ), output );
assertThat( value, is( SomeEnum.B�R ) );
}
@@ -98,116 +112,116 @@ public abstract class AbstractPlainValueSerializationTest extends AbstractPolyge
private <P, B> void assertPrimitiveBoxedDeserializationEquals( Class<P> primitiveType, Class<B> boxedType, P value )
{
- String serialized = stateSerialization.serialize( value );
+ String serialized = serialization.serialize( value );
System.out.println( serialized );
- B boxed = stateSerialization.deserialize( module, boxedType, serialized );
- P primitive = stateSerialization.deserialize( module, primitiveType, serialized );
+ B boxed = serialization.deserialize( module, boxedType, serialized );
+ P primitive = serialization.deserialize( module, primitiveType, serialized );
assertThat( "Primitive/Boxed", boxed, equalTo( primitive ) );
}
@Test
public void givenCharacterValueWhenSerializingAndDeserializingExpectEquals() throws Exception
{
- String serialized = stateSerialization.serialize( '\u222b' );
+ String serialized = serialization.serialize( '\u222b' );
System.out.println( serialized );
- Character deserialized = stateSerialization.deserialize( module, Character.class, serialized );
+ Character deserialized = serialization.deserialize( module, Character.class, serialized );
assertThat( "Deserialized", deserialized, equalTo( '\u222b' ) );
- deserialized = stateSerialization.deserialize( module, char.class, serialized );
+ deserialized = serialization.deserialize( module, char.class, serialized );
assertThat( "Deserialized", deserialized, is( '\u222b' ) );
}
@Test
public void givenEmptyStringValueWhenSerializingAndDeserializingExpectEquals() throws Exception
{
- String serialized = stateSerialization.serialize( "" );
+ String serialized = serialization.serialize( "" );
System.out.println( serialized );
assertThat( getSingleStringRawState( serialized ), equalTo( "" ) );
- String deserialized = stateSerialization.deserialize( module, String.class, serialized );
+ String deserialized = serialization.deserialize( module, String.class, serialized );
assertThat( "Deserialized", deserialized, equalTo( "" ) );
}
@Test
public void givenStringValueWhenSerializingAndDeserializingExpectEquals() throws Exception
{
- String serialized = stateSerialization.serialize( "�\u222b" );
+ String serialized = serialization.serialize( "�\u222b" );
System.out.println( serialized );
assertThat( getSingleStringRawState( serialized ), equalTo( "�\u222b" ) );
- String deserialized = stateSerialization.deserialize( module, String.class, serialized );
+ String deserialized = serialization.deserialize( module, String.class, serialized );
assertThat( deserialized, equalTo( "�\u222b" ) );
}
@Test
public void givenBooleanValueWhenSerializingAndDeserializingExpectEquals()
{
- String serialized = stateSerialization.serialize( true );
+ String serialized = serialization.serialize( true );
System.out.println( serialized );
- Boolean deserialized = stateSerialization.deserialize( module, Boolean.class, serialized );
+ Boolean deserialized = serialization.deserialize( module, Boolean.class, serialized );
assertThat( deserialized, equalTo( Boolean.TRUE ) );
}
@Test
public void givenIntegerValueWhenSerializingAndDeserializingExpectEquals()
{
- String serialized = stateSerialization.serialize( 42 );
+ String serialized = serialization.serialize( 42 );
System.out.println( serialized );
- Integer deserialized = stateSerialization.deserialize( module, Integer.class, serialized );
+ Integer deserialized = serialization.deserialize( module, Integer.class, serialized );
assertThat( deserialized, equalTo( 42 ) );
}
@Test
public void givenLongValueWhenSerializingAndDeserializingExpectEquals()
{
- String serialized = stateSerialization.serialize( 42L );
+ String serialized = serialization.serialize( 42L );
System.out.println( serialized );
- Long deserialized = stateSerialization.deserialize( module, Long.class, serialized );
+ Long deserialized = serialization.deserialize( module, Long.class, serialized );
assertThat( deserialized, equalTo( 42L ) );
}
@Test
public void givenShortValueWhenSerializingAndDeserializingExpectEquals()
{
- String serialized = stateSerialization.serialize( (short) 42 );
+ String serialized = serialization.serialize( (short) 42 );
System.out.println( serialized );
- Short deserialized = stateSerialization.deserialize( module, Short.class, serialized );
+ Short deserialized = serialization.deserialize( module, Short.class, serialized );
assertThat( deserialized, equalTo( (short) 42 ) );
}
@Test
public void givenByteValueWhenSerializingAndDeserializingExpectEquals()
{
- String serialized = stateSerialization.serialize( (byte) 42 );
+ String serialized = serialization.serialize( (byte) 42 );
System.out.println( serialized );
- Byte deserialized = stateSerialization.deserialize( module, Byte.class, serialized );
+ Byte deserialized = serialization.deserialize( module, Byte.class, serialized );
assertThat( deserialized, equalTo( (byte) 42 ) );
}
@Test
public void givenFloatValueWhenSerializingAndDeserializingExpectEquals()
{
- String serialized = stateSerialization.serialize( 42F );
+ String serialized = serialization.serialize( 42F );
System.out.println( serialized );
- Float deserialized = stateSerialization.deserialize( module, Float.class, serialized );
+ Float deserialized = serialization.deserialize( module, Float.class, serialized );
assertThat( deserialized, equalTo( 42F ) );
}
@Test
public void givenDoubleValueWhenSerializingAndDeserializingExpectEquals()
{
- String serialized = stateSerialization.serialize( 42D );
+ String serialized = serialization.serialize( 42D );
System.out.println( serialized );
- Double deserialized = stateSerialization.deserialize( module, Double.class, serialized );
+ Double deserialized = serialization.deserialize( module, Double.class, serialized );
assertThat( deserialized, equalTo( 42D ) );
}
@@ -217,10 +231,10 @@ public abstract class AbstractPlainValueSerializationTest extends AbstractPolyge
BigInteger bigInteger = new BigInteger( "42424242424242424242424242" );
assertThat( bigInteger, not( equalTo( BigInteger.valueOf( bigInteger.longValue() ) ) ) );
- String serialized = stateSerialization.serialize( bigInteger );
+ String serialized = serialization.serialize( bigInteger );
System.out.println( serialized );
- BigInteger deserialized = stateSerialization.deserialize( module, BigInteger.class, serialized );
+ BigInteger deserialized = serialization.deserialize( module, BigInteger.class, serialized );
assertThat( deserialized, equalTo( bigInteger ) );
}
@@ -230,10 +244,10 @@ public abstract class AbstractPlainValueSerializationTest extends AbstractPolyge
BigDecimal bigDecimal = new BigDecimal( "42.2376931348623157e+309" );
assertThat( bigDecimal.doubleValue(), equalTo( Double.POSITIVE_INFINITY ) );
- String serialized = stateSerialization.serialize( bigDecimal );
+ String serialized = serialization.serialize( bigDecimal );
System.out.println( serialized );
- BigDecimal deserialized = stateSerialization.deserialize( module, BigDecimal.class, serialized );
+ BigDecimal deserialized = serialization.deserialize( module, BigDecimal.class, serialized );
assertThat( deserialized, equalTo( bigDecimal ) );
}
@@ -241,45 +255,45 @@ public abstract class AbstractPlainValueSerializationTest extends AbstractPolyge
public void givenLocalDateTimeValueWhenSerializingAndDeserializingExpectEquals() throws Exception
{
// Serialized without TimeZone
- String serialized = stateSerialization.serialize( LocalDateTime.of( 2020, 3, 4, 13, 23, 12 ) );
+ String serialized = serialization.serialize( LocalDateTime.of( 2020, 3, 4, 13, 23, 12 ) );
System.out.println( serialized );
assertThat( getSingleStringRawState( serialized ), equalTo( "2020-03-04T13:23:12" ) );
- LocalDateTime deserialized = stateSerialization.deserialize( module, LocalDateTime.class, serialized );
+ LocalDateTime deserialized = serialization.deserialize( module, LocalDateTime.class, serialized );
assertThat( deserialized, equalTo( LocalDateTime.of( 2020, 3, 4, 13, 23, 12 ) ) );
}
@Test
public void givenLocalDateValueWhenSerializingAndDeserializingExpectEquals() throws Exception
{
- String serialized = stateSerialization.serialize( LocalDate.of( 2020, 3, 4 ) );
+ String serialized = serialization.serialize( LocalDate.of( 2020, 3, 4 ) );
System.out.println( serialized );
assertThat( getSingleStringRawState( serialized ), equalTo( "2020-03-04" ) );
- LocalDate deserialized = stateSerialization.deserialize( module, LocalDate.class, serialized );
+ LocalDate deserialized = serialization.deserialize( module, LocalDate.class, serialized );
assertThat( deserialized, equalTo( LocalDate.of( 2020, 3, 4 ) ) );
}
@Test
public void givenLocalTimeValueWhenSerializingAndDeserializingExpectEquals() throws Exception
{
- String serialized = stateSerialization.serialize( LocalTime.of( 14, 54, 27 ) );
+ String serialized = serialization.serialize( LocalTime.of( 14, 54, 27 ) );
System.out.println( serialized );
assertThat( getSingleStringRawState( serialized ), equalTo( "14:54:27" ) );
- LocalTime deserialized = stateSerialization.deserialize( module, LocalTime.class, serialized );
+ LocalTime deserialized = serialization.deserialize( module, LocalTime.class, serialized );
assertThat( deserialized, equalTo( LocalTime.of( 14, 54, 27 ) ) );
}
@Test
public void givenOffsetDateTimeValueWhenSerializingAndDeserializingExpectEquals() throws Exception
{
- String serialized = stateSerialization.serialize( OffsetDateTime.of( 2009, 8, 12, 14, 54, 27, 895000000,
- ZoneOffset.ofHours( 8 ) ) );
+ String serialized = serialization.serialize( OffsetDateTime.of( 2009, 8, 12, 14, 54, 27, 895000000,
+ ZoneOffset.ofHours( 8 ) ) );
System.out.println( serialized );
assertThat( getSingleStringRawState( serialized ), equalTo( "2009-08-12T14:54:27.895+08:00" ) );
- OffsetDateTime deserialized = stateSerialization.deserialize( module, OffsetDateTime.class, serialized );
+ OffsetDateTime deserialized = serialization.deserialize( module, OffsetDateTime.class, serialized );
assertThat( deserialized, equalTo( OffsetDateTime.of( 2009, 8, 12, 14, 54, 27, 895000000,
ZoneOffset.ofHours( 8 ) ) ) );
}
@@ -287,12 +301,12 @@ public abstract class AbstractPlainValueSerializationTest extends AbstractPolyge
@Test
public void givenZonedDateTimeValueWhenSerializingAndDeserializingExpectEquals() throws Exception
{
- String serialized = stateSerialization.serialize( ZonedDateTime.of( 2009, 8, 12, 14, 54, 27, 895000000,
- ZoneId.of( "CET" ) ) );
+ String serialized = serialization.serialize( ZonedDateTime.of( 2009, 8, 12, 14, 54, 27, 895000000,
+ ZoneId.of( "CET" ) ) );
System.out.println( serialized );
assertThat( getSingleStringRawState( serialized ), equalTo( "2009-08-12T14:54:27.895+02:00[CET]" ) );
- ZonedDateTime deserialized = stateSerialization.deserialize( module, ZonedDateTime.class, serialized );
+ ZonedDateTime deserialized = serialization.deserialize( module, ZonedDateTime.class, serialized );
assertThat( deserialized, equalTo( ZonedDateTime.of( 2009, 8, 12, 14, 54, 27, 895000000,
ZoneId.of( "CET" ) ) ) );
}
@@ -300,50 +314,107 @@ public abstract class AbstractPlainValueSerializationTest extends AbstractPolyge
@Test
public void givenInstantValueWhenSerializingAndDeserializingExpectEquals() throws Exception
{
- String serialized = stateSerialization.serialize( Instant.parse( "2016-06-11T08:47:12.620Z" ) );
+ String serialized = serialization.serialize( Instant.parse( "2016-06-11T08:47:12.620Z" ) );
System.out.println( serialized );
assertThat( getSingleStringRawState( serialized ), equalTo( "2016-06-11T08:47:12.620Z" ) );
- Instant deserialized = stateSerialization.deserialize( module, Instant.class, serialized );
+ Instant deserialized = serialization.deserialize( module, Instant.class, serialized );
assertThat( deserialized, equalTo( Instant.parse( "2016-06-11T08:47:12.620Z" ) ) );
}
@Test
public void givenDurationValueWhenSerializingAndDeserializingExpectEquals() throws Exception
{
- String serialized = stateSerialization.serialize( Duration.ofMillis( 3500 ) );
+ String serialized = serialization.serialize( Duration.ofMillis( 3500 ) );
System.out.println( serialized );
assertThat( getSingleStringRawState( serialized ), equalTo( "PT3.5S" ) );
- Duration deserialized = stateSerialization.deserialize( module, Duration.class, serialized );
+ Duration deserialized = serialization.deserialize( module, Duration.class, serialized );
assertThat( deserialized, equalTo( Duration.ofMillis( 3500 ) ) );
}
@Test
public void givenPeriodValueWhenSerializingAndDeserializingExpectEquals() throws Exception
{
- String serialized = stateSerialization.serialize( Period.of( 3, 5, 13 ) );
+ String serialized = serialization.serialize( Period.of( 3, 5, 13 ) );
System.out.println( serialized );
assertThat( getSingleStringRawState( serialized ), equalTo( "P3Y5M13D" ) );
- Period deserialized = stateSerialization.deserialize( module, Period.class, serialized );
+ Period deserialized = serialization.deserialize( module, Period.class, serialized );
assertThat( deserialized, equalTo( Period.of( 3, 5, 13 ) ) );
}
@Test
public void givenEntityReferenceValueWhenSerializingAndDeserializingExpectEquals() throws Exception
{
- String serialized = stateSerialization.serialize( EntityReference.parseEntityReference( "ABCD-1234" ) );
+ String serialized = serialization.serialize( EntityReference.parseEntityReference( "ABCD-1234" ) );
System.out.println( serialized );
assertThat( getSingleStringRawState( serialized ), equalTo( "ABCD-1234" ) );
- EntityReference deserialized = stateSerialization.deserialize( module, EntityReference.class, serialized );
+ EntityReference deserialized = serialization.deserialize( module, EntityReference.class, serialized );
assertThat( deserialized, equalTo( EntityReference.parseEntityReference( "ABCD-1234" ) ) );
}
+ @Test
+ public void givenCustomPlainValueTypeAndItsConverterWhenSerializingAndDeserializingExpectEquals() throws Exception
+ {
+ String serialized = serialization.serialize( new CustomConvertedValue( "ABCD-1234" ) );
+ System.out.println( serialized );
+ assertThat( getSingleStringRawState( serialized ), equalTo( "ABCD-1234" ) );
+
+ CustomConvertedValue deserialized = serialization.deserialize( module, CustomConvertedValue.class, serialized );
+ assertThat( deserialized, equalTo( new CustomConvertedValue( "ABCD-1234" ) ) );
+ }
+
private enum SomeEnum
{
B�R,
BAZAR
}
+
+ static class CustomConverter implements Converter<CustomConvertedValue>
+ {
+ @Override
+ public Class<CustomConvertedValue> type()
+ {
+ return CustomConvertedValue.class;
+ }
+
+ @Override
+ public String toString( CustomConvertedValue object )
+ {
+ return object.value;
+ }
+
+ @Override
+ public CustomConvertedValue fromString( String string )
+ {
+ return new CustomConvertedValue( string );
+ }
+ }
+
+ static class CustomConvertedValue
+ {
+ private final String value;
+
+ CustomConvertedValue( String value )
+ {
+ this.value = value;
+ }
+
+ @Override
+ public boolean equals( final Object o )
+ {
+ if( this == o ) { return true; }
+ if( o == null || getClass() != o.getClass() ) { return false; }
+ CustomConvertedValue that = (CustomConvertedValue) o;
+ return Objects.equals( value, that.value );
+ }
+
+ @Override
+ public int hashCode()
+ {
+ return Objects.hashCode( value );
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/polygene-java/blob/eed23026/extensions/serialization-javaxjson/src/test/java/org/apache/polygene/serialization/javaxjson/JavaxJsonPlainValueSerializationTest.java
----------------------------------------------------------------------
diff --git a/extensions/serialization-javaxjson/src/test/java/org/apache/polygene/serialization/javaxjson/JavaxJsonPlainValueSerializationTest.java b/extensions/serialization-javaxjson/src/test/java/org/apache/polygene/serialization/javaxjson/JavaxJsonPlainValueSerializationTest.java
index 8be807f..887c555 100644
--- a/extensions/serialization-javaxjson/src/test/java/org/apache/polygene/serialization/javaxjson/JavaxJsonPlainValueSerializationTest.java
+++ b/extensions/serialization-javaxjson/src/test/java/org/apache/polygene/serialization/javaxjson/JavaxJsonPlainValueSerializationTest.java
@@ -19,11 +19,20 @@
*/
package org.apache.polygene.serialization.javaxjson;
+import org.apache.polygene.bootstrap.ModuleAssembly;
import org.apache.polygene.test.serialization.AbstractPlainValueSerializationTest;
public class JavaxJsonPlainValueSerializationTest extends AbstractPlainValueSerializationTest
{
@Override
+ public void assemble( final ModuleAssembly module )
+ {
+ new JavaxJsonSerializationAssembler()
+ .withJsonSettings( withTestSettings( new JavaxJsonSettings() ) )
+ .assemble( module );
+ }
+
+ @Override
protected String getSingleStringRawState( String state )
{
return state;
http://git-wip-us.apache.org/repos/asf/polygene-java/blob/eed23026/extensions/serialization-javaxxml/src/main/java/org/apache/polygene/serialization/javaxxml/JavaxXmlSerializationService.java
----------------------------------------------------------------------
diff --git a/extensions/serialization-javaxxml/src/main/java/org/apache/polygene/serialization/javaxxml/JavaxXmlSerializationService.java b/extensions/serialization-javaxxml/src/main/java/org/apache/polygene/serialization/javaxxml/JavaxXmlSerializationService.java
index 10b692e..a50f0f2 100644
--- a/extensions/serialization-javaxxml/src/main/java/org/apache/polygene/serialization/javaxxml/JavaxXmlSerializationService.java
+++ b/extensions/serialization-javaxxml/src/main/java/org/apache/polygene/serialization/javaxxml/JavaxXmlSerializationService.java
@@ -54,10 +54,9 @@ public interface JavaxXmlSerializationService extends JavaxXmlSerialization, Ser
{
if( !registrationDone )
{
- registerCustomConverters();
+ applySettings();
registerBuiltInConverters();
- registerCustomAdapters();
- registerBaseAdapters();
+ registerBaseJavaxXmlAdapters();
registrationDone = true;
}
}
@@ -65,9 +64,14 @@ public interface JavaxXmlSerializationService extends JavaxXmlSerialization, Ser
@Override
public void passivateService() {}
- private void registerCustomConverters()
+ private void applySettings()
{
- // TODO register custom converters
+ JavaxXmlSettings settings
+ = JavaxXmlSettings.orDefault( descriptor.metaInfo( JavaxXmlSettings.class ) );
+ settings.getConverters()
+ .forEach( ( type, converter ) -> converters.registerConverter( type, converter ) );
+ settings.getAdapters()
+ .forEach( ( type, adapter ) -> adapters.registerAdapter( type, adapter ) );
}
private void registerBuiltInConverters()
@@ -75,14 +79,7 @@ public interface JavaxXmlSerializationService extends JavaxXmlSerialization, Ser
builtInConverters.registerBuiltInConverters( converters );
}
- private void registerCustomAdapters()
- {
- JavaxXmlSettings.orDefault( descriptor.metaInfo( JavaxXmlSettings.class ) )
- .getAdapters()
- .forEach( ( valueType, adapter ) -> adapters.registerAdapter( valueType, adapter ) );
- }
-
- private void registerBaseAdapters()
+ private void registerBaseJavaxXmlAdapters()
{
// Primitive Value types
adapters.registerAdapter( ValueType.STRING, new StringAdapter() );
http://git-wip-us.apache.org/repos/asf/polygene-java/blob/eed23026/extensions/serialization-javaxxml/src/main/java/org/apache/polygene/serialization/javaxxml/JavaxXmlSettings.java
----------------------------------------------------------------------
diff --git a/extensions/serialization-javaxxml/src/main/java/org/apache/polygene/serialization/javaxxml/JavaxXmlSettings.java b/extensions/serialization-javaxxml/src/main/java/org/apache/polygene/serialization/javaxxml/JavaxXmlSettings.java
index 775f941..c5484fb 100644
--- a/extensions/serialization-javaxxml/src/main/java/org/apache/polygene/serialization/javaxxml/JavaxXmlSettings.java
+++ b/extensions/serialization-javaxxml/src/main/java/org/apache/polygene/serialization/javaxxml/JavaxXmlSettings.java
@@ -20,6 +20,7 @@ package org.apache.polygene.serialization.javaxxml;
import java.util.LinkedHashMap;
import java.util.Map;
import org.apache.polygene.api.type.ValueType;
+import org.apache.polygene.spi.serialization.SerializationSettings;
/**
* javax.xml settings.
@@ -27,7 +28,7 @@ import org.apache.polygene.api.type.ValueType;
* Must be registered as meta-info at assembly time.
*/
// TODO javax.xml properties?
-public class JavaxXmlSettings
+public class JavaxXmlSettings extends SerializationSettings<JavaxXmlSettings>
{
public static final JavaxXmlSettings DEFAULT = new JavaxXmlSettings();
http://git-wip-us.apache.org/repos/asf/polygene-java/blob/eed23026/extensions/serialization-javaxxml/src/test/java/org/apache/polygene/serialization/javaxxml/JavaxXmlPlainValueSerializationTest.java
----------------------------------------------------------------------
diff --git a/extensions/serialization-javaxxml/src/test/java/org/apache/polygene/serialization/javaxxml/JavaxXmlPlainValueSerializationTest.java b/extensions/serialization-javaxxml/src/test/java/org/apache/polygene/serialization/javaxxml/JavaxXmlPlainValueSerializationTest.java
index 11979a2..4d0b07e 100644
--- a/extensions/serialization-javaxxml/src/test/java/org/apache/polygene/serialization/javaxxml/JavaxXmlPlainValueSerializationTest.java
+++ b/extensions/serialization-javaxxml/src/test/java/org/apache/polygene/serialization/javaxxml/JavaxXmlPlainValueSerializationTest.java
@@ -35,8 +35,8 @@ public class JavaxXmlPlainValueSerializationTest extends AbstractPlainValueSeria
@Override
public void assemble( ModuleAssembly module )
{
- new JavaxXmlSerializationAssembler().assemble( module );
- super.assemble( module );
+ new JavaxXmlSerializationAssembler().withXmlSettings( withTestSettings( new JavaxXmlSettings() ) )
+ .assemble( module );
}
@Override
http://git-wip-us.apache.org/repos/asf/polygene-java/blob/eed23026/extensions/serialization-msgpack/src/main/java/org/apache/polygene/serialization/msgpack/MessagePackSerializationService.java
----------------------------------------------------------------------
diff --git a/extensions/serialization-msgpack/src/main/java/org/apache/polygene/serialization/msgpack/MessagePackSerializationService.java b/extensions/serialization-msgpack/src/main/java/org/apache/polygene/serialization/msgpack/MessagePackSerializationService.java
index 51badc3..9bc2d74 100644
--- a/extensions/serialization-msgpack/src/main/java/org/apache/polygene/serialization/msgpack/MessagePackSerializationService.java
+++ b/extensions/serialization-msgpack/src/main/java/org/apache/polygene/serialization/msgpack/MessagePackSerializationService.java
@@ -54,10 +54,9 @@ public interface MessagePackSerializationService extends MessagePackSerializatio
{
if( !registrationDone )
{
- registerCustomConverters();
+ applySettings();
registerBuiltInConverters();
- registerCustomAdapters();
- registerBaseAdapters();
+ registerBaseMessagePackAdapters();
registrationDone = true;
}
}
@@ -65,9 +64,14 @@ public interface MessagePackSerializationService extends MessagePackSerializatio
@Override
public void passivateService() {}
- private void registerCustomConverters()
+ private void applySettings()
{
- // TODO register custom converters
+ MessagePackSettings settings
+ = MessagePackSettings.orDefault( descriptor.metaInfo( MessagePackSettings.class ) );
+ settings.getConverters()
+ .forEach( ( type, converter ) -> converters.registerConverter( type, converter ) );
+ settings.getAdapters()
+ .forEach( ( type, adapter ) -> adapters.registerAdapter( type, adapter ) );
}
private void registerBuiltInConverters()
@@ -75,14 +79,7 @@ public interface MessagePackSerializationService extends MessagePackSerializatio
builtInConverters.registerBuiltInConverters( converters );
}
- private void registerCustomAdapters()
- {
- MessagePackSettings.orDefault( descriptor.metaInfo( MessagePackSettings.class ) )
- .getAdapters()
- .forEach( ( valueType, adapter ) -> adapters.registerAdapter( valueType, adapter ) );
- }
-
- private void registerBaseAdapters()
+ private void registerBaseMessagePackAdapters()
{
// Primitive Value types
adapters.registerAdapter( ValueType.STRING, new StringAdapter() );
http://git-wip-us.apache.org/repos/asf/polygene-java/blob/eed23026/extensions/serialization-msgpack/src/main/java/org/apache/polygene/serialization/msgpack/MessagePackSettings.java
----------------------------------------------------------------------
diff --git a/extensions/serialization-msgpack/src/main/java/org/apache/polygene/serialization/msgpack/MessagePackSettings.java b/extensions/serialization-msgpack/src/main/java/org/apache/polygene/serialization/msgpack/MessagePackSettings.java
index 8080d94..e3fbf26 100644
--- a/extensions/serialization-msgpack/src/main/java/org/apache/polygene/serialization/msgpack/MessagePackSettings.java
+++ b/extensions/serialization-msgpack/src/main/java/org/apache/polygene/serialization/msgpack/MessagePackSettings.java
@@ -20,8 +20,9 @@ package org.apache.polygene.serialization.msgpack;
import java.util.LinkedHashMap;
import java.util.Map;
import org.apache.polygene.api.type.ValueType;
+import org.apache.polygene.spi.serialization.SerializationSettings;
-public class MessagePackSettings
+public class MessagePackSettings extends SerializationSettings<MessagePackSettings>
{
public static final MessagePackSettings DEFAULT = new MessagePackSettings();
http://git-wip-us.apache.org/repos/asf/polygene-java/blob/eed23026/extensions/serialization-msgpack/src/test/java/org/apache/polygene/serialization/msgpack/MessagePackPlainValueSerializationTest.java
----------------------------------------------------------------------
diff --git a/extensions/serialization-msgpack/src/test/java/org/apache/polygene/serialization/msgpack/MessagePackPlainValueSerializationTest.java b/extensions/serialization-msgpack/src/test/java/org/apache/polygene/serialization/msgpack/MessagePackPlainValueSerializationTest.java
index 48ad8f8..6714527 100644
--- a/extensions/serialization-msgpack/src/test/java/org/apache/polygene/serialization/msgpack/MessagePackPlainValueSerializationTest.java
+++ b/extensions/serialization-msgpack/src/test/java/org/apache/polygene/serialization/msgpack/MessagePackPlainValueSerializationTest.java
@@ -29,8 +29,8 @@ public class MessagePackPlainValueSerializationTest extends AbstractPlainValueSe
@Override
public void assemble( ModuleAssembly module )
{
- new MessagePackSerializationAssembler().assemble( module );
- super.assemble( module );
+ new MessagePackSerializationAssembler().withMessagePackSettings( withTestSettings( new MessagePackSettings() ) )
+ .assemble( module );
}
@Override