服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

provision接口

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 ,
       [fee_msisdn] [varchar] (50) collate chinese_prc_ci_as null ,
       [fee_pseudocode] [varchar] (50) collate chinese_prc_ci_as null ,
       [dest_useridtype] [varchar] (50) collate chinese_prc_ci_as null ,
       [dest_msisdn] [varchar] (50) collate chinese_prc_ci_as null ,
       [dest_pseudocode] [varchar] (50) collate chinese_prc_ci_as null ,
       [dtime] [varchar] (50) collate chinese_prc_ci_as null
)

其中再创建两张结构相同的表 这三张分别是allreceive 存放所有provision request数据

relation 当前已经存在的订阅关系 pause 当前已暂停的订阅关系

create table [dbo].[allsend] (
       [id] [int] identity (1, 1) not null ,
       [transactionid] [varchar] (50) collate chinese_prc_ci_as null ,
       [hret] [varchar] (50) collate chinese_prc_ci_as null ,
       [dtime] [varchar] (50) collate chinese_prc_ci_as null
)

这个表存放所有的返回状态代码

 


 

 

 


//该部分代码基本上满足要求,可以不作改动;
//sp收到同步请求包后,对订购请求做相应的订购关系处理,并返回订购关系同步应答syncorderrelationresp
//misc收到应答包后,根据返回结果是否正确,在系统中生成正式的订购关系或者取消订购关系,并由1862系统给用户下发订购成功或取消成功的提醒消息
//syncorderrelationresp消息字段描述:
//字段名 重要性 类型 说明
//msgtype 必须 string 消息类型
//transactionid 必须 string 该消息编号
//version 必须 string 该接口消息的版本号,本次所有的接口消息的版本都为“1.5.0”
//hret 必须 integer 返回值,主要错误如下:
//0:成功
//4007: misc 同步开通服务,但sp 端已存在订购关系,且状态为开通
//4008: misc 同步开通服务,且sp 端不存在订购关系,但开通服务失败
//4010: misc 同步停止服务, 且sp 端存在订购关系, 但取消服务失败
//4011: misc 同步停

扫描关注微信公众号