/* ==================================================================
* 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.List;
import javax.servlet.http.HttpServletRequest;
import org.apache.log4j.Logger;
import org.dom4j.Element;
import org.dom4j.Node;
import com.jinhe.tss.core.Config;
import com.jinhe.tss.core.exception.BusinessException;
import com.jinhe.tss.core.util.XMLDocUtil;
import com.jinhe.tss.core.web.RewriteableHttpServletRequest;
import com.jinhe.tss.core.web.wrapper.RewriteableHttpServletRequestWrapper;
/**
* <p>
* XmlHttpDecoder.java
* </p>
*
* 将Request中XML数据流方式提交的参数解析成普通的 参数名/值 对后重新置回Request对象并返回
*
*/
public class XmlHttpDecoder {
private static final Logger log = Logger.getLogger(XmlHttpDecoder.class);
/**
* <p>
* 将Request中的XML数据流解析成普通的名值对后置回Request对象并返回
* </p>
* @param element
* 类似:<Request><Param><Name><![CDATA[resourceId]]></Name><Value><![CDATA[2]]></Value></Param></Request>
* @param request
* @return
*/
public static RewriteableHttpServletRequest decode(Element element, HttpServletRequest request) {
HttpServletRequest httpRequest = (HttpServletRequest) request;
RewriteableHttpServletRequest req = RewriteableHttpServletRequestWrapper.getRewriteableHttpServletRequest(httpRequest);
// 输出请求(request)的详细信息:请求数据流
log.debug("---------------------------- Request ----------------------------");
log.debug("AppCode:" + Config.getAttribute(Config.APPLICATION_CODE));
log.debug("Request:" + req.getContextPath() + req.getServletPath());
log.debug("Thread:" + Thread.currentThread().getName());
log.debug("Content:");
log.debug(element.asXML());
log.debug("---------------------------- End of Request ----------------------------");
try {
//解析Document对象,将相应的值置入Request对象中
List<Element> paramNodes = XMLDocUtil.selectNodes(element, "Param");
if (paramNodes != null) {
for (Element paramNode : paramNodes) {
Node nameNode = paramNode.selectSingleNode("Name");
Node valueNode = paramNode.selectSingleNode("Value");
if (nameNode != null && valueNode != null) {
String name = nameNode.getText();
String value = valueNode.getText();
value = value.replaceAll("<!\\[CDATA\\[", "<![CDATA[").replaceAll("\\]\\]>", "]]>");
req.addParameter(name, value);
}
}
}
} catch (RuntimeException e) {
throw new BusinessException("解析请求xml数据流失败", e);
}
return req;
}
}