5. Binary Converters - aegisql/conveyor GitHub Wiki

Binary Converters

ObjectConverter

ObjectConverter is a simple interface for bi-directional object conversions. Talking specifically about conveyor persistence needs, it is intended to support conversion of data into a storable formats, such as strings and byte arrays, and back.

public interface ObjectConverter <O,P> {
	P toPersistence(O obj);
	O fromPersistence(P p);
	String conversionHint();
}

Simple Example

public class IntegerToStringConverter implements ObjectConverter<Integer,String> {
	@Override
	public String toPersistence(Integer obj) {
		return obj.toString();
	}
	@Override
	public Integer fromPersistence(String p) {
		return Integer.valueOf(p);
	}
	@Override
	public String conversionHint() {
		return "Integer:String";
	}
}

I believe, the idea is clear.

In the conveyor-persistence-core module we provide converters for most of common Java classes, arrays, collections and maps.

Scalar Types

Converter Class Name From type To Type
BigDecimalToBytesConverter BigDecimal byte[]
BigIntegerToBytesConverter BigInteger byte[]
BooleanToBytesConverter Boolean byte[]
ByteToBytesConverter Byte byte[]
CartToBytesConverter Cart byte[]
CharToBytesConverter Char byte[]
ClassToBytesConverter Class byte[]
DateToBytesConverter Date byte[]
DoubleToBytesConverter Double byte[]
EncryptingConverter byte[] encrypted byte[]
EnumToBytesConverter Any enum type byte[]
FloatToBytesConverter Float byte[]
IntegerToBytesConverter Integer byte[]
LongToBytesConverter Long byte[]
NullConverter null value of any type null
ObjectToJsonBytesConverter Any Jackson acceptable object byte[]
ObjectToJsonStringConverter Any Jackson acceptable object String
SerializableToBytesConverter Any Serializable object byte[]
ShortToBytesConverter Short byte[]
StringToBytesConverter String byte[]
UuidToBytesConverter UUID byte[]
SqlDateToBytesConverter java.sql.Date byte[]
SqlTimeToBytesConverter java.sql.Time byte[]
SqlTimestampToBytesConverter java.sql.Timestamp byte[]

Arrays

Converter Class Name From type To Type
BigDecimalsToBytesConverter BigDecimal[] byte[]
BigIntegersToBytesConverter BigInteger[] byte[]
BoolPrimToBytesConverter boolean[] byte[]
BooleansToBytesConverter Boolean[] byte[]
BytesPrimToBytesConverter byte[] byte[]
BytesToBytesConverter Byte[] byte[]
CharPrimToBytesConverter char[] byte[]
CharactersToBytesConverter Char[] byte[]
ClassesToBytesConverter Class[] byte[]
DatesToBytesConverter Date[] byte[]
DoublePrimToBytesConverter double[] byte[]
DoublesToBytesConverter Double[] byte[]
FloatPrimToBytesConverter float[] byte[]
FloatsToBytesConverter Float[] byte[]
IntPrimToBytesConverter int[] byte[]
IntegersToBytesConverter Integer[] byte[]
LongPrimToBytesConverter long[] byte[]
LongsToBytesConverter Long[] byte[]
ShortPrimToBytesConverter short[] byte[]
ShortsToBytesConverter Short[] byte[]
StringsToBytesConverter String[] byte[]
UuidsToBytesConverter UUID[] byte[]
SqlDatesToBytesConverter java.sql.Date[] byte[]
SqlTimesToBytesConverter java.sql.Time byte[]
SqlTimestampsToBytesConverter java.sql.Timestamp byte[]

Collections

Converter Class Name From type To Type
CollectionToByteArrayConverter Collection of any Convertable by ObjectConverter type byte[]
MapToByteArrayConverter Map, where keys and values are convertable by ObjectConverter types byte[]

ConverterAdviser

ConverterAdviser is a registry for converters. It comes pre-seeded with all above listed converters, but you can always add your own converters.

ConverterAdviser uses conversionHint to find right convertor. conversionHint must be a unique String across all converters used by your application. If there is no appropriate ObjectConvertor in the registry and Object is of Serializable class, then Serializable converter will be used.

Generic parameter for the Class is a Label Type.

Example of code, registering JSON converter for user's class

ConverterAdviser<String> ca = new ConverterAdviser<>();
ca.addConverter(MyClass.class, new ObjectToJsonBytesConverter<MyClass>(MyClass.class));

If you used Encrypted Persistence, then you must configure the Adviser with the same encryption settings.

⚠️ **GitHub.com Fallback** ⚠️