diff --git a/caf-commons/caf-commons-serialization-core/src/main/java/io/iec/edp/caf/commons/core/api/DataSerializer.java b/caf-commons/caf-commons-serialization-core/src/main/java/io/iec/edp/caf/commons/core/api/DataSerializer.java index e064e1a31bf3441b3651488d9565344ba955c101..0422c329d7a222b7ae08e485ba33c2bb5d26bf66 100644 --- a/caf-commons/caf-commons-serialization-core/src/main/java/io/iec/edp/caf/commons/core/api/DataSerializer.java +++ b/caf-commons/caf-commons-serialization-core/src/main/java/io/iec/edp/caf/commons/core/api/DataSerializer.java @@ -17,6 +17,7 @@ package io.iec.edp.caf.commons.core.api; import com.fasterxml.jackson.databind.JavaType; +import com.fasterxml.jackson.databind.ObjectMapper; import java.io.IOException; @@ -30,6 +31,8 @@ public interface DataSerializer { */ void serializeToStream(Object object); + void serializeToStream(Object object,Object mapper); + /** * 序列化到字符串 * @param object @@ -37,12 +40,16 @@ public interface DataSerializer { */ String serializeToString(Object object); + String serializeToString(Object object,Object mapper); + /** * 序列化到Byte数组 * @param object * @return */ byte[] serializeToByte(Object object); + + byte[] serializeToByte(Object object,Object mapper); /** * 从流里反序列化 * @param clazz 返回的类型 @@ -53,6 +60,8 @@ public interface DataSerializer { * @throws ClassNotFoundException */ T deserialize(Class clazz) throws IOException; + + T deserializeOnMapper(Class clazz,Object mapper) throws IOException; /** * 从流里反序列化 * @param type 返回的类型 @@ -63,6 +72,8 @@ public interface DataSerializer { * @throws ClassNotFoundException */ T deserialize(JavaType type) throws IOException; + + T deserializeOnMapper(JavaType type,Object mapper) throws IOException; /** * 从流里反序列化到泛型集合类型 * @param collectionClazz 集合类型 @@ -76,6 +87,8 @@ public interface DataSerializer { */ T deserialize(Class collectionClazz, Class... elementClazzes) throws IOException; + T deserializeOnMapper(Object mapper,Class collectionClazz, Class... elementClazzes) throws IOException; + /** * 从字符串反序列化 * @param value 反序列化值 @@ -88,6 +101,8 @@ public interface DataSerializer { */ T deserialize(String value, Class clazz); + T deserializeOnMapper(String value, Class clazz, Object mapper); + /** * 从字符串反序列化 * @param value 反序列化值 @@ -100,6 +115,8 @@ public interface DataSerializer { */ T deserialize(String value, JavaType type); + T deserializeOnMapper(String value, JavaType type, Object mapper); + /** * 从字符串反序列化到泛型集合类型 * @param value 反序列化的值 @@ -113,6 +130,8 @@ public interface DataSerializer { * @throws ClassNotFoundException */ T deserialize(String value, Class collectionClazz, Class... elementClazzes); + + T deserializeOnMapper(String value, Object mapper, Class collectionClazz, Class... elementClazzes); /** * 从byte数组反序列化 * @param value 反序列化值 @@ -125,6 +144,8 @@ public interface DataSerializer { */ T deserialize(byte[] value, Class clazz); + T deserializeOnMapper(byte[] value, Class clazz, Object mapper); + /** * 从字符串反序列化 * @param value 反序列化值 @@ -137,6 +158,8 @@ public interface DataSerializer { */ T deserialize(byte[] value, JavaType type); + T deserializeOnMapper(byte[] value, JavaType type, Object mapper); + /** * 从byte数组反序列化到泛型集合类型 * @param value 反序列化的值 @@ -151,6 +174,8 @@ public interface DataSerializer { */ T deserialize(byte[] value, Class collectionClazz, Class... elementClazzes); + T deserializeOnMapper(byte[] value, Object mapper, Class collectionClazz, Class... elementClazzes); + /** * 获取ObjectMapper * @return diff --git a/caf-commons/caf-commons-serialization-json/src/main/java/io/iec/edp/caf/commons/JacksonUtils.java b/caf-commons/caf-commons-serialization-json/src/main/java/io/iec/edp/caf/commons/JacksonUtils.java index ea90e509128f0512daf139038f0976dae1b9305f..51376fe59e919f7acd0f23dbb5af67c7a21ee6d7 100644 --- a/caf-commons/caf-commons-serialization-json/src/main/java/io/iec/edp/caf/commons/JacksonUtils.java +++ b/caf-commons/caf-commons-serialization-json/src/main/java/io/iec/edp/caf/commons/JacksonUtils.java @@ -88,6 +88,15 @@ class JacksonUtils { } } + public static String serialize(T obj,ObjectMapper objectMapper) { + try { + return objectMapper.writeValueAsString(obj); + } catch (JsonProcessingException e) { + log.error("Parse Object to String error : {}", e.getMessage(),e); + return null; + } + } + /** * 对象转Json格式字符串(格式化的Json字符串) * @param obj 对象 @@ -101,6 +110,14 @@ class JacksonUtils { } } + public static String serializePretty(T obj,ObjectMapper objectMapper) throws Exception { + try { + return objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(obj); + } catch (JsonProcessingException e) { + throw new Exception(String.format("Parse Object to String error : %s", e.getMessage()),e); + } + } + /** * 字符串转换为自定义对象 * @param str 要转换的字符串 @@ -121,6 +138,20 @@ class JacksonUtils { } } + public static T deserialize(String str,ObjectMapper objectMapper ,Class clazz) { + //反序列化时空串【""】会报错,正常的空串应该【""""】 + if(isEmpty(str) || clazz == null){ + return null; + } + try { + //return clazz.equals(String.class) ? (T) str : objectMapper.readValue(str, clazz); + return objectMapper.readValue(str, clazz); + } catch (Exception e) { + log.error("Parse Object to String error : {}", e.getMessage(),e); + return null; + } + } + public static T deserialize(String str, JavaType javaType){ if(isEmpty(str)||javaType==null){ return null; @@ -133,6 +164,18 @@ class JacksonUtils { } } + public static T deserialize(String str,ObjectMapper objectMapper,JavaType javaType){ + if(isEmpty(str)||javaType==null){ + return null; + } + try{ + return objectMapper.readValue(str,javaType); + }catch (Exception e){ + log.error("Parse Object to String error : {}", e.getMessage(),e); + return null; + } + } + /** * 实体对象转换成Json字符串 * @param str 实体对象T @@ -152,6 +195,20 @@ class JacksonUtils { } } + public static T deserialize(String str,ObjectMapper objectMapper,Class collectionClazz, Class... elementClazzes) { + //反序列化时空串【""】会报错,正常的空串应该【""""】 + if (isEmpty(str) || collectionClazz == null || elementClazzes==null) { + return null; + } + JavaType javaType = objectMapper.getTypeFactory().constructParametricType(collectionClazz, elementClazzes); + try { + return objectMapper.readValue(str, javaType); + } catch (IOException e) { + log.error("Parse Object to String error : {}", e.getMessage(),e); + return null; + } + } + /** * 实体对象转换成Json字符串 * @param cs 实体对象T diff --git a/caf-commons/caf-commons-serialization-json/src/main/java/io/iec/edp/caf/commons/JsonSerializer.java b/caf-commons/caf-commons-serialization-json/src/main/java/io/iec/edp/caf/commons/JsonSerializer.java index 7f72beef6947813a0ec2355ffbf45d5ec70eb8e6..8fb1f002c63dd824a105fea55e94a18f2f01afae 100644 --- a/caf-commons/caf-commons-serialization-json/src/main/java/io/iec/edp/caf/commons/JsonSerializer.java +++ b/caf-commons/caf-commons-serialization-json/src/main/java/io/iec/edp/caf/commons/JsonSerializer.java @@ -17,6 +17,7 @@ package io.iec.edp.caf.commons; import com.fasterxml.jackson.databind.JavaType; +import com.fasterxml.jackson.databind.ObjectMapper; import io.iec.edp.caf.commons.core.api.DataSerializer; import lombok.SneakyThrows; import lombok.var; @@ -43,28 +44,63 @@ class JsonSerializer implements DataSerializer { this.writer.flush(); this.writer.close(); } + @SneakyThrows + @Override + public void serializeToStream(Object object,Object mapper) + { + var s = serializeToString(object,mapper); + this.writer.write(s); + this.writer.flush(); + this.writer.close(); + } @Override public String serializeToString(Object object) { return JacksonUtils.serialize(object); } + @Override + public String serializeToString(Object object,Object mapper) { + if(mapper instanceof ObjectMapper) + return JacksonUtils.serialize(object,(ObjectMapper)mapper); + else + return JacksonUtils.serialize(object); + } + @Override public byte[] serializeToByte(Object object) { var str = serializeToString(object); return str.getBytes(); } + @Override + public byte[] serializeToByte(Object object,Object mapper) { + var str = serializeToString(object,mapper); + return str.getBytes(); + } + @Override public T deserialize(Class clazz) throws IOException { var s = readLine(); return deserialize(s,clazz); } + @Override + public T deserializeOnMapper(Class clazz, Object mapper) throws IOException { + var s = readLine(); + return deserializeOnMapper(s,clazz,mapper); + } + @Override public T deserialize(JavaType type) throws IOException { var s = readLine(); - return deserialize(type); + return deserialize(s,type); + } + + @Override + public T deserializeOnMapper(JavaType type, Object mapper) throws IOException { + var s = readLine(); + return deserializeOnMapper(s,type,mapper); } @Override @@ -73,39 +109,87 @@ class JsonSerializer implements DataSerializer { return deserialize(s,collectionClazz,elementClazzes); } + @Override + public T deserializeOnMapper(Object mapper, Class collectionClazz, Class... elementClazzes) throws IOException { + var s = readLine(); + return deserializeOnMapper(s,mapper,collectionClazz,elementClazzes); + } + @Override public T deserialize(String value, Class clazz) { return JacksonUtils.deserialize(value,clazz); } + @Override + public T deserializeOnMapper(String value, Class clazz,Object mapper) { + if(mapper instanceof ObjectMapper) + return JacksonUtils.deserialize(value,(ObjectMapper)mapper,clazz); + else + return JacksonUtils.deserialize(value,clazz); + } + @Override public T deserialize(String value, JavaType type) { return JacksonUtils.deserialize(value,type); } + @Override + public T deserializeOnMapper(String value, JavaType type, Object mapper) { + if(mapper instanceof ObjectMapper) + return JacksonUtils.deserialize(value,(ObjectMapper)mapper,type); + else + return JacksonUtils.deserialize(value,type); + } + @Override public T deserialize(String value, Class collectionClazz, Class... elementClazzes) { return JacksonUtils.deserialize(value,collectionClazz,elementClazzes); } + @Override + public T deserializeOnMapper(String value, Object mapper, Class collectionClazz, Class... elementClazzes) { + if(mapper instanceof ObjectMapper) + return JacksonUtils.deserialize(value,(ObjectMapper)mapper,collectionClazz,elementClazzes); + else + return JacksonUtils.deserialize(value,collectionClazz,elementClazzes); + } + @Override public T deserialize(byte[] value, Class clazz) { var str = new String(value); return deserialize(str,clazz); } + @Override + public T deserializeOnMapper(byte[] value, Class clazz, Object mapper) { + var str = new String(value); + return deserializeOnMapper(str,clazz,mapper); + } + @Override public T deserialize(byte[] value, JavaType type) { var str = new String(value); return deserialize(str,type); } + @Override + public T deserializeOnMapper(byte[] value, JavaType type, Object mapper) { + var str = new String(value); + return deserializeOnMapper(str,type,mapper); + } + @Override public T deserialize(byte[] value, Class collectionClazz, Class... elementClazzes) { var str = new String(value); return deserialize(str,collectionClazz,elementClazzes); } + @Override + public T deserializeOnMapper(byte[] value, Object mapper, Class collectionClazz, Class... elementClazzes) { + var str = new String(value); + return deserializeOnMapper(str,mapper,collectionClazz,elementClazzes); + } + @Override public Object getObjectMapper() { return JacksonUtils.getObjectMapper(); diff --git a/caf-commons/caf-commons-serialization-protobuf/src/main/java/io/iec/edp/caf/commons/ProtobufSerializer.java b/caf-commons/caf-commons-serialization-protobuf/src/main/java/io/iec/edp/caf/commons/ProtobufSerializer.java index 9c8d9c27811f092ea225a0afc8bb99df1db96b5a..ff69384fc21d07b7205750655c8014323485be1e 100644 --- a/caf-commons/caf-commons-serialization-protobuf/src/main/java/io/iec/edp/caf/commons/ProtobufSerializer.java +++ b/caf-commons/caf-commons-serialization-protobuf/src/main/java/io/iec/edp/caf/commons/ProtobufSerializer.java @@ -46,67 +46,127 @@ class ProtobufSerializer implements DataSerializer { this.out.close(); } + @Override + public void serializeToStream(Object object, Object mapper) { + throw new RuntimeException("Protobuf Serializer Not Implement This Method:serializeToStream(Object object, Object mapper)"); + } + @Override public String serializeToString(Object object) { var bytes = serializeToByte(object); return Base64.getEncoder().encodeToString(bytes); } + @Override + public String serializeToString(Object object, Object mapper) { + throw new RuntimeException("Protobuf Serializer Not Implement This Method:serializeToString(Object object, Object mapper)"); + } + @Override public byte[] serializeToByte(Object object) { return ProtobufUtils.serialize(object); } + @Override + public byte[] serializeToByte(Object object, Object mapper) { + throw new RuntimeException("Protobuf Serializer Not Implement This Method:serializeToByte(Object object, Object mapper)"); + } + @Override public T deserialize(Class clazz) throws IOException { var bytes = getByteArray(this.in); return deserialize(bytes,clazz); } + @Override + public T deserializeOnmapper(Class clazz, Object mapper) throws IOException { + throw new RuntimeException("Protobuf Serializer Not Implement This Method:deserializeOnmapper(Class clazz, Object mapper)"); + } + @Override public T deserialize(JavaType type) throws IOException { throw new RuntimeException("Protobuf Serializer Not Implement This Method:deserialize(JavaType type)"); } + @Override + public T deserializeOnmapper(JavaType type, Object mapper) throws IOException { + throw new RuntimeException("Protobuf Serializer Not Implement This Method:deserializeOnmapper(JavaType type, Object mapper)"); + } + @Override public T deserialize(Class collectionClazz, Class... elementClazzes) throws IOException { var bytes = getByteArray(this.in); return deserialize(bytes,collectionClazz,elementClazzes); } + @Override + public T deserializeOnmapper(Object mapper, Class collectionClazz, Class... elementClazzes) throws IOException { + throw new RuntimeException("Protobuf Serializer Not Implement This Method:deserializeOnmapper(Object mapper, Class collectionClazz, Class... elementClazzes)"); + } + @Override public T deserialize(String value, Class clazz) { byte[] decoded = Base64.getDecoder().decode(value); return deserialize(decoded,clazz); } + @Override + public T deserializeOnmapper(String value, Class clazz, Object mapper) { + throw new RuntimeException("Protobuf Serializer Not Implement This Method:deserializeOnmapper(String value, Class clazz, Object mapper)"); + } + @Override public T deserialize(String value, JavaType type) { throw new RuntimeException("Protobuf Serializer Not Implement This Method:deserialize(String value, JavaType type)"); } + @Override + public T deserializeOnmapper(String value, JavaType type, Object mapper) { + throw new RuntimeException("Protobuf Serializer Not Implement This Method:deserializeOnmapper(String value, JavaType type, Object mapper)"); + } + @Override public T deserialize(String value, Class collectionClazz, Class... elementClazzes) { byte[] decoded = Base64.getDecoder().decode(value); return deserialize(decoded,collectionClazz,elementClazzes); } + @Override + public T deserializeOnmapper(String value, Object mapper, Class collectionClazz, Class... elementClazzes) { + throw new RuntimeException("Protobuf Serializer Not Implement This Method:deserializeOnmapper(String value, Object mapper, Class collectionClazz, Class... elementClazzes)"); + } + @Override public T deserialize(byte[] value, Class clazz) { return ProtobufUtils.deserialize(value,clazz); } + @Override + public T deserializeOnmapper(byte[] value, Class clazz, Object mapper) { + throw new RuntimeException("Protobuf Serializer Not Implement This Method:deserializeOnmapper(byte[] value, Class clazz, Object mapper)"); + } + @Override public T deserialize(byte[] value, JavaType type) { throw new RuntimeException("Protobuf Serializer Not Implement This Method:deserialize(byte[] value, JavaType type)"); } + @Override + public T deserializeOnmapper(byte[] value, JavaType type, Object mapper) { + throw new RuntimeException("Protobuf Serializer Not Implement This Method:deserialize(byte[] value, JavaType type)"); + } + @Override public T deserialize(byte[] value, Class collectionClazz, Class... elementClazzes) { ProtobufWrapper wrapper = deserialize(value,ProtobufWrapper.class); return (T)wrapper.getData(); } + @Override + public T deserializeOnmapper(byte[] value, Object mapper, Class collectionClazz, Class... elementClazzes) { + throw new RuntimeException("Protobuf Serializer Not Implement This Method:deserializeOnmapper(byte[] value, Object mapper, Class collectionClazz, Class... elementClazzes)"); + } + @Override public Object getObjectMapper() { throw new RuntimeException("Protobuf Serializer Not Implement This Method:getObjectMapper"); diff --git a/caf-data/caf-data-source/src/main/java/io/iec/edp/caf/commons/dataaccess/DbType.java b/caf-data/caf-data-source/src/main/java/io/iec/edp/caf/commons/dataaccess/DbType.java index 8ae5bca6870d26499f463e078c565fd0e5a6b203..d74cf5e094d69781bfae9c45bfb38474a68bce64 100644 --- a/caf-data/caf-data-source/src/main/java/io/iec/edp/caf/commons/dataaccess/DbType.java +++ b/caf-data/caf-data-source/src/main/java/io/iec/edp/caf/commons/dataaccess/DbType.java @@ -16,6 +16,8 @@ package io.iec.edp.caf.commons.dataaccess; +import com.sun.org.apache.xpath.internal.operations.Bool; + /** * 数据库类型 * @author wangyandong @@ -45,4 +47,13 @@ public enum DbType { private DbType() { } + + /** + * 判断是否是SQLServer + * 用于隐式转换的判断 + * @return + */ + Boolean isImplicitConvert() { + return this == SQLServer; + } }