76 lines
2.2 KiB
Java
76 lines
2.2 KiB
Java
package org.whispersystems.textsecure.internal.util;
|
|
|
|
import android.util.Log;
|
|
|
|
import com.fasterxml.jackson.core.JsonGenerator;
|
|
import com.fasterxml.jackson.core.JsonParser;
|
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
|
import com.fasterxml.jackson.databind.DeserializationContext;
|
|
import com.fasterxml.jackson.databind.DeserializationFeature;
|
|
import com.fasterxml.jackson.databind.JsonDeserializer;
|
|
import com.fasterxml.jackson.databind.JsonSerializer;
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
import com.fasterxml.jackson.databind.SerializerProvider;
|
|
|
|
import org.whispersystems.libaxolotl.IdentityKey;
|
|
import org.whispersystems.libaxolotl.InvalidKeyException;
|
|
|
|
import java.io.IOException;
|
|
|
|
public class JsonUtil {
|
|
|
|
private static final String TAG = JsonUtil.class.getSimpleName();
|
|
|
|
private static final ObjectMapper objectMapper = new ObjectMapper();
|
|
|
|
static {
|
|
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
|
|
}
|
|
|
|
public static String toJson(Object object) {
|
|
try {
|
|
return objectMapper.writeValueAsString(object);
|
|
} catch (JsonProcessingException e) {
|
|
Log.w(TAG, e);
|
|
return "";
|
|
}
|
|
}
|
|
|
|
public static <T> T fromJson(String json, Class<T> clazz) {
|
|
try {
|
|
return objectMapper.readValue(json, clazz);
|
|
} catch (IOException e) {
|
|
Log.w(TAG, e);
|
|
throw new JsonParseException(e);
|
|
}
|
|
}
|
|
|
|
public static class JsonParseException extends RuntimeException {
|
|
public JsonParseException(Exception e) {
|
|
super(e);
|
|
}
|
|
}
|
|
|
|
public static class IdentityKeySerializer extends JsonSerializer<IdentityKey> {
|
|
@Override
|
|
public void serialize(IdentityKey value, JsonGenerator gen, SerializerProvider serializers)
|
|
throws IOException
|
|
{
|
|
gen.writeString(Base64.encodeBytesWithoutPadding(value.serialize()));
|
|
}
|
|
}
|
|
|
|
public static class IdentityKeyDeserializer extends JsonDeserializer<IdentityKey> {
|
|
@Override
|
|
public IdentityKey deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
|
|
try {
|
|
return new IdentityKey(Base64.decodeWithoutPadding(p.getValueAsString()), 0);
|
|
} catch (InvalidKeyException e) {
|
|
throw new IOException(e);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
}
|