- 浏览: 204935 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
MeowPass:
[b]引用[img][url][flash=200,200][ ...
java 声明静态Map常量的一种简单方式 -
MeowPass:
[flash=200,200][url][img]引用[u][ ...
java 声明静态Map常量的一种简单方式 -
thinkblog:
嗯 我当初看到别人这么用 我也这么写过.其实,现在想想,为什么 ...
SQL查询时, 当禁止使用 where 1=1 -
董宗磊:
顶
SQL查询时, 当禁止使用 where 1=1
1、忽略掉xml标签的大小写。
2、调用setter方法,将xml元素属性注入到BEAN。
2、调用setter方法,将xml元素属性注入到BEAN。
import java.lang.reflect.Constructor; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.dom4j.Attribute; import org.dom4j.DocumentException; import org.dom4j.Element; public class ElementWrapper { protected Log logger = LogFactory.getLog(getClass()); /** 基本类型到包装类型的映射 **/ private static Map<Class, Class> wrapperClassMap = new HashMap<Class, Class>(){{ put(boolean.class, Boolean.class); put(int.class, Integer.class); put(double.class, Double.class); put(long.class, Long.class); put(short.class, Short.class); put(float.class, Float.class); put(byte.class, Byte.class); put(char.class, Character.class); }}; /** *<pre> * 调用 targetBean 的普通setter方法,将configElement中的属性值反射到 targetBean 中 * 注意: Element 中属性的名称必须在 targetBean 中有seter方法,且不区分大小写 *</pre> * @param targetBean 目标 Bean * @param configElement 标签对象 * @author 陈修恒 2011-3-21 * @throws DocumentException */ protected void invokeNode (Object targetBean, Element configElement) throws DocumentException { if (logger.isDebugEnabled()) { logger.debug("开始调用:" + targetBean.getClass().getSimpleName() + "#setter方法"); } /** 获取这个节点的所有setter方法 */ Map<String, Method> methodMap = new HashMap<String, Method>(); Method[] methods = targetBean.getClass().getMethods(); for (Method method : methods) { if (method.getName().indexOf("set")==0 && method.getParameterTypes().length == 1) { methodMap.put( method.getName().toLowerCase().substring(3), method); } } /** 调用set,属性写入 */ for (Attribute attribute : (List<Attribute>)configElement.attributes()) { String methodName = attribute.getName().toLowerCase(); String value = attribute.getValue(); Method method = methodMap.get(methodName); /** 如果有属性的配置为 isXXX,去掉前面的is */ if (method == null && 0 == methodName.indexOf("is")) { method = methodMap.get(methodName.substring(2)); } if (method != null && value != null && value.length() != 0) { /** 参数类型 */ Class<?> paramType = method.getParameterTypes()[0]; try { Object param = null; if (paramType.equals(char.class)) { param = value.charAt(0); } else if (paramType.equals(String.class)){ param = value; } else { if (paramType.isPrimitive()) { // 是基本类型,获取他的包装类型 paramType = wrapperClassMap.get(paramType); } /** 调用本类型的String构造函数 */ Constructor<?> cons = paramType.getConstructor(String.class); param = cons.newInstance(value); } /** 调用setter (String) 方法 */ method.invoke(targetBean, param); if (logger.isDebugEnabled()) { logger.debug("成功调用:"+ getMethodInfo(targetBean, method)+", 参数:"+ param); } /** 将该方法删除 */ methodMap.remove(method.getName().toLowerCase().substring(3)); } catch (Exception e) { logger.error(e.getMessage(), e); throw new DocumentException(e.getMessage()); } } else if (logger.isDebugEnabled()) { logger.debug(targetBean.getClass().getSimpleName() + "不存在setter方法, 属性名:" + methodName); } } if (!methodMap.isEmpty() && logger.isDebugEnabled()) { for (Method m : methodMap.values()) { String methodInfo = getMethodInfo(targetBean, m); logger.debug( "没有调用:" + methodInfo ); } } } /** *<pre> * *</pre> * @param targetBean * @param m * @return * @author 陈修恒 2011-3-30 */ private String getMethodInfo(Object targetBean, Method m) { String methodString = m.toString(); int setIndex = methodString.lastIndexOf(".set"); String methodInfo = targetBean.getClass().getSimpleName() + "#"+methodString.substring(setIndex+1); return methodInfo; } /** *<pre> * 将 Element 配置的属性名,全改成小写 *</pre> * @param el * @return * @author 陈修恒 2011-3-28 */ public Map<String, String> attributes(Element el) { Map<String, String> map = new HashMap<String, String>(); for (Attribute attri : (Collection<Attribute>)el.attributes()) { map.put(attri.getName().toLowerCase(), attri.getValue()); } return map; } /** *<pre> * 获取子标签列表 *</pre> * @param rootElement 父标签 * @param elementName 子标签名称 * @return * @author 陈修恒 2011-3-28 */ public List<Element> elements (Element rootElement, String elementName) { List<Element> elementRst = new ArrayList<Element>(); /** 获取父节点下的所有子节点 */ List<Element> elements = rootElement.elements(); /** 帅选出名称与指定名称相同的标签,忽略大小写 */ for (Element element : elements) { if(elementName.equalsIgnoreCase(element.getName())) { elementRst.add(element); } } return elementRst; } /** *<pre> * 获取子标签列表 *</pre> * @param rootElement 父标签 * @param elementName 子标签名称 * @return * @author 陈修恒 2011-3-28 */ public Element element (Element rootElement, String elementName) { List<Element> elementRst = elements(rootElement, elementName); if (elementRst.isEmpty()) { return null; } else { return elementRst.get(0); } } }
发表评论
-
NIO Windows 平台的问题
2013-10-10 09:56 11321、建立 NIO 连接 http://communityg ... -
MyEclipse 插件
2013-05-10 11:26 0findbugs http://findbugs.cs.umd ... -
jbmp 工作流引擎笔记
2013-03-22 17:13 1091eclipse jBPM 插件 http://dldx.csd ... -
JAVA EE 下载,文件名显示中文
2012-04-30 20:53 1541HttpServletRequest request = ge ... -
response.setHeader("Cache-Control","no-cache"); 是干什么用的?目的是什么?
2012-04-11 17:02 3131来源:http://www.blogjava.net/jht/ ... -
JAVA 代理方式实现接口实例化,WebService的方式实现远程方法调用
2012-02-02 19:03 3762接口工厂 /** * <pre> * Ti ... -
由于使用 xfire/HttpMethod 造成Socket连接池满的问题及解决办法
2011-11-25 16:30 2266【转】 使用 XFire 访问webService, 运行一段 ... -
从 .class 中查看Java编译版本
2011-11-11 15:57 2673源自: http://blog.sina.com ... -
SQL查询时, 当禁止使用 where 1=1
2011-11-05 17:05 3380源自: http://www.iteye.com/topic ... -
Java访问共享文件——SMB 协议跨域访问
2011-07-05 18:39 2609public boolean connect() thr ... -
JMF 录像程序
2011-05-19 10:16 2049import java.awt.BorderLayout; ... -
利用JMF进行多媒体编程
2011-05-16 17:20 894http://www.360doc.com/content/0 ... -
java JSON笔记
2011-04-19 08:41 8621、大括号表示对象,中括号表示数据 -
java 声明静态Map常量的一种简单方式
2011-04-10 21:32 45508参考自:http://dengminhui.iteye.com ... -
Spring事务配置的五种方式
2011-04-10 12:12 1062[转] http://www.blogjava.net/ ... -
JavaBean的属性
2011-04-09 23:40 1164JavaBean的属性 JavaBean 的属性与一般Ja ... -
Java整数-字节,字节-字符,字节数组-十六进制字符串转换
2011-04-09 23:31 2129[转] (源地址忘了-,-!) // 整数到字节数组转 ... -
Big Endian 和 Little Endian
2011-04-09 23:27 1099[转] 谈到字节序的问题,必然牵涉到两大CPU ... -
Java 访问各种文件
2011-04-09 23:21 11221、读取.properties 文件 ... -
java strictfp 关键字
2011-04-09 23:17 1152转自:http://baike.baidu.c ...
相关推荐
DOM4J是一个强大的Java库,专门用于处理XML文档。它是一个灵活且高性能的XML解析器,提供了丰富的API来创建、修改和操作XML数据。在Java应用程序中,DOM4J作为一个流行的选择,尤其在处理复杂的XML结构时,因为它...
DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了简单而直观的API,使得开发者可以方便地读取、创建、修改以及遍历XML文档。在这个教程中,我们将深入探讨DOM4J的核心功能和使用方法,同时也会涉及到如何...
- **DOM阅读器**:首先,通过`DocumentFactory.createDocument()`方法创建一个`Document`对象,然后使用`read()`方法读取XML文件,将整个XML文件加载到内存中形成一个树形结构。这种方式适合小型XML文档,因为所有...
当我们需要将XML字符串解析并映射到Java Bean对象时,dom4j是一个常用的库。本篇文章将详细探讨如何使用dom4j库实现这个过程。 首先,dom4j是一个强大的Java XML API,它提供了丰富的功能,如读取、写入、修改和...
在本教程中,我们将深入探讨如何使用DOM4J来解析XML文件,并创建一个无敌连环解析工具类。 首先,我们需要了解XML的基本概念。XML(可扩展标记语言)是一种标记语言,常用于数据交换和存储。它的结构化特性使其非常...
本主题将专注于DOM4J库,它是一个灵活且功能强大的Java XML API,用于读取、写入、操作和导航XML文档。DOM4J.jar是这个库的实现,它提供了比标准DOM更高效、更易于使用的API。 DOM4J的使用主要围绕以下几个核心概念...
在提供的压缩包中,包含了`dom4j.jar`文件,这是DOM4J的运行库,包含了所有DOM4J的类和接口。在实际项目中,只需将这个JAR文件添加到项目的类路径中,就可以使用DOM4J处理XML了。 总结来说,DOM4J是Java开发中处理...
总结来说,DOM4J 2.1.3是一个强大且易用的XML处理工具,它的API文档和源代码为开发者提供了便利的学习和开发环境。无论你是XML初学者还是资深开发者,DOM4J都能成为你处理XML任务的得力助手。通过深入学习和实践,你...
DOM4J,作为一个强大的Java XML API,是处理XML文档的主流工具之一。它提供了一套简单而高效的方式来操作XML文档,包括读取、写入、修改和遍历XML结构。在Java开发中,DOM4J因其灵活的API设计和出色的性能而广受欢迎...
- **创建XML**:DOM4J提供了便捷的API来创建XML文档,如`DocumentFactory`用于创建新的文档对象,`Element`类用于创建元素,`Attribute`类用于添加属性。 - **修改XML**:通过`Element`的`addContent()`、`remove...
DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了简单而直观的API,使得开发者可以方便地读取、写入、修改以及操作XML文件。DOM4J 1.6.1是这个库的一个稳定版本,发布于较早时期,但依然广泛应用于许多Java...
如果你正在处理XML文档,无论是进行简单的读取还是复杂的转换操作,DOM4J都是一个值得信赖的工具。在Java项目中,只需将dom4j-1.6.1.jar添加到类路径,就可以立即开始利用其强大的XML处理能力。 总之,DOM4J是Java...
DOM4J则是另一个流行的XML处理库,它提供了更高级的功能和更多的选择: 1. **灵活性**:DOM4J不仅支持DOM,还支持SAX和STAX解析器,可以根据需求选择最适合的解析方式。 2. **XPath支持**:DOM4J内置了XPath表达式...
DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了简单且高效的API,使得开发者能够轻松地读取、写入、修改以及操作XML文件。在这个"dom4j工具类使用例子"中,我们将深入探讨如何利用DOM4J进行XML处理。 ...
总之,DOM4J和DOM都是处理XML的重要工具,它们各有优缺点,选择使用哪一个取决于具体项目的需求。DOM4J提供了更高级的功能和更好的性能,而DOM则作为标准方案保持着广泛的兼容性。在实际开发中,理解它们的工作原理...
**DOM4J工具类详解** DOM4J是一个强大的Java XML API,它提供了全面的XML处理功能,包括解析、操作和生成XML文档。DOM4J在Java社区中被广泛使用,因其简洁的API和高效的性能而受到青睐。在这个文档中,我们将深入...
2. **创建XML文件**:使用DOM4j创建一个新的XML文件,这通常涉及到`Document`、`Element`和`Writer`的使用。例如,你可以创建一个包含根元素和子元素的XML文件。 3. **动态创建XML节点**:在已有的XML文档中动态...
总结来说,DOM4J为开发者提供了一套完整的工具来解析、操作和创建XML文档。无论是简单的文件读写还是复杂的XML文档构建,DOM4J都能胜任。希望本教程能够帮助大家更好地理解和掌握DOM4J的应用技巧。
DOM4J是一个强大的Java库,专门用于处理XML文档。它是一个灵活且高性能的XML解析器,提供了丰富的API来创建、修改和操作XML内容。在Java世界中,DOM4J是继JDOM之后的一个非常受欢迎的选择,它弥补了标准Java DOM API...
**DOM4J工具类详解** DOM4J是一个强大的Java XML处理库,它提供了一套灵活且功能丰富的API,使得在Java应用程序中解析、创建、修改XML文档变得异常简单。DOM4J的名字来源于“DOM for Java”,它是一个基于DOM模型的...