xml 字符串 標籤爲 soapenv:Envelope 轉爲 javaBean實體

xml 字符串 標籤爲 soapenv:Envelope 轉爲 javaBean實體

此方法 轉換 得調試,可採用 截取方式 方式 拿到xml 對應Javabean 繞過 soapenv:Envelope標籤

package com.hod.weibao.common.xml.ddbx;

import java.io.ByteArrayInputStream;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class SoapUtil {

	/**
	 * 解析XML轉換爲Object
	 * @param strXML xml字符串
	 * @param elementName 解析根標籤名
	 * @param className 類名全路徑(包名+類名)
	 * @return
	 */
	public static List<Object> parseObject(String strXML,String elementName,String className){
		List<Object> list=new ArrayList<Object>();
		DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance(); 
		DocumentBuilder builder=null;
		try{
			builder=factory.newDocumentBuilder();
			Document doc=builder.parse(new ByteArrayInputStream(strXML.getBytes("utf-8"))); 
			NodeList nodelist=doc.getElementsByTagName(elementName);
			for(int i=0;i<nodelist.getLength();i++){
				Node node=nodelist.item(i);
				NodeList chlist=node.getChildNodes();
				Object bean=Class.forName(className).newInstance();
				Class<?> cls=bean.getClass();
		    	Method methods[]=cls.getDeclaredMethods();
		    	Field fields[]=cls.getDeclaredFields();
				for(int j=0;j<chlist.getLength();j++)
				{
					Node chnode=chlist.item(j);
					if(chnode instanceof Element)
					{
						//System.out.println(chnode.getNodeName()+","+chnode.getTextContent());
						for(Field field:fields)
			    		{
							String fieldName=field.getName();
							if(fieldName.equals(chnode.getNodeName())){
								String fldtype=field.getType().getSimpleName();
				    			String setMethod=pareSetName(fieldName);
				    			if(!checkMethod(methods,setMethod))
				    			{
				    				continue;
				    			}
				    			Object value=chnode.getTextContent();
				    			Method method=cls.getMethod(setMethod,field.getType());
				    			if(null != value)
				    			{
				    				if("String".equals(fldtype))
				    				{
				    					method.invoke(bean,value.toString());  
				                    }
				    				else if("Date".equals(fldtype))
				    				{
				    					Date temp=parseDate(value.toString());
				    					method.invoke(bean,temp);
				                    }
				    				else if("Integer".equals(fldtype) || "int".equals(fldtype))
				    				{
				    					Integer intval=Integer.parseInt(value.toString());
				    					method.invoke(bean,intval);  
				                    }
				    				else if("Long".equalsIgnoreCase(fldtype))
				    				{
				    					Long temp=Long.parseLong(value.toString());
				    					method.invoke(bean,temp);
				    				}
				    				else if(fldtype.equalsIgnoreCase("Float"))
				    				{
				    					Float f=Float.parseFloat(value.toString());
				    					method.invoke(bean,f);
				    				}
				    				else if("Double".equalsIgnoreCase(fldtype))
				    				{
				    					Double temp=Double.parseDouble(value.toString());
				    					method.invoke(bean,temp);  
				                    }
				    				else if("Boolean".equalsIgnoreCase(fldtype))
				    				{
				    					Boolean temp=Boolean.parseBoolean(value.toString());
				    					method.invoke(bean,temp);
				    				}
				    				else 
				    				{
				    					System.out.println("not supper type"+fldtype);  
				                    }  
				    			}
				    			break;
							}
			    		}
					}
				}
				list.add(bean);
			}
		}
		catch(Exception e){
			System.out.println(e.getMessage());
			e.printStackTrace();
		}
		return list;
	}
	
	/**  
     * 拼接某屬性set 方法  
     * @param fldname  
     * @return  
     */
    public static String pareSetName(String fldname)
    {
    	if(null==fldname || "".equals(fldname))
    	{
    		return null;  
        }
        String pro="set"+fldname.substring(0,1).toUpperCase()+fldname.substring(1);
        return pro;
    }
    /**  
     * 判斷該方法是否存在  
     * @param methods  
     * @param met  
     * @return  
     */
    public static boolean checkMethod(Method methods[],String met)
    {
    	if(null != methods)
    	{
    		for(Method method:methods)
    		{
    			if(met.equals(method.getName()))
    			{
    				return true;  
                }
            }
        }
    	return false;
    }
    /** 
     * 格式化string爲Date 
     * @param datestr 
     * @return date 
     */
    public static Date parseDate(String datestr)
    {
    	if(null==datestr || "".equals(datestr))
    	{  
            return null;  
        }  
        try
        {
        	String fmtstr=null;  
            if(datestr.indexOf(':')>0)
            {
            	fmtstr="yyyy-MM-dd HH:mm:ss";  
            }
            else
            {
            	fmtstr="yyyy-MM-dd";
            }
            SimpleDateFormat sdf=new SimpleDateFormat(fmtstr);
            return sdf.parse(datestr);
        }
        catch(Exception e)
        {
        	System.out.println(e.getMessage());
        	return null;  
        }  
    }
	
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章