From 7351aec47de2b144efc4db95c44f229c82e31a08 Mon Sep 17 00:00:00 2001 From: Looly Date: Fri, 16 Jun 2023 19:23:19 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8DXmlUtil.xmlToBean=E7=A9=BA?= =?UTF-8?q?=E8=8A=82=E7=82=B9=E8=BD=AC=E6=8D=A2=E5=A4=B1=E8=B4=A5=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 1 + .../core/convert/impl/BeanConverter.java | 4 ++ .../cn/hutool/core/util/Issue3136Test.java | 67 +++++++++++++++++++ 3 files changed, 72 insertions(+) create mode 100755 hutool-core/src/test/java/cn/hutool/core/util/Issue3136Test.java diff --git a/CHANGELOG.md b/CHANGELOG.md index 7508db559..accaa09bb 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,7 @@ * 【extra 】 修复Sftp中exists方法父目录不存在时报错(issue#I7CSQ9@Gitee) * 【extra 】 修复xml转json再转bean失败问题(issue#3139@Github) * 【poi 】 修复RowUtil传入参数错误问题(issue#3139@Github) +* 【poi 】 修复XmlUtil.xmlToBean空节点转换失败问题(issue#3136@Github) ------------------------------------------------------------------------------------------------------------- # 5.8.19(2023-05-27) diff --git a/hutool-core/src/main/java/cn/hutool/core/convert/impl/BeanConverter.java b/hutool-core/src/main/java/cn/hutool/core/convert/impl/BeanConverter.java index 9a7c23848..10263d2bd 100644 --- a/hutool-core/src/main/java/cn/hutool/core/convert/impl/BeanConverter.java +++ b/hutool-core/src/main/java/cn/hutool/core/convert/impl/BeanConverter.java @@ -9,6 +9,7 @@ import cn.hutool.core.convert.ConvertException; import cn.hutool.core.map.MapProxy; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ReflectUtil; +import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.TypeUtil; import java.lang.reflect.Type; @@ -79,6 +80,9 @@ public class BeanConverter extends AbstractConverter { } else if(value instanceof byte[]){ // 尝试反序列化 return ObjectUtil.deserialize((byte[])value); + } else if(StrUtil.isEmptyIfStr(value)){ + // issue#3136 + return null; } throw new ConvertException("Unsupported source type: {}", value.getClass()); diff --git a/hutool-core/src/test/java/cn/hutool/core/util/Issue3136Test.java b/hutool-core/src/test/java/cn/hutool/core/util/Issue3136Test.java new file mode 100755 index 000000000..17d6b4940 --- /dev/null +++ b/hutool-core/src/test/java/cn/hutool/core/util/Issue3136Test.java @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2023 looly(loolly@aliyun.com) + * Hutool is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * http://license.coscl.org.cn/MulanPSL2 + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, + * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, + * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ + +package cn.hutool.core.util; + +import lombok.Data; +import org.junit.Assert; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.List; + +public class Issue3136Test { + + @Test + public void xmlToBeanTest() { + final String xmlStr = "02"; + final SmsRes smsRes = XmlUtil.xmlToBean(XmlUtil.parseXml(xmlStr).getDocumentElement(), SmsRes.class); + + Assert.assertEquals("02", smsRes.getCode()); + Assert.assertNull(smsRes.getMessage()); + } + + @Data + static class SmsRes { + /** + * 状态码. + */ + private String code; + + /** + * 消息. + */ + private Message message; + } + + @Data + static class Message { + + /** + * 消息项. + */ + private List item = new ArrayList<>(); + } + + @Data + static class MessageItem { + + /** + * 手机号. + */ + private String desmobile; + /** + * 消息id. + */ + private String msgid; + } +}