mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-04-19 03:01:48 +08:00
use defaut doc impl
This commit is contained in:
parent
4dea1f231a
commit
61c06d3971
@ -6,6 +6,8 @@
|
||||
## 5.0.6
|
||||
|
||||
### 新特性
|
||||
* 【setting】 toBean改为泛型,增加class参数重载(pr#80@Gitee)
|
||||
* 【core】 XmlUtil使用JDK默认的实现,避免第三方实现导致的问题(issue#I14ZS1@Gitee)
|
||||
|
||||
### Bug修复
|
||||
* 【core】 修复DateUtil.format使用DateTime时区失效问题(issue#I150I7@Gitee)
|
||||
|
@ -56,11 +56,23 @@ public class XmlUtil {
|
||||
/**
|
||||
* 在XML中无效的字符 正则
|
||||
*/
|
||||
public final static String INVALID_REGEX = "[\\x00-\\x08\\x0b-\\x0c\\x0e-\\x1f]";
|
||||
public static final String INVALID_REGEX = "[\\x00-\\x08\\x0b-\\x0c\\x0e-\\x1f]";
|
||||
/**
|
||||
* XML格式化输出默认缩进量
|
||||
*/
|
||||
public final static int INDENT_DEFAULT = 2;
|
||||
public static final int INDENT_DEFAULT = 2;
|
||||
|
||||
/**
|
||||
* 默认的DocumentBuilderFactory实现
|
||||
*/
|
||||
private static String defaultDocumentBuilderFactory = "com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl";
|
||||
|
||||
/**
|
||||
* 禁用默认的DocumentBuilderFactory,禁用后如果有第三方的实现(如oracle的xdb包中的xmlparse),将会自动加载实现。
|
||||
*/
|
||||
synchronized public static void disableDefaultDocumentBuilderFactory(){
|
||||
defaultDocumentBuilderFactory = null;
|
||||
}
|
||||
|
||||
// -------------------------------------------------------------------------------------- Read
|
||||
|
||||
@ -387,16 +399,34 @@ public class XmlUtil {
|
||||
* @since 4.1.2
|
||||
*/
|
||||
public static DocumentBuilder createDocumentBuilder() {
|
||||
final DocumentBuilderFactory dbf = disableXXE(DocumentBuilderFactory.newInstance());
|
||||
DocumentBuilder builder;
|
||||
try {
|
||||
builder = dbf.newDocumentBuilder();
|
||||
builder = createDocumentBuilderFactory().newDocumentBuilder();
|
||||
} catch (Exception e) {
|
||||
throw new UtilException(e, "Create xml document error!");
|
||||
}
|
||||
return builder;
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建{@link DocumentBuilderFactory}
|
||||
* <p>
|
||||
* 默认使用"com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl"<br>
|
||||
* 如果使用第三方实现,请调用{@link #disableDefaultDocumentBuilderFactory()}
|
||||
* </p>
|
||||
*
|
||||
* @return {@link DocumentBuilderFactory}
|
||||
*/
|
||||
public static DocumentBuilderFactory createDocumentBuilderFactory(){
|
||||
final DocumentBuilderFactory factory;
|
||||
if(StrUtil.isNotEmpty(defaultDocumentBuilderFactory)){
|
||||
factory = DocumentBuilderFactory.newInstance(defaultDocumentBuilderFactory, null);
|
||||
} else{
|
||||
factory = DocumentBuilderFactory.newInstance();
|
||||
}
|
||||
return disableXXE(factory);
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建XML文档<br>
|
||||
* 创建的XML默认是utf8编码,修改编码的过程是在toStr和toFile方法里,即XML在转为文本的时候才定义编码
|
||||
|
@ -8,25 +8,29 @@ import cn.hutool.core.bean.copier.CopyOptions;
|
||||
import cn.hutool.core.bean.copier.ValueProvider;
|
||||
import cn.hutool.core.convert.Convert;
|
||||
import cn.hutool.core.getter.OptNullBasicTypeFromStringGetter;
|
||||
import cn.hutool.core.util.ReflectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.log.Log;
|
||||
import cn.hutool.log.LogFactory;
|
||||
|
||||
/**
|
||||
* Setting抽象类
|
||||
*
|
||||
* @author Looly
|
||||
*
|
||||
* @author Looly
|
||||
*/
|
||||
public abstract class AbsSetting extends OptNullBasicTypeFromStringGetter<String> implements Serializable{
|
||||
public abstract class AbsSetting extends OptNullBasicTypeFromStringGetter<String> implements Serializable {
|
||||
private static final long serialVersionUID = 6200156302595905863L;
|
||||
private final static Log log = LogFactory.get();
|
||||
|
||||
/** 数组类型值默认分隔符 */
|
||||
/**
|
||||
* 数组类型值默认分隔符
|
||||
*/
|
||||
public final static String DEFAULT_DELIMITER = ",";
|
||||
/** 默认分组 */
|
||||
/**
|
||||
* 默认分组
|
||||
*/
|
||||
public final static String DEFAULT_GROUP = StrUtil.EMPTY;
|
||||
|
||||
|
||||
@Override
|
||||
public String getStr(String key, String defaultValue) {
|
||||
return getStr(key, DEFAULT_GROUP, defaultValue);
|
||||
@ -34,9 +38,9 @@ public abstract class AbsSetting extends OptNullBasicTypeFromStringGetter<String
|
||||
|
||||
/**
|
||||
* 获得字符串类型值
|
||||
*
|
||||
* @param key KEY
|
||||
* @param group 分组
|
||||
*
|
||||
* @param key KEY
|
||||
* @param group 分组
|
||||
* @param defaultValue 默认值
|
||||
* @return 值或默认值
|
||||
*/
|
||||
@ -50,17 +54,18 @@ public abstract class AbsSetting extends OptNullBasicTypeFromStringGetter<String
|
||||
|
||||
/**
|
||||
* 获得指定分组的键对应值
|
||||
*
|
||||
* @param key 键
|
||||
*
|
||||
* @param key 键
|
||||
* @param group 分组
|
||||
* @return 值
|
||||
*/
|
||||
public abstract String getByGroup(String key, String group);
|
||||
|
||||
// --------------------------------------------------------------- Get
|
||||
|
||||
/**
|
||||
* 带有日志提示的get,如果没有定义指定的KEY,则打印debug日志
|
||||
*
|
||||
*
|
||||
* @param key 键
|
||||
* @return 值
|
||||
*/
|
||||
@ -74,8 +79,8 @@ public abstract class AbsSetting extends OptNullBasicTypeFromStringGetter<String
|
||||
|
||||
/**
|
||||
* 带有日志提示的get,如果没有定义指定的KEY,则打印debug日志
|
||||
*
|
||||
* @param key 键
|
||||
*
|
||||
* @param key 键
|
||||
* @param group 分组
|
||||
* @return 值
|
||||
*/
|
||||
@ -88,9 +93,10 @@ public abstract class AbsSetting extends OptNullBasicTypeFromStringGetter<String
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------- Get string array
|
||||
|
||||
/**
|
||||
* 获得数组型
|
||||
*
|
||||
*
|
||||
* @param key 属性名
|
||||
* @return 属性值
|
||||
*/
|
||||
@ -100,8 +106,8 @@ public abstract class AbsSetting extends OptNullBasicTypeFromStringGetter<String
|
||||
|
||||
/**
|
||||
* 获得数组型
|
||||
*
|
||||
* @param key 属性名
|
||||
*
|
||||
* @param key 属性名
|
||||
* @param defaultValue 默认的值
|
||||
* @return 属性值
|
||||
*/
|
||||
@ -116,8 +122,8 @@ public abstract class AbsSetting extends OptNullBasicTypeFromStringGetter<String
|
||||
|
||||
/**
|
||||
* 获得数组型
|
||||
*
|
||||
* @param key 属性名
|
||||
*
|
||||
* @param key 属性名
|
||||
* @param group 分组名
|
||||
* @return 属性值
|
||||
*/
|
||||
@ -127,9 +133,9 @@ public abstract class AbsSetting extends OptNullBasicTypeFromStringGetter<String
|
||||
|
||||
/**
|
||||
* 获得数组型
|
||||
*
|
||||
* @param key 属性名
|
||||
* @param group 分组名
|
||||
*
|
||||
* @param key 属性名
|
||||
* @param group 分组名
|
||||
* @param delimiter 分隔符
|
||||
* @return 属性值
|
||||
*/
|
||||
@ -142,10 +148,11 @@ public abstract class AbsSetting extends OptNullBasicTypeFromStringGetter<String
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------- Get int
|
||||
|
||||
/**
|
||||
* 获取数字型型属性值
|
||||
*
|
||||
* @param key 属性名
|
||||
*
|
||||
* @param key 属性名
|
||||
* @param group 分组名
|
||||
* @return 属性值
|
||||
*/
|
||||
@ -155,9 +162,9 @@ public abstract class AbsSetting extends OptNullBasicTypeFromStringGetter<String
|
||||
|
||||
/**
|
||||
* 获取数字型型属性值
|
||||
*
|
||||
* @param key 属性名
|
||||
* @param group 分组名
|
||||
*
|
||||
* @param key 属性名
|
||||
* @param group 分组名
|
||||
* @param defaultValue 默认值
|
||||
* @return 属性值
|
||||
*/
|
||||
@ -166,10 +173,11 @@ public abstract class AbsSetting extends OptNullBasicTypeFromStringGetter<String
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------- Get bool
|
||||
|
||||
/**
|
||||
* 获取波尔型属性值
|
||||
*
|
||||
* @param key 属性名
|
||||
*
|
||||
* @param key 属性名
|
||||
* @param group 分组名
|
||||
* @return 属性值
|
||||
*/
|
||||
@ -179,9 +187,9 @@ public abstract class AbsSetting extends OptNullBasicTypeFromStringGetter<String
|
||||
|
||||
/**
|
||||
* 获取波尔型型属性值
|
||||
*
|
||||
* @param key 属性名
|
||||
* @param group 分组名
|
||||
*
|
||||
* @param key 属性名
|
||||
* @param group 分组名
|
||||
* @param defaultValue 默认值
|
||||
* @return 属性值
|
||||
*/
|
||||
@ -190,10 +198,11 @@ public abstract class AbsSetting extends OptNullBasicTypeFromStringGetter<String
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------- Get long
|
||||
|
||||
/**
|
||||
* 获取long类型属性值
|
||||
*
|
||||
* @param key 属性名
|
||||
*
|
||||
* @param key 属性名
|
||||
* @param group 分组名
|
||||
* @return 属性值
|
||||
*/
|
||||
@ -203,9 +212,9 @@ public abstract class AbsSetting extends OptNullBasicTypeFromStringGetter<String
|
||||
|
||||
/**
|
||||
* 获取long类型属性值
|
||||
*
|
||||
* @param key 属性名
|
||||
* @param group 分组名
|
||||
*
|
||||
* @param key 属性名
|
||||
* @param group 分组名
|
||||
* @param defaultValue 默认值
|
||||
* @return 属性值
|
||||
*/
|
||||
@ -214,10 +223,11 @@ public abstract class AbsSetting extends OptNullBasicTypeFromStringGetter<String
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------- Get char
|
||||
|
||||
/**
|
||||
* 获取char类型属性值
|
||||
*
|
||||
* @param key 属性名
|
||||
*
|
||||
* @param key 属性名
|
||||
* @param group 分组名
|
||||
* @return 属性值
|
||||
*/
|
||||
@ -230,10 +240,11 @@ public abstract class AbsSetting extends OptNullBasicTypeFromStringGetter<String
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------- Get double
|
||||
|
||||
/**
|
||||
* 获取double类型属性值
|
||||
*
|
||||
* @param key 属性名
|
||||
*
|
||||
* @param key 属性名
|
||||
* @param group 分组名
|
||||
* @return 属性值
|
||||
*/
|
||||
@ -243,9 +254,9 @@ public abstract class AbsSetting extends OptNullBasicTypeFromStringGetter<String
|
||||
|
||||
/**
|
||||
* 获取double类型属性值
|
||||
*
|
||||
* @param key 属性名
|
||||
* @param group 分组名
|
||||
*
|
||||
* @param key 属性名
|
||||
* @param group 分组名
|
||||
* @param defaultValue 默认值
|
||||
* @return 属性值
|
||||
*/
|
||||
@ -256,13 +267,13 @@ public abstract class AbsSetting extends OptNullBasicTypeFromStringGetter<String
|
||||
/**
|
||||
* 将setting中的键值关系映射到对象中,原理是调用对象对应的set方法<br>
|
||||
* 只支持基本类型的转换
|
||||
*
|
||||
*
|
||||
* @param group 分组
|
||||
* @param bean Bean对象
|
||||
* @param bean Bean对象
|
||||
* @return Bean
|
||||
*/
|
||||
public <T> T toBean(final String group, T bean) {
|
||||
return BeanUtil.fillBean(bean, new ValueProvider<String>(){
|
||||
return BeanUtil.fillBean(bean, new ValueProvider<String>() {
|
||||
|
||||
@Override
|
||||
public Object value(String key, Type valueType) {
|
||||
@ -279,11 +290,38 @@ public abstract class AbsSetting extends OptNullBasicTypeFromStringGetter<String
|
||||
/**
|
||||
* 将setting中的键值关系映射到对象中,原理是调用对象对应的set方法<br>
|
||||
* 只支持基本类型的转换
|
||||
*
|
||||
*
|
||||
* @param group 分组
|
||||
* @param beanClass Bean类型
|
||||
* @return Bean
|
||||
* @since 5.0.6
|
||||
*/
|
||||
public <T> T toBean(String group, Class<T> beanClass) {
|
||||
return toBean(group, ReflectUtil.newInstance(beanClass));
|
||||
}
|
||||
|
||||
/**
|
||||
* 将setting中的键值关系映射到对象中,原理是调用对象对应的set方法<br>
|
||||
* 只支持基本类型的转换
|
||||
*
|
||||
* @param <T> bean类型
|
||||
* @param bean Bean
|
||||
* @return Bean
|
||||
*/
|
||||
public <T> T toBean(T bean) {
|
||||
return toBean(null, bean);
|
||||
}
|
||||
|
||||
/**
|
||||
* 将setting中的键值关系映射到对象中,原理是调用对象对应的set方法<br>
|
||||
* 只支持基本类型的转换
|
||||
*
|
||||
* @param <T> bean类型
|
||||
* @param beanClass Bean类型
|
||||
* @return Bean
|
||||
* @since 5.0.6
|
||||
*/
|
||||
public <T> T toBean(Class<T> beanClass) {
|
||||
return toBean(null, beanClass);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user