From 0c3c45c6f61adde8bb730ead67902ba018372bd0 Mon Sep 17 00:00:00 2001 From: yndu13 Date: Fri, 3 Feb 2023 13:13:28 +0800 Subject: [PATCH] update log message && add some info logs --- src/main/java/com/aliyun/tea/TeaModel.java | 71 +++++++++++++------ .../java/com/aliyun/tea/TeaModelTest.java | 15 ++-- 2 files changed, 59 insertions(+), 27 deletions(-) diff --git a/src/main/java/com/aliyun/tea/TeaModel.java b/src/main/java/com/aliyun/tea/TeaModel.java index 4fea1a2..8eeb1c8 100644 --- a/src/main/java/com/aliyun/tea/TeaModel.java +++ b/src/main/java/com/aliyun/tea/TeaModel.java @@ -111,7 +111,7 @@ public static Object parseObject(Object o) { } } - private static Object buildObject(Object o, Class self, Type subType) { + private static Object buildObject(Object o, Class self, Type subType, String objectName) { Class valueClass = o.getClass(); if (Map.class.isAssignableFrom(self) && Map.class.isAssignableFrom(valueClass)) { Map valueMap = (Map) o; @@ -120,11 +120,11 @@ private static Object buildObject(Object o, Class self, Type subType) { if (null == subType || subType instanceof WildcardType) { result.put(entry.getKey(), entry.getValue()); } else if (subType instanceof Class) { - result.put(entry.getKey(), buildObject(entry.getValue(), (Class) subType, null)); + result.put(entry.getKey(), buildObject(entry.getValue(), (Class) subType, null, objectName)); } else { ParameterizedType parameterizedType = (ParameterizedType) subType; Type[] types = parameterizedType.getActualTypeArguments(); - result.put(entry.getKey(), buildObject(entry.getValue(), (Class) parameterizedType.getRawType(), types[types.length - 1])); + result.put(entry.getKey(), buildObject(entry.getValue(), (Class) parameterizedType.getRawType(), types[types.length - 1], objectName)); } } return result; @@ -135,11 +135,11 @@ private static Object buildObject(Object o, Class self, Type subType) { if (null == subType || subType instanceof WildcardType) { result.add(object); } else if (subType instanceof Class) { - result.add(buildObject(object, (Class) subType, null)); + result.add(buildObject(object, (Class) subType, null, objectName)); } else { ParameterizedType parameterizedType = (ParameterizedType) subType; Type[] types = parameterizedType.getActualTypeArguments(); - result.add(buildObject(object, (Class) parameterizedType.getRawType(), types[types.length - 1])); + result.add(buildObject(object, (Class) parameterizedType.getRawType(), types[types.length - 1], objectName)); } } return result; @@ -150,7 +150,7 @@ private static Object buildObject(Object o, Class self, Type subType) { throw new TeaException(e.getMessage(), e); } } else { - return confirmType(self, o); + return confirmType(self, o, objectName); } } @@ -177,13 +177,13 @@ public static T toModel(Map map, T model) { if (value == null) { continue; } - result = setTeaModelField(result, field, value, false); + result = setTeaModelField(result, field, value, result.getClass().getName() + "." + field.getName(), false); } return result; } @SuppressWarnings("unchecked") - private static T setTeaModelField(T model, Field field, Object value, boolean userBuild) { + private static T setTeaModelField(T model, Field field, Object value, String objectName, boolean userBuild) { try { Class clazz = field.getType(); Object resultValue = parseNumber(value, clazz); @@ -198,11 +198,11 @@ private static T setTeaModelField(T model, Field field, Obj field.set(result, resultValue); } } else if (Map.class.isAssignableFrom(clazz)) { - field.set(result, buildObject(resultValue, Map.class, getType(field, 1))); + field.set(result, buildObject(resultValue, Map.class, getType(field, 1), objectName)); } else if (List.class.isAssignableFrom(clazz)) { - field.set(result, buildObject(resultValue, List.class, getType(field, 0))); + field.set(result, buildObject(resultValue, List.class, getType(field, 0), objectName)); } else { - field.set(result, confirmType(clazz, resultValue)); + field.set(result, confirmType(clazz, resultValue, objectName)); } return result; } catch (Exception e) { @@ -227,7 +227,7 @@ public static T build(Map map, T model) { continue; } } - result = setTeaModelField(result, field, value, true); + result = setTeaModelField(result, field, value, result.getClass().getName() + "." + field.getName(), true); } return result; } @@ -348,21 +348,35 @@ public static void validateParams(TeaModel teaModel, String paramName) { } public static Object confirmType(Class expect, Object object) { + return confirmType(expect, object, "unknown"); + } + + public static Object confirmType(Class expect, Object object, String objectName) { BigDecimal bigDecimal; if (String.class.isAssignableFrom(expect)) { if (object instanceof Number || object instanceof Boolean) { + logger.info("[{}] There are some cast events happening. expect: {}, but: {}, value: {}.", + objectName, String.class.getName(), object.getClass().getName(), object.toString()); return object.toString(); } if (object instanceof Map || object instanceof List) { + logger.info("[{}] There are some cast events happening. expect: {}, but: {}, value: {}.", + objectName, String.class.getName(), object.getClass().getName(), object.toString()); return new Gson().toJson(object); } } else if (Boolean.class.isAssignableFrom(expect)) { if (object instanceof String) { + logger.info("[{}] There are some cast events happening. expect: {}, but: {}, value: {}.", + objectName, Boolean.class.getName(), object.getClass().getName(), object.toString()); return Boolean.parseBoolean(String.valueOf(object)); } else if (object instanceof Integer) { if (object.toString().equals("1")) { + logger.info("[{}] There are some cast events happening. expect: {}, but: {}, value: {}.", + objectName, Boolean.class.getName(), object.getClass().getName(), object.toString()); return true; } else if (object.toString().equals("0")) { + logger.info("[{}] There are some cast events happening. expect: {}, but: {}, value: {}.", + objectName, Boolean.class.getName(), object.getClass().getName(), object.toString()); return false; } } @@ -371,25 +385,29 @@ public static Object confirmType(Class expect, Object object) { try { Integer.parseInt(object.toString()); } catch (NumberFormatException e) { - logger.warning("There are some cast events happening. expect: {}, but: {}, value: {}.", Integer.class.getName(), object.getClass().getName(), object.toString()); + logger.warning("[{}] There are some cast events happening. expect: {}, but: {}, value: {}.", + objectName, Integer.class.getName(), object.getClass().getName(), object.toString()); } bigDecimal = new BigDecimal(object.toString()); return bigDecimal.intValue(); } if (object instanceof Boolean) { - logger.warning("There are some cast events happening. expect: {}, but: {}, value: {}.", Integer.class.getName(), object.getClass().getName(), object.toString()); + logger.warning("[{}] There are some cast events happening. expect: {}, but: {}, value: {}.", + objectName, Integer.class.getName(), object.getClass().getName(), object.toString()); return object.toString().equalsIgnoreCase("true") ? 1 : 0; } if (object instanceof Long) { if ((Long) object > Integer.MAX_VALUE) { - logger.warning("There are some cast events happening. expect: {}, but: {}, value: {}.", Integer.class.getName(), object.getClass().getName(), object.toString()); + logger.warning("[{}] There are some cast events happening. expect: {}, but: {}, value: {}.", + objectName, Integer.class.getName(), object.getClass().getName(), object.toString()); } bigDecimal = new BigDecimal(object.toString()); return bigDecimal.intValue(); } if (object instanceof Float || object instanceof Double) { bigDecimal = new BigDecimal(object.toString()); - logger.warning("There are some cast events happening. expect: {}, but: {}, value: {}.", Integer.class.getName(), object.getClass().getName(), object.toString()); + logger.warning("[{}] There are some cast events happening. expect: {}, but: {}, value: {}.", + objectName, Integer.class.getName(), object.getClass().getName(), object.toString()); return bigDecimal.intValue(); } } else if (Long.class.isAssignableFrom(expect)) { @@ -397,14 +415,16 @@ public static Object confirmType(Class expect, Object object) { try { Long.parseLong(object.toString()); } catch (NumberFormatException e) { - logger.warning("There are some cast events happening. expect: {}, but: {}, value: {}.", Long.class.getName(), object.getClass().getName(), object.toString()); + logger.warning("[{}] There are some cast events happening. expect: {}, but: {}, value: {}.", + objectName, Long.class.getName(), object.getClass().getName(), object.toString()); } bigDecimal = new BigDecimal(object.toString()); return bigDecimal.longValue(); } if (object instanceof Float || object instanceof Double) { bigDecimal = new BigDecimal(object.toString()); - logger.warning("There are some cast events happening. expect: {}, but: {}, value: {}.", Long.class.getName(), object.getClass().getName(), object.toString()); + logger.warning("[{}] There are some cast events happening. expect: {}, but: {}, value: {}.", + objectName, Long.class.getName(), object.getClass().getName(), object.toString()); return bigDecimal.longValue(); } } else if (Float.class.isAssignableFrom(expect)) { @@ -412,21 +432,24 @@ public static Object confirmType(Class expect, Object object) { try { Float.parseFloat(object.toString()); } catch (NumberFormatException e) { - logger.warning("There are some cast events happening. expect: {}, but: {}, value: {}.", Float.class.getName(), object.getClass().getName(), object.toString()); + logger.warning("[{}] There are some cast events happening. expect: {}, but: {}, value: {}.", + objectName, Float.class.getName(), object.getClass().getName(), object.toString()); } bigDecimal = new BigDecimal(object.toString()); return bigDecimal.floatValue(); } if (object instanceof Double) { if ((Double) object > Float.MAX_VALUE) { - logger.warning("There are some cast events happening. expect: {}, but: {}, value: {}.", Float.class.getName(), object.getClass().getName(), object.toString()); + logger.warning("[{}] There are some cast events happening. expect: {}, but: {}, value: {}.", + objectName, Float.class.getName(), object.getClass().getName(), object.toString()); } bigDecimal = new BigDecimal(object.toString()); return bigDecimal.floatValue(); } if (object instanceof Integer || object instanceof Long) { bigDecimal = new BigDecimal(object.toString()); - logger.warning("There are some cast events happening. expect: {}, but: {}, value: {}.", Float.class.getName(), object.getClass().getName(), object.toString()); + logger.warning("[{}] There are some cast events happening. expect: {}, but: {}, value: {}.", + objectName, Float.class.getName(), object.getClass().getName(), object.toString()); return bigDecimal.floatValue(); } } else if (Double.class.isAssignableFrom(expect)) { @@ -434,14 +457,16 @@ public static Object confirmType(Class expect, Object object) { try { Double.parseDouble(object.toString()); } catch (NumberFormatException e) { - logger.warning("There are some cast events happening. expect: {}, but: {}, value: {}.", Double.class.getName(), object.getClass().getName(), object.toString()); + logger.warning("[{}] There are some cast events happening. expect: {}, but: {}, value: {}.", + objectName, Double.class.getName(), object.getClass().getName(), object.toString()); } bigDecimal = new BigDecimal(object.toString()); return bigDecimal.doubleValue(); } if (object instanceof Integer || object instanceof Long) { bigDecimal = new BigDecimal(object.toString()); - logger.warning("There are some cast events happening. expect: {}, but: {}, value: {}.", Double.class.getName(), object.getClass().getName(), object.toString()); + logger.warning("[{}] There are some cast events happening. expect: {}, but: {}, value: {}.", + objectName, Double.class.getName(), object.getClass().getName(), object.toString()); return bigDecimal.doubleValue(); } } diff --git a/src/test/java/com/aliyun/tea/TeaModelTest.java b/src/test/java/com/aliyun/tea/TeaModelTest.java index 8a35372..cf3fc81 100644 --- a/src/test/java/com/aliyun/tea/TeaModelTest.java +++ b/src/test/java/com/aliyun/tea/TeaModelTest.java @@ -1,5 +1,6 @@ package com.aliyun.tea; +import com.aliyun.tea.logging.DefaultLogger; import com.google.gson.internal.LinkedTreeMap; import org.junit.Assert; import org.junit.Test; @@ -62,9 +63,12 @@ public static class SubModel extends TeaModel { @Test public void toModelTest() { + System.setProperty(DefaultLogger.SDK_LOG_LEVEL, "info"); Map map = new HashMap<>(); ArrayList testList = new ArrayList(); testList.add("test"); + testList.add(1); + testList.add(true); map.put("listTest", testList); SubModel submodel = TeaModel.toModel(map, new SubModel()); Assert.assertNull(submodel.accessKeyId); @@ -72,6 +76,8 @@ public void toModelTest() { Assert.assertNull(submodel.size); Assert.assertNull(submodel.accessToken); Assert.assertEquals("test", submodel.list.get(0)); + Assert.assertEquals("1", submodel.list.get(1)); + Assert.assertEquals("true", submodel.list.get(2)); map.put("accessToken", null); map.put("limit", 1); @@ -98,7 +104,7 @@ public void toModelTest() { Assert.assertEquals("1", submodel.baseDriveResponse.driveId); Map teaModelMap = new HashMap<>(); - teaModelMap.put("driveId", "2"); + teaModelMap.put("driveId", 2); map.put("teaModel", teaModelMap); submodel = TeaModel.toModel(map, new SubModel()); Assert.assertEquals("2", submodel.baseDriveResponse.driveId); @@ -578,6 +584,7 @@ public void validateParamsTest() { @Test public void confirmTypeTest() { + System.setProperty(DefaultLogger.SDK_LOG_LEVEL, "info"); String str = "1"; Object object = TeaModel.confirmType(Integer.class, str); Assert.assertEquals(1, object); @@ -681,8 +688,8 @@ public void confirmTypeTest() { object6 = TeaModel.confirmType(Float.class, doubleTest); Float f = 1.0f; Assert.assertTrue(Float.isInfinite((Float) object6)); - Assert.assertTrue(Float.isInfinite((Float)object6 + f)); - Assert.assertTrue(Float.isInfinite((Float)object6 * f)); + Assert.assertTrue(Float.isInfinite((Float) object6 + f)); + Assert.assertTrue(Float.isInfinite((Float) object6 * f)); doubleTest = Double.parseDouble(String.valueOf(Float.MAX_VALUE)); object6 = TeaModel.confirmType(Float.class, doubleTest); @@ -713,7 +720,7 @@ public void confirmTypeTest() { map.put("test4", sub); object6 = TeaModel.confirmType(String.class, map); Assert.assertEquals(String.class, object6.getClass()); - String mapStr = (String)object6; + String mapStr = (String) object6; Assert.assertTrue(mapStr.contains("\"test1\":\"1\"")); Assert.assertTrue(mapStr.contains("\"test2\":2")); Assert.assertTrue(mapStr.contains("\"test3\":true"));