diff --git a/CHANGELOG.md b/CHANGELOG.md index 469046fb5..89a86ac37 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,9 @@ ## 5.0.4 ### 新特性 +* 【core】 XmlUtil中mapToStr支持namespace(pr#599@Github) ### Bug修复 +* 【core】 解决ConcurrentHashSet不能序列化的问题(issue#600@Github) ------------------------------------------------------------------------------------------------------------- diff --git a/hutool-core/src/main/java/cn/hutool/core/collection/ConcurrentHashSet.java b/hutool-core/src/main/java/cn/hutool/core/collection/ConcurrentHashSet.java index 8787f47b9..c3fb02ddd 100644 --- a/hutool-core/src/main/java/cn/hutool/core/collection/ConcurrentHashSet.java +++ b/hutool-core/src/main/java/cn/hutool/core/collection/ConcurrentHashSet.java @@ -17,8 +17,8 @@ public class ConcurrentHashSet extends AbstractSet implements java.io.Seri private static final long serialVersionUID = 7997886765361607470L; /** 持有对象。如果值为此对象表示有数据,否则无数据 */ - private static final Object PRESENT = new Object(); - private final ConcurrentHashMap map; + private static final Boolean PRESENT = true; + private final ConcurrentHashMap map; // ----------------------------------------------------------------------------------- Constructor start /** diff --git a/hutool-core/src/main/java/cn/hutool/core/util/XmlUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/XmlUtil.java index e79361ccd..8ae26e4f1 100644 --- a/hutool-core/src/main/java/cn/hutool/core/util/XmlUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/util/XmlUtil.java @@ -387,8 +387,7 @@ public class XmlUtil { * @since 4.1.2 */ public static DocumentBuilder createDocumentBuilder() { - final DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); - disableXXE(dbf); + final DocumentBuilderFactory dbf = disableXXE(DocumentBuilderFactory.newInstance()); DocumentBuilder builder; try { builder = dbf.newDocumentBuilder(); @@ -406,9 +405,21 @@ public class XmlUtil { * @return XML文档 */ public static Document createXml(String rootElementName) { - final Document doc = createXml(); - doc.appendChild(doc.createElement(rootElementName)); + return createXml(rootElementName, null); + } + /** + * 创建XML文档
+ * 创建的XML默认是utf8编码,修改编码的过程是在toStr和toFile方法里,即XML在转为文本的时候才定义编码 + * + * @param rootElementName 根节点名称 + * @param namespace 命名空间,无则传null + * @return XML文档 + * @since 5.0.4 + */ + public static Document createXml(String rootElementName, String namespace) { + final Document doc = createXml(); + doc.appendChild(null == namespace ? doc.createElement(rootElementName) : doc.createElementNS(rootElementName, namespace)); return doc; } @@ -674,7 +685,7 @@ public class XmlUtil { * @since 4.0.8 */ public static Map xmlToMap(String xmlStr) { - return xmlToMap(xmlStr, new HashMap()); + return xmlToMap(xmlStr, new HashMap<>()); } /** @@ -685,7 +696,7 @@ public class XmlUtil { * @since 4.0.8 */ public static Map xmlToMap(Node node) { - return xmlToMap(node, new HashMap()); + return xmlToMap(node, new HashMap<>()); } /** @@ -804,9 +815,22 @@ public class XmlUtil { * @return 子节点 * @since 4.0.9 */ + public static Element appendChild(Node node, String tagName) { + return appendChild(node, tagName, null); + } + + /** + * 在已有节点上创建子节点 + * + * @param node 节点 + * @param tagName 标签名 + * @param namespace 命名空间,无传null + * @return 子节点 + * @since 5.0.4 + */ public static Element appendChild(Node node, String tagName, String namespace) { Document doc = (node instanceof Document) ? (Document) node : node.getOwnerDocument(); - Element child = doc.createElementNS(namespace, tagName); + Element child = (null == namespace) ? doc.createElement(tagName) : doc.createElementNS(namespace, tagName); node.appendChild(child); return child; } diff --git a/hutool-db/src/main/java/cn/hutool/db/Page.java b/hutool-db/src/main/java/cn/hutool/db/Page.java index 3f51ee4a3..32df9e155 100644 --- a/hutool-db/src/main/java/cn/hutool/db/Page.java +++ b/hutool-db/src/main/java/cn/hutool/db/Page.java @@ -42,7 +42,7 @@ public class Page implements Serializable { * @param pageSize 每页结果数 */ public Page(int pageNumber, int pageSize) { - this.pageNumber = pageNumber < 0 ? 0 : pageNumber; + this.pageNumber = Math.max(pageNumber, 0); this.pageSize = pageSize <= 0 ? DEFAULT_PAGE_SIZE : pageSize; } @@ -73,7 +73,7 @@ public class Page implements Serializable { * @param pageNumber 页码 */ public void setPageNumber(int pageNumber) { - this.pageNumber = pageNumber < 0 ? 0 : pageNumber; + this.pageNumber = Math.max(pageNumber, 0); } /**