/* ================================================================== * Created [2009-4-27 下午11:32:55] by Jon.King * ================================================================== * TSS * ================================================================== * mailTo:jinpujun@hotmail.com * Copyright (c) Jon.King, 2009-2012 * ================================================================== */ package com.jinhe.tss.core.web.dispaly.xmlhttp; import java.util.HashMap; import java.util.Map; import org.apache.log4j.Logger; import com.jinhe.tss.core.Config; import com.jinhe.tss.core.util.BeanUtil; import com.jinhe.tss.core.web.dispaly.IDataEncoder; import com.jinhe.tss.core.web.dispaly.XmlPrintWriter; /** * <p> XmlHttpEncoder.java </p> * * XMLHTTP返回数据格式化对象,把返回的结果数据格式化成特定的XML格式。 * 在Action即将将数据返回前台时用到,数据将被转换成XML格式,可参考PTActionSupport.java。 * */ public class XmlHttpEncoder implements IDataEncoder { protected static final Logger log = Logger.getLogger(XmlHttpEncoder.class); /** * 返回参数列表 */ private Map<String, Object> returnValues = new HashMap<String, Object>(); /** * <p> * 设置返回参数 * </p> * @param name 参数名 * @param value 参数值 */ public void put(String name, Object value) { returnValues.put(name, value); } /** * <p> * 设置返回参数 * </p> * @param name 参数名 * @param value 参数值 * @param onlyText 是否为纯字符串 */ public void put(String name, String value, boolean onlyText) { if (onlyText) { value = "<![CDATA[" + value + "]]>"; } put(name, value); } /** * <p> * 输出XML信息<br> * 如果在调试模式下,输出调试信息,即请求返回数据 * </p> * @return String XML字符串 */ public String toXml() { StringBuffer sb = new StringBuffer(); sb.append("<?xml version=\"1.0\" encoding=\"" + DEFAULT_ENCODING + "\"?>"); sb.append("<Response>"); for (String key : returnValues.keySet()) { Object value = returnValues.get(key); if(value == null) { continue; } sb.append("<").append(key).append(">"); if (BeanUtil.isImplInterface(value.getClass(), IDataEncoder.class)) { sb.append(((IDataEncoder) value).toXml()); } else { sb.append(value); } sb.append("</").append(key).append(">"); } sb.append("</Response>"); String returnXML = sb.toString(); // 输出响应(response)的详细信息:请求数据流返回数据流信息 log.debug("---------------------------- Response ---------------------------"); log.debug("AppCode:" + Config.getAttribute(Config.APPLICATION_CODE)); log.debug("Thread:" + Thread.currentThread().getName()); log.debug("Content:"); log.debug("\n" + returnXML + "\n"); log.debug("------------------------ End of Response ------------------------"); return returnXML; } /** * <p> * 将数据返回到输出流 * </p> * @param writer 输出流对象 */ public void print(XmlPrintWriter writer) { writer.append(toXml()); } }