Java

本类阅读TOP10

·使用MyEclipse开发Struts框架的Hello World!(录像1)
·hibernate配置笔记
·AOP编程入门--Java篇
·linux下Tomcat 5.0.20 与 Apache 2 安装/集成/配置
·在win2003下整合了整合Tomcat5.5+ apache_2.0.53+ mod_jk_2.0.47.dll
·构建Linux下IDE环境--Eclipse篇
·Jsp 连接 mySQL、Oracle 数据库备忘(Windows平台)
·ASP、JSP、PHP 三种技术比较
·Tomcat5.5.9的安装配置
·AWT GUI 设计笔记(二)

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
A simple class for converting any Java object to XML string

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

A simple class for converting any Java object to XML string
In need to save XML representation of your Java object? Here is a simple 200-line class that will do this using reflection. But don't worry, there is some very powerful caching going on, so that the performance will be very good.

Thanks to comments for pointing out the isAssignableFrom() function in Class. Also, now the resulting XML is valid with all the special characters (&, <, >, &apos; and ").

package own;

import java.lang.reflect.*;
import java.util.*;

public class OptimizedReflectionMarshaller {
  // cache for getters
  private static HashMap gettersMap = new HashMap();

  // cache for storing info on whether certain class implements Collection
  private static HashMap collectionsMap = new HashMap();

  private static final String JAVA = "java.";
  private static final String JAVAX = "javax.";
  
  private static final Class[] EMPTYPARAMS = new Class[0];
  
  /**
   * Info on a single field and the corresponding getter method
   */
  private static class FieldMethodPair {
    private String fieldName;

    private Method getterMethod;

    public FieldMethodPair(String fieldName, Method getterMethod) {
      this.fieldName = fieldName;
      this.getterMethod = getterMethod;
    }

    public String getFieldName() {
      return fieldName;
    }

    public Method getGetterMethod() {
      return getterMethod;
    }
  }

  /**
   * Returns the marshalled XML representation of the parameter object
   */
  public static String marshal(Object obj) {
    StringBuffer sb = new StringBuffer();
    Class clazz = obj.getClass();

    // get class name in lower letters (w/o package name)
    String className = clazz.getName();
    int lastDotIndex = className.lastIndexOf(".");
    if (lastDotIndex >= 0)
      className = className.substring(lastDotIndex + 1);
    className = className.toLowerCase();

    sb.append("<" + className + ">");
    marshal(obj, sb);
    sb.append("


Feel free to use and modify.

Enjoy
Kirill



相关文章

相关软件