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 ,