Skip to content

Commit 059089b

Browse files
committed
fix bug: mapping from msgpack response to int, Integer, long, Long types works fine
1 parent b3367fd commit 059089b

File tree

2 files changed

+62
-6
lines changed

2 files changed

+62
-6
lines changed

src/main/java/org/influxdb/impl/InfluxDBResultMapper.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -361,11 +361,11 @@ <T> boolean fieldValueForPrimitivesModified(final Class<?> fieldType, final Fiel
361361
return true;
362362
}
363363
if (long.class.isAssignableFrom(fieldType)) {
364-
field.setLong(object, ((Double) value).longValue());
364+
field.setLong(object, ((Number) value).longValue());
365365
return true;
366366
}
367367
if (int.class.isAssignableFrom(fieldType)) {
368-
field.setInt(object, ((Double) value).intValue());
368+
field.setInt(object, ((Number) value).intValue());
369369
return true;
370370
}
371371
if (boolean.class.isAssignableFrom(fieldType)) {
@@ -382,11 +382,11 @@ <T> boolean fieldValueForPrimitiveWrappersModified(final Class<?> fieldType, fin
382382
return true;
383383
}
384384
if (Long.class.isAssignableFrom(fieldType)) {
385-
field.set(object, Long.valueOf(((Double) value).longValue()));
385+
field.set(object, ((Number) value).longValue());
386386
return true;
387387
}
388388
if (Integer.class.isAssignableFrom(fieldType)) {
389-
field.set(object, Integer.valueOf(((Double) value).intValue()));
389+
field.set(object, ((Number) value).intValue());
390390
return true;
391391
}
392392
if (Boolean.class.isAssignableFrom(fieldType)) {

src/test/java/org/influxdb/impl/InfluxDBResultMapperTest.java

+58-2
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ public void testParseSeriesAs_testNonNullAndValidValues() {
151151
Double now = Long.valueOf(System.currentTimeMillis()).doubleValue();
152152
String uuidAsString = UUID.randomUUID().toString();
153153

154-
// InfluxDB client returns any number as Double.
154+
// InfluxDB client returns any number as Double. (with JSON response format, but not with msgpack)
155155
// See https://github.com/influxdata/influxdb-java/issues/153#issuecomment-259681987
156156
// for more information.
157157
List<Object> seriesResult = Arrays.asList(now, uuidAsString,
@@ -201,6 +201,62 @@ Double asDouble(Object obj) {
201201
return (Double) obj;
202202
}
203203

204+
@Test
205+
public void testParseSeriesAs_testNonNullAndValidValues_msgpack() {
206+
// Given...
207+
mapper.cacheMeasurementClass(MyCustomMeasurement.class);
208+
209+
List<String> columnList = Arrays.asList("time", "uuid",
210+
"doubleObject", "longObject", "integerObject",
211+
"doublePrimitive", "longPrimitive", "integerPrimitive",
212+
"booleanObject", "booleanPrimitive");
213+
214+
// InfluxDB client returns the time representation as Double.
215+
Double now = Long.valueOf(System.currentTimeMillis()).doubleValue();
216+
String uuidAsString = UUID.randomUUID().toString();
217+
218+
// InfluxDB client returns any number as Double. (with JSON response format, but not with msgpack)
219+
// See https://github.com/influxdata/influxdb-java/issues/153#issuecomment-259681987
220+
// for more information.
221+
List<Object> seriesResult = Arrays.asList(now, uuidAsString,
222+
new Double("1.01"), Long.valueOf(2), Integer.valueOf(3),
223+
new Double("1.01"), Long.valueOf(4), Integer.valueOf(5),
224+
Boolean.FALSE, Boolean.TRUE);
225+
226+
QueryResult.Series series = new QueryResult.Series();
227+
series.setColumns(columnList);
228+
series.setValues(Arrays.asList(seriesResult));
229+
230+
//When...
231+
List<MyCustomMeasurement> result = new LinkedList<>();
232+
mapper.parseSeriesAs(series, MyCustomMeasurement.class, result);
233+
234+
//Then...
235+
MyCustomMeasurement myObject = result.get(0);
236+
Assertions.assertEquals(now.longValue(), myObject.time.toEpochMilli(), "field 'time' does not match");
237+
Assertions.assertEquals(uuidAsString, myObject.uuid, "field 'uuid' does not match");
238+
239+
Assertions.assertEquals(asDouble(seriesResult.get(2)), myObject.doubleObject, "field 'doubleObject' does not match");
240+
Assertions.assertEquals(Long.valueOf(2), myObject.longObject, "field 'longObject' does not match");
241+
Assertions.assertEquals(Integer.valueOf(3), myObject.integerObject, "field 'integerObject' does not match");
242+
243+
Assertions.assertTrue(
244+
Double.compare(asDouble(seriesResult.get(5)).doubleValue(), myObject.doublePrimitive) == 0,
245+
"field 'doublePrimitive' does not match");
246+
247+
Assertions.assertEquals( myObject.longPrimitive, 4, "field 'longPrimitive' does not match");
248+
Assertions.assertEquals( myObject.integerPrimitive, 5, "field 'integerPrimitive' does not match");
249+
250+
Assertions.assertEquals(
251+
Boolean.valueOf(String.valueOf(seriesResult.get(8))), myObject.booleanObject,
252+
"field 'booleanObject' does not match");
253+
254+
Assertions.assertEquals(
255+
Boolean.valueOf(String.valueOf(seriesResult.get(9))).booleanValue(), myObject.booleanPrimitive,
256+
"field 'booleanPrimitive' does not match");
257+
}
258+
259+
204260
@Test
205261
public void testFieldValueModified_DateAsISO8601() {
206262
// Given...
@@ -638,4 +694,4 @@ public String toString() {
638694
+ ", median=" + median + ", min=" + min + ", max=" + max + "]";
639695
}
640696
}
641-
}
697+
}

0 commit comments

Comments
 (0)