diff --git a/pom.xml b/pom.xml index 05d88d9..2860bee 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ com.aliyun tea - 1.4.2 + 1.4.3 jar tea diff --git a/src/main/java/com/aliyun/tea/TeaModel.java b/src/main/java/com/aliyun/tea/TeaModel.java index f56ac0c..be0b9ff 100644 --- a/src/main/java/com/aliyun/tea/TeaModel.java +++ b/src/main/java/com/aliyun/tea/TeaModel.java @@ -359,27 +359,27 @@ 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: {}.", + logger.verbose("[{}] 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: {}.", + logger.verbose("[{}] 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: {}.", + logger.verbose("[{}] 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 Number) { if (object.toString().equals("1")) { - logger.info("[{}] There are some cast events happening. expect: {}, but: {}, value: {}.", + logger.verbose("[{}] 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: {}.", + logger.verbose("[{}] There are some cast events happening. expect: {}, but: {}, value: {}.", objectName, Boolean.class.getName(), object.getClass().getName(), object.toString()); return false; } @@ -389,20 +389,20 @@ public static Object confirmType(Class expect, Object object, String objectName) try { Integer.parseInt(object.toString()); } catch (NumberFormatException e) { - logger.warning("[{}] There are some cast events happening. expect: {}, but: {}, value: {}.", + logger.verbose("[{}] 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: {}.", + logger.verbose("[{}] 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: {}.", + logger.verbose("[{}] There are some cast events happening. expect: {}, but: {}, value: {}.", objectName, Integer.class.getName(), object.getClass().getName(), object.toString()); } bigDecimal = new BigDecimal(object.toString()); @@ -410,7 +410,7 @@ public static Object confirmType(Class expect, Object object, String objectName) } if (object instanceof Float || object instanceof Double) { bigDecimal = new BigDecimal(object.toString()); - logger.warning("[{}] There are some cast events happening. expect: {}, but: {}, value: {}.", + logger.verbose("[{}] There are some cast events happening. expect: {}, but: {}, value: {}.", objectName, Integer.class.getName(), object.getClass().getName(), object.toString()); return bigDecimal.intValue(); } @@ -419,7 +419,7 @@ public static Object confirmType(Class expect, Object object, String objectName) try { Long.parseLong(object.toString()); } catch (NumberFormatException e) { - logger.warning("[{}] There are some cast events happening. expect: {}, but: {}, value: {}.", + logger.verbose("[{}] There are some cast events happening. expect: {}, but: {}, value: {}.", objectName, Long.class.getName(), object.getClass().getName(), object.toString()); } bigDecimal = new BigDecimal(object.toString()); @@ -427,7 +427,7 @@ public static Object confirmType(Class expect, Object object, String objectName) } if (object instanceof Float || object instanceof Double) { bigDecimal = new BigDecimal(object.toString()); - logger.warning("[{}] There are some cast events happening. expect: {}, but: {}, value: {}.", + logger.verbose("[{}] There are some cast events happening. expect: {}, but: {}, value: {}.", objectName, Long.class.getName(), object.getClass().getName(), object.toString()); return bigDecimal.longValue(); } @@ -436,7 +436,7 @@ public static Object confirmType(Class expect, Object object, String objectName) try { Float.parseFloat(object.toString()); } catch (NumberFormatException e) { - logger.warning("[{}] There are some cast events happening. expect: {}, but: {}, value: {}.", + logger.verbose("[{}] There are some cast events happening. expect: {}, but: {}, value: {}.", objectName, Float.class.getName(), object.getClass().getName(), object.toString()); } bigDecimal = new BigDecimal(object.toString()); @@ -444,7 +444,7 @@ public static Object confirmType(Class expect, Object object, String objectName) } if (object instanceof Double) { if ((Double) object > Float.MAX_VALUE) { - logger.warning("[{}] There are some cast events happening. expect: {}, but: {}, value: {}.", + logger.verbose("[{}] There are some cast events happening. expect: {}, but: {}, value: {}.", objectName, Float.class.getName(), object.getClass().getName(), object.toString()); } bigDecimal = new BigDecimal(object.toString()); @@ -452,7 +452,7 @@ public static Object confirmType(Class expect, Object object, String objectName) } if (object instanceof Integer || object instanceof Long) { bigDecimal = new BigDecimal(object.toString()); - logger.warning("[{}] There are some cast events happening. expect: {}, but: {}, value: {}.", + logger.verbose("[{}] There are some cast events happening. expect: {}, but: {}, value: {}.", objectName, Float.class.getName(), object.getClass().getName(), object.toString()); return bigDecimal.floatValue(); } @@ -461,7 +461,7 @@ public static Object confirmType(Class expect, Object object, String objectName) try { Double.parseDouble(object.toString()); } catch (NumberFormatException e) { - logger.warning("[{}] There are some cast events happening. expect: {}, but: {}, value: {}.", + logger.verbose("[{}] There are some cast events happening. expect: {}, but: {}, value: {}.", objectName, Double.class.getName(), object.getClass().getName(), object.toString()); } bigDecimal = new BigDecimal(object.toString()); @@ -469,7 +469,7 @@ public static Object confirmType(Class expect, Object object, String objectName) } if (object instanceof Integer || object instanceof Long) { bigDecimal = new BigDecimal(object.toString()); - logger.warning("[{}] There are some cast events happening. expect: {}, but: {}, value: {}.", + logger.verbose("[{}] 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 85d7138..1e8ceb7 100644 --- a/src/test/java/com/aliyun/tea/TeaModelTest.java +++ b/src/test/java/com/aliyun/tea/TeaModelTest.java @@ -802,4 +802,51 @@ public void confirmTypeTest() { Assert.assertEquals("[\"1\",2,true,{\"sub\":\"sub\"}]", object6); } + + @Test + public void confirmTypeShrinkFiltersMapToString() { + Map filter = new HashMap(); + filter.put("Operator", "IN"); + List values = new ArrayList(); + values.add("po-000001bctotzplhahu1d"); + filter.put("Value", values); + filter.put("Name", "policyId"); + + List filters = new ArrayList(); + filters.add(filter); + + Map filtersWrapper = new HashMap(); + filtersWrapper.put("Filters", filters); + + Object result = TeaModel.confirmType(String.class, filtersWrapper, + "com.aliyun.hbrpolicyinner20260527.models.ListPolicyBindingsShrinkRequest.filtersShrink"); + Assert.assertEquals(String.class, result.getClass()); + String json = (String) result; + Assert.assertTrue(json.contains("\"Filters\"")); + Assert.assertTrue(json.contains("\"Operator\":\"IN\"")); + Assert.assertTrue(json.contains("\"Name\":\"policyId\"")); + Assert.assertTrue(json.contains("po-000001bctotzplhahu1d")); + + Object listJson = TeaModel.confirmType(String.class, filters, + "com.aliyun.hbrpolicyinner20260527.models.ListPolicyBindingsShrinkRequest.filtersShrink"); + Assert.assertEquals(String.class, listJson.getClass()); + Assert.assertTrue(((String) listJson).startsWith("[")); + Assert.assertTrue(((String) listJson).contains("\"Operator\":\"IN\"")); + } + + @Test + public void confirmTypeInvalidFloatDoubleStringStillLogsVerboseThenFails() { + try { + TeaModel.confirmType(Float.class, "not-a-number", "field.float"); + Assert.fail("expected NumberFormatException"); + } catch (NumberFormatException e) { + // Float.parseFloat fails → verbose cast log; BigDecimal then throws + } + try { + TeaModel.confirmType(Double.class, "not-a-number", "field.double"); + Assert.fail("expected NumberFormatException"); + } catch (NumberFormatException e) { + // same path for Double + } + } }