下载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;//orderfldActiveTime = "EffectiveDate";}else if (deckName.equals("SubscriptionCancel"))...{Status = 3;//cancelfldActiveTime = "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 > 接口格式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 }}