From b5e0630c32ce466302cc61b09bdf436edf57f7f1 Mon Sep 17 00:00:00 2001 From: peter zhang Date: Thu, 24 Oct 2019 19:03:44 +0800 Subject: [PATCH 1/2] support xml namespace --- .../java/cn/hutool/core/util/XmlUtil.java | 31 +++++++++++++++++-- 1 file changed, 28 insertions(+), 3 deletions(-) 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 6621f5378..e79361ccd 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 @@ -744,6 +744,18 @@ public class XmlUtil { return toStr(mapToXml(data, rootName)); } + /** + * 将Map转换为XML格式的字符串 + * + * @param data Map类型数据 + * @param rootName 根节点名 + * @return XML格式的字符串 + * @since 5.0.4 + */ + public static String mapToXmlStr(Map data, String rootName,String namespace) { + return toStr(mapToXml(data, rootName, namespace)); + } + /** * 将Map转换为XML * @@ -753,8 +765,21 @@ public class XmlUtil { * @since 4.0.9 */ public static Document mapToXml(Map data, String rootName) { + + return mapToXml(data, rootName, null); + } + + /** + * 将Map转换为XML + * + * @param data Map类型数据 + * @param rootName 根节点名 + * @return XML + * @since 5.0.4 + */ + public static Document mapToXml(Map data, String rootName,String namespace) { final Document doc = createXml(); - final Element root = appendChild(doc, rootName); + final Element root = appendChild(doc, rootName, namespace); mapToXml(doc, root, data); return doc; @@ -779,9 +804,9 @@ public class XmlUtil { * @return 子节点 * @since 4.0.9 */ - public static Element appendChild(Node node, String tagName) { + public static Element appendChild(Node node, String tagName, String namespace) { Document doc = (node instanceof Document) ? (Document) node : node.getOwnerDocument(); - Element child = doc.createElement(tagName); + Element child = doc.createElementNS(namespace, tagName); node.appendChild(child); return child; } From 07660517b90496e816dedd61d45c5623aadd2d40 Mon Sep 17 00:00:00 2001 From: looly Date: Fri, 25 Oct 2019 10:06:58 +0100 Subject: [PATCH 2/2] fix code --- CHANGELOG.md | 2 + .../core/collection/ConcurrentHashSet.java | 4 +- .../java/cn/hutool/core/util/XmlUtil.java | 38 +++++++++++++++---- .../src/main/java/cn/hutool/db/Page.java | 4 +- 4 files changed, 37 insertions(+), 11 deletions(-) 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); } /**