You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by da...@apache.org on 2016/09/27 18:09:06 UTC
svn commit: r1762530 - in /felix/trunk/converter:
converter/src/main/java/org/apache/felix/converter/impl/
serializer/src/main/java/org/apache/felix/serializer/impl/json/
serializer/src/test/java/org/apache/felix/serializer/impl/json/
Author: davidb
Date: Tue Sep 27 18:09:06 2016
New Revision: 1762530
URL: http://svn.apache.org/viewvc?rev=1762530&view=rev
Log:
Felix Converter - fix an issue with converting to a generics based type
Unit test in serializer included.
Modified:
felix/trunk/converter/converter/src/main/java/org/apache/felix/converter/impl/ConvertingImpl.java
felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/json/JsonDeserializingImpl.java
felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/json/JsonSerializerImpl.java
felix/trunk/converter/serializer/src/test/java/org/apache/felix/serializer/impl/json/JsonSerializerTest.java
Modified: felix/trunk/converter/converter/src/main/java/org/apache/felix/converter/impl/ConvertingImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/converter/converter/src/main/java/org/apache/felix/converter/impl/ConvertingImpl.java?rev=1762530&r1=1762529&r2=1762530&view=diff
==============================================================================
--- felix/trunk/converter/converter/src/main/java/org/apache/felix/converter/impl/ConvertingImpl.java (original)
+++ felix/trunk/converter/converter/src/main/java/org/apache/felix/converter/impl/ConvertingImpl.java Tue Sep 27 18:09:06 2016
@@ -252,11 +252,10 @@ public class ConvertingImpl implements C
Map m = mapView(object, converter);
if (m == null)
return null;
- Class<?> targetKeyType = null, targetValueType = null;
- if (typeArguments != null && typeArguments.length > 1 &&
- typeArguments[0] instanceof Class && typeArguments[1] instanceof Class) {
- targetKeyType = (Class<?>) typeArguments[0];
- targetValueType = (Class<?>) typeArguments[1];
+ Type targetKeyType = null, targetValueType = null;
+ if (typeArguments != null && typeArguments.length > 1) {
+ targetKeyType = typeArguments[0];
+ targetValueType = typeArguments[1];
}
Class<?> ctrCls = interfaceImplementations.get(targetCls);
Modified: felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/json/JsonDeserializingImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/json/JsonDeserializingImpl.java?rev=1762530&r1=1762529&r2=1762530&view=diff
==============================================================================
--- felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/json/JsonDeserializingImpl.java (original)
+++ felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/json/JsonDeserializingImpl.java Tue Sep 27 18:09:06 2016
@@ -18,6 +18,7 @@ package org.apache.felix.serializer.impl
import java.io.IOException;
import java.io.InputStream;
+import java.lang.reflect.Type;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.Map;
@@ -29,10 +30,10 @@ import org.osgi.service.converter.Conver
import org.osgi.service.serializer.Deserializing;
public class JsonDeserializingImpl<T> implements Deserializing<T> {
- private final Class<T> clazz;
+ private final Type clazz;
private volatile Converter converter;
- public JsonDeserializingImpl(Converter c, Class<T> cls) {
+ public JsonDeserializingImpl(Converter c, Type cls) {
converter = c;
clazz = cls;
}
@@ -42,10 +43,11 @@ public class JsonDeserializingImpl<T> im
public T from(CharSequence in) {
JsonParser jp = new JsonParser(in);
Map<?,?> m = jp.getParsed();
- if (m.getClass().isAssignableFrom(clazz))
- return (T) m;
+ if (clazz instanceof Class)
+ if (m.getClass().isAssignableFrom((Class<?>) clazz))
+ return (T) m;
- return converter.convert(m).to(clazz);
+ return (T) converter.convert(m).to(clazz);
}
@Override
Modified: felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/json/JsonSerializerImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/json/JsonSerializerImpl.java?rev=1762530&r1=1762529&r2=1762530&view=diff
==============================================================================
--- felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/json/JsonSerializerImpl.java (original)
+++ felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/json/JsonSerializerImpl.java Tue Sep 27 18:09:06 2016
@@ -103,7 +103,6 @@ public class JsonSerializerImpl implemen
@Override
public void to(OutputStream out, Charset charset) {
// TODO Auto-generated method stub
-
}
@Override
@@ -121,13 +120,11 @@ public class JsonSerializerImpl implemen
@Override
public <T> Deserializing<T> deserialize(TypeReference<T> ref) {
- // TODO Auto-generated method stub
- return null;
+ return new JsonDeserializingImpl<T>(converter, ref.getType());
}
- @Override
+ @Override @SuppressWarnings("rawtypes")
public Deserializing<?> deserialize(Type type) {
- // TODO Auto-generated method stub
- return null;
+ return new JsonDeserializingImpl(converter, type);
}
}
Modified: felix/trunk/converter/serializer/src/test/java/org/apache/felix/serializer/impl/json/JsonSerializerTest.java
URL: http://svn.apache.org/viewvc/felix/trunk/converter/serializer/src/test/java/org/apache/felix/serializer/impl/json/JsonSerializerTest.java?rev=1762530&r1=1762529&r2=1762530&view=diff
==============================================================================
--- felix/trunk/converter/serializer/src/test/java/org/apache/felix/serializer/impl/json/JsonSerializerTest.java (original)
+++ felix/trunk/converter/serializer/src/test/java/org/apache/felix/serializer/impl/json/JsonSerializerTest.java Tue Sep 27 18:09:06 2016
@@ -28,6 +28,7 @@ import org.junit.Before;
import org.junit.Test;
import org.osgi.service.converter.Converter;
import org.osgi.service.converter.StandardConverter;
+import org.osgi.service.converter.TypeReference;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
@@ -78,7 +79,7 @@ public class JsonSerializerTest {
public void testCodecWithAdapter() throws JSONException {
Map<String, Foo> m1 = new HashMap<>();
m1.put("f", new Foo("fofofo"));
- Map<String, Object> m = new HashMap<>();
+ Map<String, Map<String,Foo>> m = new HashMap<>();
m.put("submap", m1);
Converter ca = converter.newConverterBuilder().
@@ -92,7 +93,10 @@ public class JsonSerializerTest {
JSONObject jo1 = jo.getJSONObject("submap");
assertEquals("<fofofo>", jo1.getString("f"));
- // TODO convert back into a Map<String, Foo> via TypeReference
+ // And convert back
+ Map<String,Map<String,Foo>> m2 = jsonCodec.deserialize(new TypeReference<Map<String,Map<String,Foo>>>(){}).
+ with(ca).from(json);
+ assertEquals(m, m2);
}
@Test
@@ -139,5 +143,21 @@ public class JsonSerializerTest {
public static Foo fsFun(String s) {
return new Foo(s.substring(1, s.length() - 1));
}
+
+ @Override
+ public int hashCode() {
+ return val.hashCode();
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (obj == this)
+ return true;
+ if (!(obj instanceof Foo))
+ return false;
+
+ Foo f = (Foo) obj;
+ return f.val.equals(val);
+ }
}
}