下载jdom www.jdom.org
// import "java.io.*,org.jdom.*,org.jdom.input.*,org.jdom.output.*"
// System.out.println("Start received ! ");
SAXBuilder sb = new SAXBuilder();
String indent = " " ;
boolean newLines = false ;
XMLOutputter outp = new XMLOutputter(indent,newLines, " UTF-8 " );
String error = "" ;
String cfgErrXml = " responseError.xml " ;
boolean isSaveOK = false ;
int UserID = - 1 ;
int Status = 0 ;
// xml data
String MDN = "" ;
String SPCode = "" ;
String ProductCode = "" ;
String TransactionID = "" ;
String EffectiveDate = "" ;
Document doc = null ;
String errorNum = "" ;
String errorDes = "" ;
String xmlResFile = " provisionUNI.error.xml " ;
xmlResFile = cfgProvisionPath + File.separator + xmlResFile;
boolean isOk = false ;
wsDate wsd = new wsDate();
// add log
StringBuffer b = new StringBuffer();
b.append( " ---WS Start received data " + request.getRemoteAddr() + " " + wsd.now() + " ---- " );
b.append(request.getRequestURI() + " ? " + request.getQueryString() + "" );
// end add log
InputStream in = request.getInputStream();
try ... {
int c = -1;
b.append("--#RAW DATA Received Start--");
StringBuffer rawsb = new StringBuffer();
while((c = in.read())!= -1)...{
rawsb.append((char)c);
}
String rawTmpfile = "";
rawTmpfile = cfgProvisionPath + File.separator + "rawtmp.txt";
FileOutputStream o = new FileOutputStream(rawTmpfile);
o.write((rawsb.toString()).getBytes(), 0 , rawsb.length());
o.close();
in.close();
b.append(rawsb.toString());
b.append("--#RAW DATA Received End--");
FileInputStream rawIn = new FileInputStream(rawTmpfile);
doc = sb.build(rawIn);
rawIn.close();
rawsb = null;
} catch (org.jdom.JDOMException jdoer) ... {
d(jdoer.toString());
} catch (java.io.IOException ioer) ... {
d(ioer.toString());
} catch (java.lang.Exception ler) ... {
d(ler.toString());
}
if (doc == null ) ... {
errorNum = "-1";
errorDes = "REQUEST ILL XML FILE EXCEPTION";
isOk = false;
} else ... {
//load(doc);
d("doc loaded ");
Element root = doc.getRootElement();
java.util.List U_MAXs = root.getChildren();
Element deck = (Element)U_MAXs.get(0);
String deckName = deck.getName();
deckName += "";
String fldActiveTime = "";
if(deckName.equals("PreSubscriptionNotify") )...{
Status = 2;//order
fldActiveTime = "EffectiveDate";
}else if (deckName.equals("SubscriptionCancel"))...{
Status = 3;//cancel
fldActiveTime = "ExpireDate";
}else...{
Status = -1;//error
}
try...{
MDN = ((Element)deck.getChild("MDN")).getValue();
SPCode =((Element)deck.getChild("SPCode")).getValue();
ProductCode =((Element)deck.getChild("ProductCode")).getValue();
TransactionID =((Element)deck.getChild("TransactionID")).getValue();
EffectiveDate =((Element)deck.getChild(fldActiveTime)).getValue();
deck.removeChild(fldActiveTime);
//((Element)deck.getChild("MDN")).setText("13049303775");
}catch(java.lang.NullPointerException ne)...{
d("load:" + ne.toString());
}catch(java.lang.Exception e)...{
d("load:" + e.toString());
}
b.append(" DATA PARSED ");
b.append(" MDN:"+MDN).append(" SPCode:"+SPCode);
b.append(" ProductCode:"+ProductCode);
b.append(" TransactionID:" +TransactionID);
b.append(" Satus:" +Status);
b.append(" EffectiveDate:" +EffectiveDate);
b.append("");
....
}
// import "java.io.*,org.jdom.*,org.jdom.input.*,org.jdom.output.*"
// System.out.println("Start received ! ");
SAXBuilder sb = new SAXBuilder();
String indent = " " ;
boolean newLines = false ;
XMLOutputter outp = new XMLOutputter(indent,newLines, " UTF-8 " );
String error = "" ;
String cfgErrXml = " responseError.xml " ;
boolean isSaveOK = false ;
int UserID = - 1 ;
int Status = 0 ;
// xml data
String MDN = "" ;
String SPCode = "" ;
String ProductCode = "" ;
String TransactionID = "" ;
String EffectiveDate = "" ;
Document doc = null ;
String errorNum = "" ;
String errorDes = "" ;
String xmlResFile = " provisionUNI.error.xml " ;
xmlResFile = cfgProvisionPath + File.separator + xmlResFile;
boolean isOk = false ;
wsDate wsd = new wsDate();
// add log
StringBuffer b = new StringBuffer();
b.append( " ---WS Start received data " + request.getRemoteAddr() + " " + wsd.now() + " ---- " );
b.append(request.getRequestURI() + " ? " + request.getQueryString() + "" );
// end add log
InputStream in = request.getInputStream();
try ... {
int c = -1;
b.append("--#RAW DATA Received Start--");
StringBuffer rawsb = new StringBuffer();
while((c = in.read())!= -1)...{
rawsb.append((char)c);
}
String rawTmpfile = "";
rawTmpfile = cfgProvisionPath + File.separator + "rawtmp.txt";
FileOutputStream o = new FileOutputStream(rawTmpfile);
o.write((rawsb.toString()).getBytes(), 0 , rawsb.length());
o.close();
in.close();
b.append(rawsb.toString());
b.append("--#RAW DATA Received End--");
FileInputStream rawIn = new FileInputStream(rawTmpfile);
doc = sb.build(rawIn);
rawIn.close();
rawsb = null;
} catch (org.jdom.JDOMException jdoer) ... {
d(jdoer.toString());
} catch (java.io.IOException ioer) ... {
d(ioer.toString());
} catch (java.lang.Exception ler) ... {
d(ler.toString());
}
if (doc == null ) ... {
errorNum = "-1";
errorDes = "REQUEST ILL XML FILE EXCEPTION";
isOk = false;
} else ... {
//load(doc);
d("doc loaded ");
Element root = doc.getRootElement();
java.util.List U_MAXs = root.getChildren();
Element deck = (Element)U_MAXs.get(0);
String deckName = deck.getName();
deckName += "";
String fldActiveTime = "";
if(deckName.equals("PreSubscriptionNotify") )...{
Status = 2;//order
fldActiveTime = "EffectiveDate";
}else if (deckName.equals("SubscriptionCancel"))...{
Status = 3;//cancel
fldActiveTime = "ExpireDate";
}else...{
Status = -1;//error
}
try...{
MDN = ((Element)deck.getChild("MDN")).getValue();
SPCode =((Element)deck.getChild("SPCode")).getValue();
ProductCode =((Element)deck.getChild("ProductCode")).getValue();
TransactionID =((Element)deck.getChild("TransactionID")).getValue();
EffectiveDate =((Element)deck.getChild(fldActiveTime)).getValue();
deck.removeChild(fldActiveTime);
//((Element)deck.getChild("MDN")).setText("13049303775");
}catch(java.lang.NullPointerException ne)...{
d("load:" + ne.toString());
}catch(java.lang.Exception e)...{
d("load:" + e.toString());
}
b.append(" DATA PARSED ");
b.append(" MDN:"+MDN).append(" SPCode:"+SPCode);
b.append(" ProductCode:"+ProductCode);
b.append(" TransactionID:" +TransactionID);
b.append(" Satus:" +Status);
b.append(" EffectiveDate:" +EffectiveDate);
b.append("");
....
}
将xml数据包发送回去
if (isOk) ... {
//p.uniResponse();
try...{
outp.output(doc, out);
b.append(" RESPONSE");
b.append(outp.outputString(doc));
}catch( java.io.IOException ioe)...{
d(ioe.toString());
}
//outp.output(doc, System.out);
} else ... {
//p.setErrorXmlFile(xmlResFile);
cfgErrXml = xmlResFile;
//p.uniResponseError("-1", "User Order failure!!");
errorNum = "-1";
errorDes = errorDes.equals("")? "User Order failure!!" : errorDes;
try...{
doc = sb.build(new File(cfgErrXml));
b.append(" RESPONSE ERROR: " + errorDes + "");
}catch( Exception er)...{
d(er.toString());
}
Element root = doc.getRootElement();
java.util.List U_MAXs = root.getChildren();
Element deck = (Element)U_MAXs.get(0);
Element errorCode = deck.getChild("ValidErrorCode");
errorCode.setText(errorNum);
Element errorInfo = deck.getChild("ValidErrorInfo");
errorInfo.setText(errorDes);
//p.uniResponse();
try...{
outp.output(doc, out);
b.append(outp.outputString(doc));
}catch( java.io.IOException ioe)...{
d(ioe.toString());
}
}
// unierr.xml
<? xml version = " 1.0 " encoding = " UTF-8 " ?>
< U - MAX >
< ValidError >
< ValidErrorCode > 16777217 </ ValidErrorCode >
< ValidErrorInfo > The ' ProductCode ' element has an invalid value according to its data type. An error occurred at( 35 , 29 ). </ ValidErrorInfo >
</ ValidError >
</ U - MAX >
if (isOk) ... {
//p.uniResponse();
try...{
outp.output(doc, out);
b.append(" RESPONSE");
b.append(outp.outputString(doc));
}catch( java.io.IOException ioe)...{
d(ioe.toString());
}
//outp.output(doc, System.out);
} else ... {
//p.setErrorXmlFile(xmlResFile);
cfgErrXml = xmlResFile;
//p.uniResponseError("-1", "User Order failure!!");
errorNum = "-1";
errorDes = errorDes.equals("")? "User Order failure!!" : errorDes;
try...{
doc = sb.build(new File(cfgErrXml));
b.append(" RESPONSE ERROR: " + errorDes + "");
}catch( Exception er)...{
d(er.toString());
}
Element root = doc.getRootElement();
java.util.List U_MAXs = root.getChildren();
Element deck = (Element)U_MAXs.get(0);
Element errorCode = deck.getChild("ValidErrorCode");
errorCode.setText(errorNum);
Element errorInfo = deck.getChild("ValidErrorInfo");
errorInfo.setText(errorDes);
//p.uniResponse();
try...{
outp.output(doc, out);
b.append(outp.outputString(doc));
}catch( java.io.IOException ioe)...{
d(ioe.toString());
}
}
// unierr.xml
<? xml version = " 1.0 " encoding = " UTF-8 " ?>
< U - MAX >
< ValidError >
< ValidErrorCode > 16777217 </ ValidErrorCode >
< ValidErrorInfo > The ' ProductCode ' element has an invalid value according to its data type. An error occurred at( 35 , 29 ). </ ValidErrorInfo >
</ ValidError >
</ U - MAX >
接口格式
CODE ?
定制服务
XML Format:
request:
< webmethod id = ”service_order_to_cp” >
< cpcode value = ” < xxx > ” />
< userid value = ” < 23424 > ” />
< encryptflag value = ” < y | n > ” />
< serviceid value = ” < news > ” />
< ispack value = ” < Y | N > ” />
< sub_type value = ” < month | per_hit | day > ” />
< orderdate value = ” 2003 - 01 - 01 23 : 59 : 01 ” />
</ webmethod >
response:
< webmethod id = ”service_order_to_cp” >
< result status = ” < 0 | 1 > ” />
</ webmethod >
退定服务
XML Format:
request:
< webmethod id = ”service_disorder_to_cp” >
< cpcode value = ” < xxx > ” />
< userid value = ” < 23424 > ” />
< encryptflag value = ” < y | n > ” />
< serviceid value = ” < news > ” />
< ispack value = ” < Y | N > ” />
< sub_type value = ” < month | per_hit | day > ” />
< disorderdate value = ” 2003 - 01 - 01 23 : 59 : 01 ” />
</ webmethod >
response:
< webmethod id = ”service_disorder_to_cp” >
< result status = ” < 0 | 1 > ” />
</ webmethod >
程序代码,servlet文件
以下为回复隐藏的内容
CODE
package com.goway.wapuser;
import javax.servlet. * ;
import javax.servlet.http. * ;
import java.io. * ;
import java.util. * ;
import org.jdom.input.SAXBuilder;
import org.jdom.Document;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jdom.Element;
import com.gzidc.wapuser.db.bean.wapuser;
import org.jdom.Attribute;
import org.jdom.output.XMLOutputter;
import org.jdom.output.Format;
public class wapreceive extends HttpServlet ... {
private static Log log = null;
private static final String CONTENT_TYPE = "text/xml";
private int resultstatus = 1;//返回状态值
SAXBuilder sb = new SAXBuilder();//用到Jdom
private Document doc=null;
//Initialize global variables
public void init() throws ServletException ...{
}
//Process the HTTP Get request
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException ...{
response.setContentType(CONTENT_TYPE);
PrintWriter out = response.getWriter();
Format format = Format.getPrettyFormat();
XMLOutputter outputter = new XMLOutputter(format.setIndent(" "));
String flag = "service_order_to_cp";
if(request.getContentLength() <= 0)...{//没有数据
resultstatus = 1;
log.error("接收数据为空");
outputter.output(setReturnStatus(resultstatus,flag), out);
return;
}
try...{
DataInputStream din = new DataInputStream(request.getInputStream());//输入流
doc = sb.build(din);//绑定输入流
din.close();
wapuser user = new wapuser();//定义一个bean,里面有相应字段变量及数据库操作方法
//得到根元素
Element root = doc.getRootElement();
flag = root.getAttributeValue("id");//根元素的属性id的值
//得到根元素所有子元素的集合
List message = root.getChildren();
//叠代显示所有元素
Iterator it = message.iterator();
while (it.hasNext())
...{
Element e = (Element) it.next();
if(e.getName().equals("cpcode"))...{
user.setCpcode(e.getAttributeValue("value"));//设置cpcode=属性value的值
}
else if(e.getName().equals("userid"))...{
user.setUserid(e.getAttributeValue("value"));
}
else if(e.getName().equals("encryptflag"))...{
user.setEncryptflag(e.getAttributeValue("value"));
}
else if(e.getName().equals("serviceid"))...{
user.setServiceid(e.getAttributeValue("value"));
}
else if(e.getName().equals("ispack"))...{
user.setIspack(e.getAttributeValue("value"));
}
else if(e.getName().equals("sub_type"))...{
user.setSub_type(e.getAttributeValue("value"));
}
else if(e.getName().equals("orderdate"))...{
user.setOrderdate(e.getAttributeValue("value"));
}
else if(e.getName().equals("disorderdate"))...{
user.setDisorderdate(e.getAttributeValue("value"));
}
}
int updatenum = user.setWapUser();//设置值后,此方法把值存入数据库,当然有相关的逻辑判断,包括是否已存在,是否更新退定等
if(updatenum>0)...{//updatenum大于零说明操作数据库成功
resultstatus = 0;//接收成功
log.info(flag+"用户信息"+user.getUserid()+"成功");//是个log的操作
}
//导出xml格式,输出到out流中,setreturnStatus()为设置xml格式
outputter.output(setReturnStatus(resultstatus, flag), out);
}catch(Exception e)...{
log.error("接收数据有误",e);//log操作
}
}
/** *//**
* 设置返回信息
* @param resultstatus int
* @return Document
*/
private Document setReturnStatus(int resultstatus,String flag)...{
Element webelement = new Element("webmethod");//根
Document retdoc = new Document(webelement);
webelement.setAttribute(new Attribute("id",flag));//根属性
webelement.addContent(new Element("result").setAttribute(new Attribute("status",String.valueOf(resultstatus))));//添加元素及属性
return retdoc;
}
//Process the HTTP Post request
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException ...{
doGet(request, response);
}
//Clean up resources
public void destroy() ...{
}
static
...{
log = LogFactory.getLog(com.goway.wapuser.wapreceive.class.getName());//设置log
}
}
CODE ?
定制服务
XML Format:
request:
< webmethod id = ”service_order_to_cp” >
< cpcode value = ” < xxx > ” />
< userid value = ” < 23424 > ” />
< encryptflag value = ” < y | n > ” />
< serviceid value = ” < news > ” />
< ispack value = ” < Y | N > ” />
< sub_type value = ” < month | per_hit | day > ” />
< orderdate value = ” 2003 - 01 - 01 23 : 59 : 01 ” />
</ webmethod >
response:
< webmethod id = ”service_order_to_cp” >
< result status = ” < 0 | 1 > ” />
</ webmethod >
退定服务
XML Format:
request:
< webmethod id = ”service_disorder_to_cp” >
< cpcode value = ” < xxx > ” />
< userid value = ” < 23424 > ” />
< encryptflag value = ” < y | n > ” />
< serviceid value = ” < news > ” />
< ispack value = ” < Y | N > ” />
< sub_type value = ” < month | per_hit | day > ” />
< disorderdate value = ” 2003 - 01 - 01 23 : 59 : 01 ” />
</ webmethod >
response:
< webmethod id = ”service_disorder_to_cp” >
< result status = ” < 0 | 1 > ” />
</ webmethod >
程序代码,servlet文件
以下为回复隐藏的内容
CODE
package com.goway.wapuser;
import javax.servlet. * ;
import javax.servlet.http. * ;
import java.io. * ;
import java.util. * ;
import org.jdom.input.SAXBuilder;
import org.jdom.Document;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jdom.Element;
import com.gzidc.wapuser.db.bean.wapuser;
import org.jdom.Attribute;
import org.jdom.output.XMLOutputter;
import org.jdom.output.Format;
public class wapreceive extends HttpServlet ... {
private static Log log = null;
private static final String CONTENT_TYPE = "text/xml";
private int resultstatus = 1;//返回状态值
SAXBuilder sb = new SAXBuilder();//用到Jdom
private Document doc=null;
//Initialize global variables
public void init() throws ServletException ...{
}
//Process the HTTP Get request
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException ...{
response.setContentType(CONTENT_TYPE);
PrintWriter out = response.getWriter();
Format format = Format.getPrettyFormat();
XMLOutputter outputter = new XMLOutputter(format.setIndent(" "));
String flag = "service_order_to_cp";
if(request.getContentLength() <= 0)...{//没有数据
resultstatus = 1;
log.error("接收数据为空");
outputter.output(setReturnStatus(resultstatus,flag), out);
return;
}
try...{
DataInputStream din = new DataInputStream(request.getInputStream());//输入流
doc = sb.build(din);//绑定输入流
din.close();
wapuser user = new wapuser();//定义一个bean,里面有相应字段变量及数据库操作方法
//得到根元素
Element root = doc.getRootElement();
flag = root.getAttributeValue("id");//根元素的属性id的值
//得到根元素所有子元素的集合
List message = root.getChildren();
//叠代显示所有元素
Iterator it = message.iterator();
while (it.hasNext())
...{
Element e = (Element) it.next();
if(e.getName().equals("cpcode"))...{
user.setCpcode(e.getAttributeValue("value"));//设置cpcode=属性value的值
}
else if(e.getName().equals("userid"))...{
user.setUserid(e.getAttributeValue("value"));
}
else if(e.getName().equals("encryptflag"))...{
user.setEncryptflag(e.getAttributeValue("value"));
}
else if(e.getName().equals("serviceid"))...{
user.setServiceid(e.getAttributeValue("value"));
}
else if(e.getName().equals("ispack"))...{
user.setIspack(e.getAttributeValue("value"));
}
else if(e.getName().equals("sub_type"))...{
user.setSub_type(e.getAttributeValue("value"));
}
else if(e.getName().equals("orderdate"))...{
user.setOrderdate(e.getAttributeValue("value"));
}
else if(e.getName().equals("disorderdate"))...{
user.setDisorderdate(e.getAttributeValue("value"));
}
}
int updatenum = user.setWapUser();//设置值后,此方法把值存入数据库,当然有相关的逻辑判断,包括是否已存在,是否更新退定等
if(updatenum>0)...{//updatenum大于零说明操作数据库成功
resultstatus = 0;//接收成功
log.info(flag+"用户信息"+user.getUserid()+"成功");//是个log的操作
}
//导出xml格式,输出到out流中,setreturnStatus()为设置xml格式
outputter.output(setReturnStatus(resultstatus, flag), out);
}catch(Exception e)...{
log.error("接收数据有误",e);//log操作
}
}
/** *//**
* 设置返回信息
* @param resultstatus int
* @return Document
*/
private Document setReturnStatus(int resultstatus,String flag)...{
Element webelement = new Element("webmethod");//根
Document retdoc = new Document(webelement);
webelement.setAttribute(new Attribute("id",flag));//根属性
webelement.addContent(new Element("result").setAttribute(new Attribute("status",String.valueOf(resultstatus))));//添加元素及属性
return retdoc;
}
//Process the HTTP Post request
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException ...{
doGet(request, response);
}
//Clean up resources
public void destroy() ...{
}
static
...{
log = LogFactory.getLog(com.goway.wapuser.wapreceive.class.getName());//设置log
}
}