解析xml(通讯接口)
项目中用到过的,方面以后看,留着~·
// servlet
package com.yhjoy.shuikatong.servlet;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.yhjoy.shuikatong.services.util.XmlUtil;
/**
*登录Servlet
*@authorwangjiaoe
*
*/
publicclassLoginServlet extends HttpServlet{
/* (non-Javadoc)
* @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
protectedvoid doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doPost(req, resp);
}
/* (non-Javadoc)
* @see javax.servlet.http.HttpServlet#doPost(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
protectedvoid doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
resp.setCharacterEncoding("UTF-8");
//获取流
InputStream in = req.getInputStream();
String lanLng="";
BufferedReader breader = new BufferedReader(
new InputStreamReader(in,"utf8"));
String currentLine;
while ((currentLine = breader.readLine()) !=null) {
lanLng += currentLine;
}
//解析
String loginStr = XmlUtil.loginXml(lanLng);
//返回
PrintWriter out = resp.getWriter();
out.print(loginStr);
}
}
//业务(需要导入dom4j.jar包)
package com.yhjoy.shuikatong.services.util;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import com.yhjoy.shuikatong.beens.Terminal;
import com.yhjoy.shuikatong.beens.Terminalstatus;
import com.yhjoy.shuikatong.sysdata.SysDataList;
/**
* 登录、状态、参数配置业务逻辑
* @author wangjiaoe
*
*/
public class XmlUtil{
/**
* 参数配置
* @param fileName
* @return
*/
public static String paramXml(String fileName){
//解析xml字符串
Map<String, String> paramMap = parserXmlStr(fileName);
//xml路径
String path = Thread.currentThread().getContextClassLoader().getResource("param.xml").getPath();
path = path.replaceAll("%20"," ");
File inputXml=new File(path);
SAXReader saxReader = new SAXReader();
Document document = null;
try {
document = saxReader.read(inputXml);
} catch (DocumentException e) {
e.printStackTrace();
}
return document.asXML();
}
/**
* 状态
* @param fileName
* @return
*/
public static String statesXml(String fileName){
//解析xml字符串
Map<String, String> statesMap = parserXmlStr(fileName);
String terminal = statesMap.get("terminal");
String printerstatus = statesMap.get("printerstatus");
String displaystatus = statesMap.get("displaystatus");
String keyboardstatus = statesMap.get("keyboardstatus");
String commstatus = statesMap.get("commstatus");
String stime = getDate();
try {
//判断是否有此设备
boolean flag = SysDataList.terminalMap.containsKey(terminal);
if(flag){
//判断是否为null,存入map,返回xml
if(terminal!=null && printerstatus!=null && displaystatus!=null && keyboardstatus!=null && commstatus!=null){
Terminalstatus terminalstatus = new Terminalstatus();
terminalstatus.setTer_TerminalId(terminal);
terminalstatus.setPrinterstatus(Integer.parseInt(printerstatus));
terminalstatus.setDisplaystatus(Integer.parseInt(displaystatus));
terminalstatus.setKeyboardstatus(Integer.parseInt(keyboardstatus));
terminalstatus.setCommstatus(Integer.parseInt(commstatus));
SysDataList.terminalstatus.put(terminal+"_"+stime, terminalstatus);
//生成xml
return createStateXml("1");
}else{
// return "1";//参数错误
return createStateXml("0");
}
}else{
return createStateXml("0");//不存在此设备
}
} catch (Exception e) {
return createStateXml("0");
}
}
/**
* 登录
* @param fileName
* @return
*/
public static String loginXml(String fileName){
//登录状态
String loginstate = "";
//密钥
String ukey = "";
//解析xml字符串
Map<String, String> loginMap = parserXmlStr(fileName);
String terminal = loginMap.get("terminal");
if(terminal!=null){
//判断是否在设备表中存在
boolean flag = SysDataList.terminalMap.containsKey(terminal);
if(flag){
Terminal term = SysDataList.terminalMap.get(terminal);
if(term!=null){
String stockState = term.getStockState();
if(stockState.equals("0")){//0表示未出库,1表示出库,
loginstate = "2";
}else if(stockState.equals("1")){
loginstate = "1";
}
if(term.getDeskey()!=null){
ukey = term.getDeskey();
}
}
}else{
//不存在
loginstate = "0";
}
//生成xml
return createLogXml(loginstate,ukey);
}else{
return null;
}
}
/**
* 获取当前时间
* @return
*/
public static String getDate(){
SimpleDateFormat sformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String stime = sformat.format(new Date());
return stime;
}
/**
* 创建状态xml
* @param sidStr
* @param loginstateStr
* @param ukeyStr
* @param hashStr
* @return
*/
public static String createStateXml(String resultStr) {
Document document = DocumentHelper.createDocument();
//第一级
Element root=document.addElement("root");
//第二级
Element body=root.addElement("body");
//第三级
Element result=body.addElement("result");
result.setText(resultStr);
return document.asXML();
}
/**
* 创建登录xml
* @param loginstateStr
* @param ukeyStr
* @return
*/
public static String createLogXml(String loginstateStr,String ukeyStr) {
Document document = DocumentHelper.createDocument();
//第一级
Element root=document.addElement("root");
//第二级
Element body=root.addElement("body");
//第三级
Element loginstate=body.addElement("loginstate");
loginstate.setText(loginstateStr);
Element ukey=body.addElement("ukey");
ukey.setText(ukeyStr);
return document.asXML();
}
/**
* 解析 xml字符串
* @param XmlStr
*/
public static Map<String, String> parserXmlStr(String XmlStr){
Map<String, String> loginMap = new HashMap<String, String>();
try {
Document document = DocumentHelper.parseText(XmlStr); //将字符串转为XML
Element root=document.getRootElement();
for(Iterator i = root.elementIterator(); i.hasNext();){
Element head = (Element) i.next();
if(head.elements().size()==0){
loginMap.put(head.getName(), head.getText());
}else{
for(Iterator j = head.elementIterator(); j.hasNext();){
Element node=(Element) j.next();
if(node.elements().size()==0){
loginMap.put(node.getName(), node.getText());
}else{
for(Iterator k = node.elementIterator(); k.hasNext();){
Element noden=(Element) k.next();
loginMap.put(noden.getName(), noden.getText());
}
}
}
}
}
} catch (DocumentException e) {
System.out.println(e.getMessage());
}
return loginMap;
}
}
//测试servlet接口test类
package com.yhjoy.shuikatong.test;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String url = "http://192.168.1.150:8080/shuikatong/login";
String source = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><root><body><terminal>22222</terminal><!--设备标识号 --></body></root>";
sendGet(url,source,"d:/","sp");
// String url = "http://192.168.1.150:8080/shuikatong/state";
// String source = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><root><body><terminal>22222</terminal>" +
// "<!--设备标识号 --><statuslist><printerstatus>1</printerstatus><!--打印机状态:0标识不正常,1标识正常 -->" +
// "<displaystatus>1</displaystatus><!--显示屏状态:0标识不正常,1标识正常 --><keyboardstatus>1</keyboardstatus>" +
// "<!--键盘状态:0标识不正常,1标识正常 --><commstatus>1</commstatus>" +
// "<!--通讯模块状态:0标识不正常,1标识正常 --></statuslist></body></root>";
// sendGet(url,source,"d:/","sp");
// String url = "http://192.168.1.150:8080/shuikatong/param";
// String source = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><root><body><terminal>22222</terminal>" +
// "</body></root>";
// sendGet(url,source,"d:/","sp");
}
public static boolean sendGet(String url, String param,String filePath,String fileNameType) {
String result = "";
try {
String urlName = url;
URL u = new URL(urlName);
HttpURLConnection conn = (HttpURLConnection) u.openConnection();
conn.setDoOutput(true);
conn.connect();
OutputStream out = conn.getOutputStream();
out.write(param.getBytes());
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream(),"utf-8"));
String line;
while ((line = in.readLine()) != null) {
result += line;
}
in.close();
File file = new File(filePath+"/"+fileNameType+".xml");
FileOutputStream fos = new FileOutputStream(file);
fos.write(result.getBytes("utf-8"));
} catch (Exception e) {
System.out.println("没有结果!" + e);
e.printStackTrace();
return false;
}
return true;
}
}