解析xml(通讯接口)

                             解析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;

         }

 

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值