Skip to content

Commit 65d9ce9

Browse files
author
Mark
committed
changed java.util.Date serialization from VPack.date to VPack.string
1 parent df67f34 commit 65d9ce9

File tree

6 files changed

+91
-16
lines changed

6 files changed

+91
-16
lines changed

ChangeLog

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
v4.1.8 (2017-02-xx)
2+
---------------------------
3+
* changed java.util.Date serialization from VPack.date to VPack.string (ISO 8601)
4+
* changed java.sql.Date serialization from VPack.date to VPack.string (ISO 8601)
5+
* changed java.sql.Timestamp serialization from VPack.date to VPack.string (ISO 8601)
6+
17
v4.1.7 (2017-01-26)
28
---------------------------
39
* fixed importDocuments, insertDocuments to work with raw Jsons (issue #91)

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

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,6 @@
2121
package com.arangodb.velocypack;
2222

2323
import java.io.IOException;
24-
import java.text.DateFormat;
25-
import java.text.SimpleDateFormat;
2624
import java.util.HashMap;
2725
import java.util.Iterator;
2826
import java.util.Map;
@@ -35,14 +33,14 @@
3533

3634
import com.arangodb.velocypack.exception.VPackBuilderException;
3735
import com.arangodb.velocypack.exception.VPackException;
36+
import com.arangodb.velocypack.internal.util.DateUtil;
3837

3938
/**
4039
* @author Mark - mark at arangodb.com
4140
*
4241
*/
4342
public class VPackParser {
4443

45-
private static final DateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");// ISO 8601
4644
private static final char OBJECT_OPEN = '{';
4745
private static final char OBJECT_CLOSE = '}';
4846
private static final char ARRAY_OPEN = '[';
@@ -160,7 +158,7 @@ private void parse(
160158
} else if (value.isNumber()) {
161159
json.append(value.getAsNumber());
162160
} else if (value.isDate()) {
163-
json.append(JSONValue.toJSONString(DATE_FORMAT.format(value.getAsDate())));
161+
json.append(JSONValue.toJSONString(DateUtil.format(value.getAsDate())));
164162
} else if (value.isNull()) {
165163
json.append(NULL);
166164
} else {

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

Lines changed: 37 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,16 @@
2323
import java.math.BigDecimal;
2424
import java.math.BigInteger;
2525
import java.sql.Timestamp;
26+
import java.text.ParseException;
2627
import java.util.Date;
2728
import java.util.UUID;
2829

2930
import com.arangodb.velocypack.VPackDeserializationContext;
3031
import com.arangodb.velocypack.VPackDeserializer;
3132
import com.arangodb.velocypack.VPackSlice;
3233
import com.arangodb.velocypack.exception.VPackException;
34+
import com.arangodb.velocypack.exception.VPackParserException;
35+
import com.arangodb.velocypack.internal.util.DateUtil;
3336

3437
/**
3538
* @author Mark - mark at arangodb.com
@@ -146,16 +149,37 @@ public Date deserialize(
146149
final VPackSlice parent,
147150
final VPackSlice vpack,
148151
final VPackDeserializationContext context) throws VPackException {
149-
return vpack.getAsDate();
152+
final Date date;
153+
if (vpack.isString()) {
154+
try {
155+
date = DateUtil.parse(vpack.getAsString());
156+
} catch (final ParseException e) {
157+
throw new VPackParserException(e);
158+
}
159+
} else {
160+
date = vpack.getAsDate();
161+
}
162+
return date;
150163
}
151164
};
152165
public static final VPackDeserializer<java.sql.Date> SQL_DATE = new VPackDeserializer<java.sql.Date>() {
166+
153167
@Override
154168
public java.sql.Date deserialize(
155169
final VPackSlice parent,
156170
final VPackSlice vpack,
157171
final VPackDeserializationContext context) throws VPackException {
158-
return vpack.getAsSQLDate();
172+
final java.sql.Date date;
173+
if (vpack.isString()) {
174+
try {
175+
date = new java.sql.Date(DateUtil.parse(vpack.getAsString()).getTime());
176+
} catch (final ParseException e) {
177+
throw new VPackParserException(e);
178+
}
179+
} else {
180+
date = vpack.getAsSQLDate();
181+
}
182+
return date;
159183
}
160184
};
161185
public static final VPackDeserializer<java.sql.Timestamp> SQL_TIMESTAMP = new VPackDeserializer<Timestamp>() {
@@ -164,7 +188,17 @@ public Timestamp deserialize(
164188
final VPackSlice parent,
165189
final VPackSlice vpack,
166190
final VPackDeserializationContext context) throws VPackException {
167-
return vpack.getAsSQLTimestamp();
191+
final java.sql.Timestamp date;
192+
if (vpack.isString()) {
193+
try {
194+
date = new java.sql.Timestamp(DateUtil.parse(vpack.getAsString()).getTime());
195+
} catch (final ParseException e) {
196+
throw new VPackParserException(e);
197+
}
198+
} else {
199+
date = vpack.getAsSQLTimestamp();
200+
}
201+
return date;
168202
}
169203
};
170204
public static final VPackDeserializer<VPackSlice> VPACK = new VPackDeserializer<VPackSlice>() {

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import com.arangodb.velocypack.VPackSerializer;
3232
import com.arangodb.velocypack.VPackSlice;
3333
import com.arangodb.velocypack.exception.VPackException;
34+
import com.arangodb.velocypack.internal.util.DateUtil;
3435

3536
/**
3637
* @author Mark - mark at arangodb.com
@@ -159,7 +160,7 @@ public void serialize(
159160
final String attribute,
160161
final Date value,
161162
final VPackSerializationContext context) throws VPackException {
162-
builder.add(attribute, value);
163+
builder.add(attribute, DateUtil.format(value));
163164
}
164165
};
165166
public static final VPackSerializer<java.sql.Date> SQL_DATE = new VPackSerializer<java.sql.Date>() {
@@ -169,7 +170,7 @@ public void serialize(
169170
final String attribute,
170171
final java.sql.Date value,
171172
final VPackSerializationContext context) throws VPackException {
172-
builder.add(attribute, value);
173+
builder.add(attribute, DateUtil.format(value));
173174
}
174175
};
175176
public static final VPackSerializer<java.sql.Timestamp> SQL_TIMESTAMP = new VPackSerializer<Timestamp>() {
@@ -179,7 +180,7 @@ public void serialize(
179180
final String attribute,
180181
final Timestamp value,
181182
final VPackSerializationContext context) throws VPackException {
182-
builder.add(attribute, value);
183+
builder.add(attribute, DateUtil.format(value));
183184
}
184185
};
185186
public static final VPackSerializer<VPackSlice> VPACK = new VPackSerializer<VPackSlice>() {

src/main/java/com/arangodb/velocypack/internal/util/DateUtil.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,18 @@
2020

2121
package com.arangodb.velocypack.internal.util;
2222

23+
import java.text.DateFormat;
24+
import java.text.ParseException;
25+
import java.text.SimpleDateFormat;
26+
2327
/**
2428
* @author Mark - mark at arangodb.com
2529
*
2630
*/
2731
public class DateUtil {
2832

33+
private static final DateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");// ISO 8601
34+
2935
private DateUtil() {
3036
super();
3137
}
@@ -45,4 +51,12 @@ public static java.sql.Timestamp toSQLTimestamp(final byte[] array, final int of
4551
return new java.sql.Timestamp(milliseconds);
4652
}
4753

54+
public static java.util.Date parse(final String source) throws ParseException {
55+
return DATE_FORMAT.parse(source);
56+
}
57+
58+
public static String format(final java.util.Date date) {
59+
return DATE_FORMAT.format(date);
60+
}
61+
4862
}

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

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@
3232
import java.lang.reflect.Field;
3333
import java.math.BigDecimal;
3434
import java.math.BigInteger;
35+
import java.text.DateFormat;
36+
import java.text.SimpleDateFormat;
3537
import java.util.ArrayList;
3638
import java.util.Collection;
3739
import java.util.Date;
@@ -59,6 +61,8 @@
5961
*/
6062
public class VPackSerializeDeserializeTest {
6163

64+
private static final DateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");// ISO 8601
65+
6266
protected static class TestEntityBoolean {
6367
private boolean a = true;
6468
private boolean b = false;
@@ -3378,16 +3382,17 @@ public void fromDate() throws VPackException {
33783382
assertThat(vpack, is(notNullValue()));
33793383
assertThat(vpack.isObject(), is(true));
33803384
{
3381-
assertThat(vpack.get("utilDate").isDate(), is(true));
3382-
assertThat(vpack.get("utilDate").getAsDate(), is(new Date(1474988621)));
3385+
assertThat(vpack.get("utilDate").isString(), is(true));
3386+
assertThat(vpack.get("utilDate").getAsString(), is(DATE_FORMAT.format(new Date(1474988621))));
33833387
}
33843388
{
3385-
assertThat(vpack.get("sqlDate").isDate(), is(true));
3386-
assertThat(vpack.get("sqlDate").getAsSQLDate(), is(new java.sql.Date(1474988621)));
3389+
assertThat(vpack.get("sqlDate").isString(), is(true));
3390+
assertThat(vpack.get("sqlDate").getAsString(), is(DATE_FORMAT.format(new java.sql.Date(1474988621))));
33873391
}
33883392
{
3389-
assertThat(vpack.get("timestamp").isDate(), is(true));
3390-
assertThat(vpack.get("timestamp").getAsSQLTimestamp(), is(new java.sql.Timestamp(1474988621)));
3393+
assertThat(vpack.get("timestamp").isString(), is(true));
3394+
assertThat(vpack.get("timestamp").getAsString(),
3395+
is(DATE_FORMAT.format(new java.sql.Timestamp(1474988621))));
33913396
}
33923397
}
33933398

@@ -3407,6 +3412,22 @@ public void toDate() throws VPackException {
34073412
assertThat(entity.timestamp, is(new java.sql.Timestamp(1475062216)));
34083413
}
34093414

3415+
@Test
3416+
public void toDateFromString() throws VPackException {
3417+
final VPackBuilder builder = new VPackBuilder();
3418+
builder.add(ValueType.OBJECT);
3419+
builder.add("utilDate", DATE_FORMAT.format(new Date(1475062216)));
3420+
builder.add("sqlDate", DATE_FORMAT.format(new java.sql.Date(1475062216)));
3421+
builder.add("timestamp", DATE_FORMAT.format(new java.sql.Timestamp(1475062216)));
3422+
builder.close();
3423+
3424+
final TestEntityDate entity = new VPack.Builder().build().deserialize(builder.slice(), TestEntityDate.class);
3425+
assertThat(entity, is(notNullValue()));
3426+
assertThat(entity.utilDate, is(new Date(1475062216)));
3427+
assertThat(entity.sqlDate, is(new java.sql.Date(1475062216)));
3428+
assertThat(entity.timestamp, is(new java.sql.Timestamp(1475062216)));
3429+
}
3430+
34103431
protected static class TestEntityUUID {
34113432
private UUID uuid;
34123433

@@ -3481,4 +3502,5 @@ public void toTransient() {
34813502
assertThat(entity, is(notNullValue()));
34823503
assertThat(entity.foo, is(nullValue()));
34833504
}
3505+
34843506
}

0 commit comments

Comments
 (0)