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 ,
- 上一篇:浅析数据源在JDBC中的应用[组图]
- 下一篇:J2ME程序开发全方位基础讲解汇总