当前位置:编程学习 > XML/UML >>

HTTP把指定的内部实体对象转换成xml,把xml转换成指定的内部实体对象

相信设计到通讯的工程,都会需要用的通讯协议http、soap...,相信也写过很多的接口soap接口、HTTP+XML接口,每次调用我们写的接口的时候传给我们的都是个XML格式的数据信息,我们需要把这些数据解析出来,然后再拼装成一个info发出去,以下写了一个通用的方法,利用JAVA的反射机制来实现:

 

代码如下:

Java代码

/**

 * <p>

 * Copyright (C), 1988-2008, Huawei Tech. Co., Ltd.

 * </p>

 * <p>

 * FileName: Transform.java

 * </p>

 * <p>

 * Author:tangtao Version :1.0 Date:2010-8-31

 * </p>

 * <p>

 * Description:

 * </p>

 * <p>

 * Version: 1.0

 * </p>

 * <p>

 * Function List:

 * </p>

 */ 

package com.huawei.nvs.sys.conn.http; 

 

import java.io.ByteArrayInputStream; 

import java.lang.reflect.AccessibleObject; 

import java.lang.reflect.Field; 

import java.util.ArrayList; 

import java.util.Iterator; 

import java.util.List; 

import java.util.Locale; 

import java.util.Map; 

import java.util.regex.Matcher; 

import java.util.regex.Pattern; 

 

import org.w3c.dom.Element; 

import org.w3c.dom.Node; 

 

import com.huawei.nvs.sys.conn.http.bean.FieldInfo; 

import com.huawei.nvs.sys.conn.http.bean.HttpInfo; 

import com.huawei.nvs.sys.conn.http.bean.MessageInfo; 

import com.huawei.nvs.sys.conn.http.bean.SendFieldInfo; 

import com.huawei.nvs.sys.conn.http.conf.HttpEnv; 

import com.huawei.nvs.sys.conn.http.exception.HttpException; 

import com.huawei.nvs.sys.conn.http.util.ListMap; 

import com.huawei.nvs.sys.conn.http.util.XmlTools; 

 

/**

 * <p>

 * Title: Transform

 * </p>

 * <p>

 * Description: HTTP消息转换类,把指定的内部实体对象转换成xml,把xml转换成指定的内部实体对象

 * </p>

 * <p>

 * Copyright: Copyright (c) 2010-8-31

 * </p>

 * <p>

 * Company: www.huawei.com

 * </p>

 * 

 * @author wanghui

 * @version 1.0

 */ 

public class Transform 

    /**

     * 把实体bean转换成xml字符串

     * 

     * @param bean 实体对象

     * @throws HttpException HttpException

     * @return 转换成功的xml字符串

     */ 

    public static String beanToXml(HttpInfo bean) 

        throws HttpException 

    { 

        if (null == bean) 

        { 

            throw new HttpException("Parameter bean is null."); 

        } 

        StringBuffer sbf = new StringBuffer("<?xml version='1.0' encoding='UTF-8'?>"); 

         

        ListMap headFieldMap = new ListMap(); 

        ListMap bodyFieldMap = new ListMap(); 

         

        Class<?> c = bean.getClass(); 

         

        try 

        { 

            // 获取消息类型和实体对象类路径

            Field f = c.getDeclaredField("msgType"); 

            Field v = c.getDeclaredField("version"); 

             

            // 修改checkstyle 问题by wangzheng at 20101015 begin 

            // f.setAccessible(true); 

            AccessibleObject.setAccessible(new Field[] {f}, true); 

            AccessibleObject.setAccessible(new Field[] {v}, true); 

            // 修改checkstyle 问题by wangzheng at 20101015 end 

             

            String msgType = f.get(bean).toString(); 

            String version = (String)v.get(bean); 

             

            //因为这个是发到SMC的消息,不存在多版本,所以这里默认赋值为1.0版本

            version = null == version ? "smc" : version; 

             

            String path = c.getName(); 

            Field[] fields = c.getDeclaredFields(); 

            AccessibleObject.setAccessible(fields, true); 

            // 找出bean中的消息头和消息体

            for (Field field : fields) 

            { 

                String fieldName = field.getName(); 

                if (isUseField(msgType, path, fieldName, version)) 

                { 

                    if ("MsgType".equalsIgnoreCase(fieldName) || "Expires".equalsIgnoreCase(fieldName) 

                        || "callID".equalsIgnoreCase(fieldName)) 

                    { 

补充:web前端 , HTML/CSS  ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,