龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > JAVA开发 >

provision接口

时间:2009-12-23 15:42来源:未知 作者:admin 点击:
分享到:
provision接口 作者:Mouse 时间:06-02-05 16:17 附件: 用Java写的,不知道你能用上不能. 这是主要的类,需要的类,都是一些工具方法,你自己写吧,主要是对soap包进行解析的. package com.cellcom.wap.fala.

  provision接口  作者:Mouse  时间:06-02-05 16:17 
  附件: 
  用Java写的,不知道你能用上不能.
  这是主要的类,需要的类,都是一些工具方法,你自己写吧,主要是对soap包进行解析的.

  package com.cellcom.wap.fala.common ;

  import java.io.BufferedReader ;
  import java.io.IOException ;
  import java.io.PrintWriter ;

  import javax.servlet.ServletException ;
  import javax.servlet.http.HttpServlet ;
  import javax.servlet.http.HttpServletRequest ;
  import javax.servlet.http.HttpServletResponse ;
  import javax.XML.parsers.DocumentBuilder ;

  import javax.xml.parsers.DocumentBuilderFactory ;
  import javax.xml.parsers.FactoryConfigurationError ;
  import javax.xml.parsers.ParserConfigurationException ;

  import org.w3c.dom.Document ;
  import org.xml.sax.InputSource ;
  import org.xml.sax.SAXException ;

  import com.cellcom.common.wap.mobile.misc.DOMParsing ;
  import com.cellcom.common.wap.mobile.misc.DSMPServiceProv ;
  import com.cellcom.common.wap.mobile.misc.SyncOrderRelationResp ;
  import com.cellcom.common.wap.mobile.misc.UnSubscribeServiceResp ;
  import com.cellcom.common.wap.mobile.misc.ProvTransInterface ;

  
  /**
  *
  Title: wap.fala.cn

  
  *
  Description: 接收

  
  *
  Copyright: Copyright (c) 2005

  
  *
  Company: www.cellcom.com.cn

  
  * @author cabin
  * @version 1.0
  */

  public class Provision
     extends HttpServlet {
    public Provision() {
    }
    private static final String CONTENT_TYPE = "text/xml" ;
    public void service(HttpServletRequest request, HttpServletResponse response)
        throws
        ServletException, IOException {
       response.setContentType(CONTENT_TYPE) ;
       DSMPServiceProv prov = this.parseReq(request) ;
       if (prov != null) {
          this.logAndSync(prov);
          this.respReq(response,prov,0);
       }
    }
    /**
     * 将请求的SOAP包进行解析封装
     * @param request
     * @return
     */
    private DSMPServiceProv parseReq(HttpServletRequest request) {
       DSMPServiceProv prov = null ;
       Document doc = null ;

       try {
          BufferedReader br = request.getReader() ;
          DocumentBuilderFactory factory = DocumentBuilderFactory
              .newInstance() ;
          DocumentBuilder builder = factory.newDocumentBuilder() ;
  
           doc = builder.parse(new InputSource(br)) ;
          DOMParsing.printNode(doc, "  ") ;
          doc.normalize() ;
          //对包进行解析,得到相应的包的内容PROV
          prov = DSMPServiceProv.ParseSoapXml(doc) ;
       }
       catch (SAXException ex) {
          System.out.println("## error SAXException:"+ex.toString());
       }
       catch (ParserConfigurationException ex) {
          System.out.println("## error ParserConfigurationException:"+ex.toString());
       }
       catch (FactoryConfigurationError ex) {
          System.out.println("## error FactoryConfigurationError:"+ex.toString());
       }
       catch (IOException ex) {
          System.out.println("## error IOException:"+ex.toString());
       }
       return prov;
    }
    public void logAndSync(DSMPServiceProv prov){
          //业务处理
          // 状态治理命令结果 errState : 0 命令成功; -1 无效的action_id;-2 无效的service_id
          //(其它任何非0值) 命令失败;
          //action : 1 开通; 2 停止; 3 激活 4 暂停
          ProvTransInterface provtrans = new ProvTransHandler() ;
          provtrans.logProvTrans(prov) ;
          provtrans.SyncProv(prov) ;
    }
    public void respReq(HttpServletResponse response,DSMPServiceProv prov,int errState){
       String sb = null ;
       PrintWriter out = null ;
       try {
          out = response.getWriter() ;
       }
       catch (IOException ex) {
          System.out.println(ex.toString());
       }

       if ("SyncOrderRelationReq".equals(prov.getMsgType())) {
          sb =
              SyncOrderRelationResp.getResp(errState, prov.getTransactionID()) ;
       }
       else if ("UnSubscribeServiceReq".equals(prov.getMsgType())) {
          sb =
              UnSubscribeServiceResp.getResp(errState, prov.getTransactionID()) ;
  
        }
       out.print(sb.toString()) ;
       out.flush() ;
       out.close() ;
    }
  }

  
   

       
  标题: Re:provision接口  作者:Mouse  时间:06-02-05 16:18 
  附件: 
  移动WAP同步关系provision接口的实现
  前阵做的小WAP项目  写的东西也挺烂的 功能就不说了 做WAP的都明白

  公布出完成的PROVISION接口代码和数据表格式

  package com.wap.provision;

  import java.io.IOException;
  import java.io.PrintWriter;
  import java.sql.Connection;

  import javax.servlet.ServletException;
  import javax.servlet.ServletInputStream;
  import javax.servlet.http.HttpServletRequest;
  import javax.servlet.http.HttpServletResponse;

  import data.DTime;

  
  public class Provision extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet
  {
         protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
         {

                 doPost(request, response);
         }

         protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
         {

                 Connection con;

                 con = (Connection)this.getServletContext().getAttribute("con");//从容器里里获得数据库连接
                
                 DTime dtime = new DTime();//获取当前时间

                 System.out.println("Provision start at " + dtime.getDTime());

                 ServletInputStream in = request.getInputStream();//得到InputStream

                 PrintWriter out = response.getWriter();//得到Writer

                 Anatomy tempAnatomy = new Anatomy(in, out, con);//将数据流放入解析器

                 System.out.println("data input Anatmomy");

         }
  } 

   

  
  --------------------------------------------------------------------------------

  
  package com.wap.provision;

  import java.io.PrintWriter;
  import java.sql.Connection;
  import java.sql.SQLException;

  import javax.servlet.ServletInputStream;
  
   import javax.xml.parsers.DocumentBuilderFactory;

  import org.w3c.dom.Document;

  import data.DTime;
  import data.DataBean;

  public class Anatomy
  {
         private String TransactionID = "";// 该消息编号

         private String MsgType = "";// 消息类型

         private String LinkID = "";// 临时订购关系的事务ID

         private String Version = "";// 该接口消息的版本号

         private String ActionID = "";// 服务状态治理动作代码

         private String ActionReasonID = "";// 产生服务状态治理动作原因的代码

         private String SPID = "";// 企业代码

         private String SPServiceID = "";// 服务代码

         private String AccessMode = "";// 访问模式

         private String FeatureStr = "";// 服务订购参数

         private String Send_DeviceType = "";// 发送方地址

         private String Send_DeviceID = "";

         private String Dest_DeviceType = "";// 接收方地址

         private String Dest_DeviceID = "";

         private String Fee_UserIDType = "";// 计费用户标识

         private String Fee_MSISDN = "";

         private String Fee_PseudoCode = "";// 记费用户MID

         private String Dest_UserIDType = "";

         private String Dest_MSISDN = "";

         private String Dest_PseudoCode = "";

         private String hRet = "";// 返回值

         private ServletInputStream in;

         private PrintWriter out;

         private Document document;

         private Connection con;

         private String[][] relation;//已存在的订购关系

         private String[][] pause;//已经暂停的订购关系

         String delete_Sql_Relation;

         String delete_Sql_Pause;

         String relation_sql;

         String pause_sql;

         public Anatomy(ServletInputStream In, PrintWriter Out, Connection con)
         {

                 try
  
                  {
                         this.in = In;

                         this.out = Out;

                         this.con = con;

                         this.document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(this.in);

                         getReqInfo();// 将各个字段付值

                         if (Fee_UserIDType.equals("1"))// Fee_UserIDType为1用MID,2为违代码
                         {
                                 relation_sql = "select * from Relation where SPServiceID = '" + SPServiceID + "' and Fee_MSISDN ='" + Fee_MSISDN + "'";

                                 pause_sql = "select * from Pause where SPServiceID = '" + SPServiceID + "' and Fee_MSISDN ='" + Fee_MSISDN + "'";

                                 delete_Sql_Relation = "DELETE FROM Relation WHERE SPServiceID = '" + SPServiceID + "' and Fee_MSISDN ='" + Fee_MSISDN + "'";

                                 delete_Sql_Pause = "DELETE FROM Pause WHERE SPServiceID = '" + SPServiceID + "' and Fee_MSISDN ='" + Fee_MSISDN + "'";

                         }
                         else
                         {
                                 relation_sql = "select * from Relation where SPServiceID = '" + SPServiceID + "' and Fee_PseudoCode ='" + Fee_PseudoCode + "'";

                                 pause_sql = "select * from Pause where SPServiceID = '" + SPServiceID + "' and Fee_PseudoCode ='" + Fee_PseudoCode + "'";

                                 delete_Sql_Relation = "DELETE FROM Relation WHERE SPServiceID = '" + SPServiceID + "' and Fee_PseudoCode ='" + Fee_PseudoCode + "'";

                                 delete_Sql_Pause = "DELETE FROM Pause WHERE SPServiceID = '" + SPServiceID + "' and Fee_PseudoCode ='" + Fee_PseudoCode + "'";

                         }

                         relation = DataBean.getResultToArray(con, relation_sql);//得到当前的一该业务已订购的关系

                         System.out.print("Reveice ");

                         String[] InfoArray = this.getInfoArray();//将字段组合成数组

                         DataBean.InsertTable(con, "AllReceive", InfoArray);// 插入同步数据库做记录

                         System.out.println();

                         this.sendBack(this.getHRet());//返回状态值

                 }
  
                  catch (Exception e)
                 {
                         this.sendBack("1");// 未知错误

                         e.printStackTrace();
                 }

         }

         private void getReqInfo()// 将各字段付值
         {

                 TransactionID = getNodeValue("TransactionID", 0);

                 MsgType = getNodeValue("MsgType", 0);

                 LinkID = getNodeValue("LinkID", 0);

                 Version = getNodeValue("Version", 0);

                 ActionID = getNodeValue("ActionID", 0);

                 ActionReasonID = getNodeValue("ActionReasonID", 0);

                 SPID = getNodeValue("SPID", 0);

                 SPServiceID = getNodeValue("SPServiceID", 0);

                 AccessMode = getNodeValue("AccessMode", 0);

                 FeatureStr = getNodeValue("FeatureStr", 0);

                 Send_DeviceType = getNodeValue("DeviceType", 0);

                 Send_DeviceID = getNodeValue("DeviceID", 0);

                 Dest_DeviceType = getNodeValue("DeviceType", 1);

                 Dest_DeviceID = getNodeValue("DeviceID", 1);

                 Fee_UserIDType = getNodeValue("UserIDType", 0);

                 Fee_MSISDN = getNodeValue("MSISDN", 0);

                 Fee_PseudoCode = getNodeValue("PseudoCode", 0);

                 Dest_UserIDType = getNodeValue("UserIDType", 1);

                 Dest_MSISDN = getNodeValue("MSISDN", 1);

                 Dest_PseudoCode = getNodeValue("PseudoCode", 1);

         }

         private String getNodeValue(String TagName, int index)
  
          {

                 if (document.getElementsByTagName(TagName) != null && document.getElementsByTagName(TagName).item(index) != null && document.getElementsByTagName(TagName).item(index).getFirstChild() != null)
                 {
                         String value = document.getElementsByTagName(TagName).item(index).getFirstChild().getNodeValue();

                         System.out.print(" " + TagName + " = " + value);

                         return value;
                 }
                 else
                 {
                         System.out.print(" " + TagName + " = null");

                         return "";
                 }
         }

         private String getHRet()
         {

                 try
                 {

                         if (!MsgType.equalsIgnoreCase("SyncOrderRelationReq"))
                         {
                                 return "4000";// 无效的MsgType
                         }
                         else if ((Integer.parseInt(ActionReasonID) > 4) (Integer.parseInt(ActionReasonID) < 1))
                         {
  
                                  return "4002";// 无效的ActionReasonID
                         }
                         else if ((Integer.parseInt(AccessMode) > 3) (Integer.parseInt(AccessMode) < 1))
                         {
                                 return "4006";// 无效的AccessMode
                         }
                         else if ((Fee_MSISDN == null) && (Fee_PseudoCode == null))
                         {
                                 return "1";
                         }

                         int id = Integer.parseInt(ActionID);

                         switch (id)
                         // relation==null 该消息在关系表无记录 pause==null
                         // 该消息在暂停表无记录
                         {
                         case 1:
                         {
                                 if (relation == null)
  
                                  {
                                         String[] InfoArray = this.getInfoArray();// 订购成功
                                         // 插入关系表

                                         DataBean.InsertTable(con, "Relation", InfoArray);// 插入同步数据库做记录

                                         return "0";
                                 }
                                 else
                                 {
                                         return "4007";// Misc同步开通服务,但sp端以存在订购关系,且状态为开通
                                 }
                         }
                         case 2:
                         {
                                 if (relation == null)
                                 {
  
                                          return "4011";// Misc同步停止服务,但sp端不存在订购关系
                                 }
                                 else if (relation != null)
                                 {
                                         DataBean.deleteRow(con, delete_Sql_Relation);

                                         return "0";
                                 }
                                 else
                                         return "1";
                         }
                         case 3:
                         {
                                 pause = DataBean.getResultToArray(con, pause_sql);

                                 if ((relation == null) && (pause == null))
                                 {
  
                                          return "4016";// Misc平台激活服务,但SP端不存在订购关系
                                 }
                                 else if ((relation != null) && (pause == null))
                                 {
                                         return "4015";// Misc平台激活服务,但SP端已存在订购关系,切状态为开通
                                 }
                                 else if (pause != null)
                                 {
                                         DataBean.InsertTable(con, "Relation", pause[0]);

                                         DataBean.deleteRow(con, delete_Sql_Pause);

                                         return "0";// 成功
                                 }
                                 else
                                         return "1";

                         }
  
                          case 4:
                         {
                                 pause = DataBean.getResultToArray(con, pause_sql);

                                 if ((relation == null) && (pause == null))
                                 {
                                         return "4013";// Misc平台暂停服务,但SP端不存在订购关系
                                 }
                                 else if (pause != null)
                                 {
                                         return "4014";// Misc平台暂停服务,但SP端存在订购关系,//切状态为暂停
                                 }
                                 else if ((relation != null) && (pause == null))
                                 {
                                         DataBean.InsertTable(con, "Pause", relation[0]);

                                         DataBean.deleteRow(con, delete_Sql_Relation);

                                         return "0";
  
                                  }
                                 else
                                         return "1";

                         }
                         default:
                         {
                                 return "4001";
                         }
                         }
                 }
                 catch (SQLException e)
                 {
                         return "1";// 未知错误
                 }

         }

         private void sendBack(String hRet)
         {

                 out.println("");
                 out.println("");
                 out.println("");
                 out.println("" + TransactionID + "");
                 out.println("");
                 out.println("");
                 out.println("");
                 out.println("1.5.0");
  
                  out.println("SyncOrderRelationResp");
                 out.println("" + hRet + "");
                 out.println("");
                 out.println("");
                 out.println("");

                 String[] sendInfo =
                 { TransactionID, hRet, new DTime().getDTime() };

                 System.out.println("Send TransactionID = " + TransactionID + " hRet = " + hRet);

                 DataBean.InsertTable(con, "AllSend", sendInfo);// 将发送数据插入发送记录表

                 out.close();
         }

         private String[] getInfoArray()
         {

                 String[] InfoArray =
                 { TransactionID, MsgType, LinkID, Version, ActionID, ActionReasonID, SPID, SPServiceID, AccessMode, FeatureStr, Send_DeviceType, Send_DeviceID, Dest_DeviceType, Dest_DeviceID, Fee_UserIDType, Fee_MSISDN, Fee_PseudoCode, Dest_UserIDType, Dest_MSISDN, Dest_PseudoCode, new DTime().getDTime() };

                 return InfoArray;

         }

  }

   

  --------------------------------------------------------------------------------

  里面涉及的一数据库操作的类

  
  package data;

  import java.sql.Connection;
  import java.sql.DriverManager;
  import java.sql.ResultSet;
  import java.sql.ResultSetMetaData;
  import java.sql.SQLException;
  import java.sql.Statement;

  import java.util.Enumeration;
  import java.util.Hashtable;

  public class DataBean
  {
        
  // 将数组按单元插入数据库 返回插入行数
         public static int InsertTable(Connection conn, String tableName, String[] rows)
         {

                 try
                 {
                         Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);

                         StringBuffer row = new StringBuffer();

                         int i;

                         for (i = 0; i < rows.length - 1; i++)
  
                          {
                                 row.append("'" + rows[i] + "'" + ",");
                         }

                         row.append("'" + rows[i] + "'");

                         String sql = "INSERT INTO " + tableName + " VALUES (" + new String(row) + ")";

                         int rowcount = stmt.executeUpdate(sql);

                         stmt.close();

                         return rowcount;

                 }
                 catch (SQLException e)
                 {

                         System.out.println("Insert Table " + tableName + " Error");

                         e.printStackTrace();

                         return -1;
                 }
         }

         // 按条件删除 返回删除的行数
         public static int deleteRow(Connection conn, String sql)
         {

                 try
                 {
                         Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);

                         //stmt.execute(sql);

                         int rows = stmt.executeUpdate(sql);
  
                         
                         stmt.close();
                        
                         return rows;

                 }
                 catch (SQLException e)
                 {
                        
                         System.out.println("delete sql = " + sql + " ERROR");

                         e.printStackTrace();
                        
                         return -1;
                 }
         }

         // 给定sql返回2唯数组结果
         public static String[][] getResultToArray(Connection conn, String sql) throws SQLException
         {

                 Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);

                 ResultSet rs = stmt.executeQuery(sql);

                 if (DataBean.getRowCounts(rs) == 0)
                         return null;

                 ResultSetMetaData rsmd = rs.getMetaData();

                 int rows = DataBean.getRowCounts(rs);

                 String[][] Information = new String[rows][rsmd.getColumnCount() - 1];

                 while (rs.next())
  
                  {

                         if (rs.getRow() > rows)
                                 break;
                         for (int j = 0; j < rsmd.getColumnCount() - 1; j++)
                         {
                                 Information[rs.getRow() - 1][j] = rs.getString(j + 2);// 我的数据表都有自动增长的ID 做主键 我不取它 getString从1开始取,第1字段为ID号,故+2
                         }
                 }

                 rs.close();

                 stmt.close();

                 return Information;

         }

        
         public static int getRowCounts(ResultSet rs)
         {

                 int counts = 0;

                 try
                 {
                         while (rs.next())
                         {
                                 counts++;
                         }

                         rs.beforeFirst();

                         return counts;

                 }
  
                  catch (Exception e)
                 {
                         System.out.println("getRowCounts ERROR");

                         e.printStackTrace();

                         return -1;
                 }

         }
          public static Connection getConnection(String dbname, String user, String passWord) throws SQLException, Exception
         {

                 Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
  //我用的MS SQL
                 String url = "jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=" + dbname;

                 Connection conn = DriverManager.getConnection(url, user, password);

                 return conn;

         }

  
  } 

   

  --------------------------------------------------------------------------------

  数据库库中的表结构
  CREATE TABLE [dbo].[AllReceive] (
         [ID] [int] IDENTITY (1, 1) NOT NULL ,
         [TransactionID] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
         [MsgType] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
         [LinkID] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
         [Version] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
         [ActionID] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
         [ActionReasonID] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
         [SPID] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
         [SPServiceID] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
         [AccessMode] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
  
          [FeatureStr] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
         [Send_DeviceType] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
         [Send_DeviceID] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
         [Dest_DeviceType] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
         [Dest_DeviceID] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
         [Fee_UserIDType] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
        

精彩图集

赞助商链接