Skip to content

Commit 808d229

Browse files
author
Mark
committed
added byte[] de-/serialization from/to VPack.string (Base64)
1 parent 65d9ce9 commit 808d229

File tree

5 files changed

+57
-0
lines changed

5 files changed

+57
-0
lines changed

ChangeLog

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ v4.1.8 (2017-02-xx)
33
* changed java.util.Date serialization from VPack.date to VPack.string (ISO 8601)
44
* changed java.sql.Date serialization from VPack.date to VPack.string (ISO 8601)
55
* changed java.sql.Timestamp serialization from VPack.date to VPack.string (ISO 8601)
6+
* added byte[] de-/serialization from/to VPack.string (Base64)
67

78
v4.1.7 (2017-01-26)
89
---------------------------

src/main/java/com/arangodb/velocypack/VPack.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ public Builder() {
125125
serializers.put(java.sql.Timestamp.class, VPackSerializers.SQL_TIMESTAMP);
126126
serializers.put(VPackSlice.class, VPackSerializers.VPACK);
127127
serializers.put(UUID.class, VPackSerializers.UUID);
128+
serializers.put(new byte[] {}.getClass(), VPackSerializers.BYTE_ARRAY);
128129

129130
deserializers.put(String.class, VPackDeserializers.STRING);
130131
deserializers.put(Boolean.class, VPackDeserializers.BOOLEAN);
@@ -149,6 +150,7 @@ public Builder() {
149150
deserializers.put(java.sql.Timestamp.class, VPackDeserializers.SQL_TIMESTAMP);
150151
deserializers.put(VPackSlice.class, VPackDeserializers.VPACK);
151152
deserializers.put(UUID.class, VPackDeserializers.UUID);
153+
deserializers.put(new byte[] {}.getClass(), VPackDeserializers.BYTE_ARRAY);
152154

153155
annotationFieldFilter.put(Expose.class, new VPackAnnotationFieldFilter<Expose>() {
154156
@Override

src/main/java/com/arangodb/velocypack/internal/VPackDeserializers.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@
2727
import java.util.Date;
2828
import java.util.UUID;
2929

30+
import javax.xml.bind.DatatypeConverter;
31+
3032
import com.arangodb.velocypack.VPackDeserializationContext;
3133
import com.arangodb.velocypack.VPackDeserializer;
3234
import com.arangodb.velocypack.VPackSlice;
@@ -219,5 +221,15 @@ public UUID deserialize(
219221
return java.util.UUID.fromString(vpack.getAsString());
220222
}
221223
};
224+
public static final VPackDeserializer<byte[]> BYTE_ARRAY = new VPackDeserializer<byte[]>() {
225+
@Override
226+
public byte[] deserialize(
227+
final VPackSlice parent,
228+
final VPackSlice vpack,
229+
final VPackDeserializationContext context) throws VPackException {
230+
return DatatypeConverter.parseBase64Binary(vpack.getAsString());
231+
}
232+
233+
};
222234

223235
}

src/main/java/com/arangodb/velocypack/internal/VPackSerializers.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626
import java.util.Date;
2727
import java.util.UUID;
2828

29+
import javax.xml.bind.DatatypeConverter;
30+
2931
import com.arangodb.velocypack.VPackBuilder;
3032
import com.arangodb.velocypack.VPackSerializationContext;
3133
import com.arangodb.velocypack.VPackSerializer;
@@ -203,4 +205,14 @@ public void serialize(
203205
builder.add(attribute, value.toString());
204206
}
205207
};
208+
public static final VPackSerializer<byte[]> BYTE_ARRAY = new VPackSerializer<byte[]>() {
209+
@Override
210+
public void serialize(
211+
final VPackBuilder builder,
212+
final String attribute,
213+
final byte[] value,
214+
final VPackSerializationContext context) throws VPackException {
215+
builder.add(attribute, DatatypeConverter.printBase64Binary(value));
216+
}
217+
};
206218
}

src/test/java/com/arangodb/velocypack/VPackSerializeDeserializeTest.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@
4949
import java.util.Set;
5050
import java.util.UUID;
5151

52+
import javax.xml.bind.DatatypeConverter;
53+
5254
import org.junit.Test;
5355

5456
import com.arangodb.velocypack.annotations.Expose;
@@ -3503,4 +3505,32 @@ public void toTransient() {
35033505
assertThat(entity.foo, is(nullValue()));
35043506
}
35053507

3508+
private static class BinaryEntity {
3509+
private byte[] foo;
3510+
3511+
public BinaryEntity() {
3512+
super();
3513+
}
3514+
}
3515+
3516+
@Test
3517+
public void fromBinary() {
3518+
final BinaryEntity entity = new BinaryEntity();
3519+
entity.foo = "bar".getBytes();
3520+
final VPackSlice vpack = new VPack.Builder().build().serialize(entity);
3521+
assertThat(vpack, is(notNullValue()));
3522+
assertThat(vpack.isObject(), is(true));
3523+
assertThat(vpack.get("foo").isString(), is(true));
3524+
assertThat(vpack.get("foo").getAsString(), is(DatatypeConverter.printBase64Binary(entity.foo)));
3525+
}
3526+
3527+
@Test
3528+
public void toBinary() {
3529+
final String value = DatatypeConverter.printBase64Binary("bar".getBytes());
3530+
final VPackSlice vpack = new VPackBuilder().add(ValueType.OBJECT).add("foo", value).close().slice();
3531+
final BinaryEntity entity = new VPack.Builder().build().deserialize(vpack, BinaryEntity.class);
3532+
assertThat(entity, is(notNullValue()));
3533+
assertThat(entity.foo, is("bar".getBytes()));
3534+
}
3535+
35063536
}

0 commit comments

Comments
 (0)