客户端通过http的post或get方式发送xml文件,服务端提供接口(比如(aaa.jsp?xml=xmlpos)怎样接收,解析然后返回一个参数给客户端,用什么技术呀。最好有服务端代码[email protected]

解决方案 »

  1.   

    package com.cn.action;
    import java.beans.IntrospectionException;
    import java.beans.Introspector;
    import java.beans.PropertyDescriptor;
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.UnsupportedEncodingException;
    import java.lang.reflect.Method;import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;import org.apache.log4j.Logger;
    import org.apache.struts.action.ActionForm;
    import org.apache.struts.action.ActionForward;
    import org.apache.struts.action.ActionMapping;
    import org.jdom.Document;
    import org.jdom.Element;
    import org.jdom.JDOMException;
    import org.jdom.input.SAXBuilder;import com.cn.model.BusinessFlow;
    import com.cn.model.LinktoneBusiness;
    import com.cn.model.LinktoneMR;
    import com.cn.readXML.DomParse;
    import com.cn.service.BusinessFlowService;
    import com.cn.service.OperatorException;
    /***
     * 掌上灵通的上行接收action
     * @author Soft02
     *
     */@SuppressWarnings("serial")
    public class LinktoneAction extends BaseAction{
    private static final Logger logger = Logger
    .getLogger(LinktoneAction.class);
    //添加上行信息
    public ActionForward add(ActionMapping mapping, ActionForm form,
    HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException{
     BusinessFlowService bService = BusinessFlowService.getInstance();
     BusinessFlow bFlow = new BusinessFlow();
     //接收xml流,解析编码为gbk
     request.setCharacterEncoding("GBK"); 
     response.setCharacterEncoding("GBK");
     String mString="";
     //DomParse读取XML文件
     String ip = getIpAddr(request);
     logger.debug(ip);
    // System.out.println(ip);
    try {
    bService.addAccess(ip);
    } catch (OperatorException e2) {
    // TODO Auto-generated catch block
    e2.printStackTrace();
    logger.error(e2.getMessage());
    }
     bFlow = new DomParse().readXMLLinton(request, response);//解析xml文件


     bFlow.setIp(ip);
     request.getSession().setAttribute("bFlow", bFlow);



    return mapping.findForward("addReal");
    }
    public ActionForward addReal(ActionMapping mapping, ActionForm form,
    HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException{
     BusinessFlowService bService = BusinessFlowService.getInstance();
     BusinessFlow bFlow = (BusinessFlow) request.getSession().getAttribute("bFlow");

     bFlow = dealBFlow(bFlow);
    // System.out.println(" bFlow.setIp" +bFlow.getIp());
    try {
    bService.addlintonFlow(bFlow);
    response.getWriter().print(0);
    } catch (OperatorException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
    try {
    response.getWriter().write("123456");
    } catch (IOException e) {
     logger.debug(e.getMessage());
    e.printStackTrace();
    logger.error(e.getMessage());

    }
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }





    return null;
    }

    @SuppressWarnings({ "unused", "finally" })
    private BusinessFlow dealBFlow(BusinessFlow bFlow){
    String msg = bFlow.getContent();
    bFlow.setMsg(msg);
    //System.out.println("******************************"+msg);
    char[] c = msg.toCharArray();

    bFlow.setLongphone(bFlow.getSpcode()+bFlow.getToicp());
    try {
    if (c.length>4) {
    String type =""+ c[msg.length()-4]+c[msg.length()-3];
    bFlow.setType(type);
    }
    if (bFlow.getMobile().length()>16) {
    logger.error("手机号码过长: "+bFlow.getMobile());
    bFlow.setMobile(bFlow.getMobile().substring(bFlow.getMobile().length()-16, bFlow.getMobile().length()-1));
    }
    bFlow.setGameid(msg.substring(msg.length()-16, msg.length()-16+3));
    } catch (StringIndexOutOfBoundsException e) {
    // TODO Auto-generated catch block
    logger.error("短息格式错误: "+bFlow.getContent());
    logger.error(e.getMessage());
    bFlow.setGameid("错误");
    bFlow.setSign(12);
    bFlow.setType("");
    e.printStackTrace();
    }finally
    {
    int value =Integer.valueOf(bFlow.getFeeprice());
    bFlow.setValue(value/100);
    bFlow.setTerraceName("掌上灵通");
    return bFlow;
    }




    }
    public ActionForward addMT(ActionMapping mapping, ActionForm form,
    HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException{
    BusinessFlowService bService = BusinessFlowService.getInstance();
    //BusinessFlow bFlow = new BusinessFlow();
    request.setCharacterEncoding("GBK"); 
    response.setCharacterEncoding("GBK");
    String mString="";
    //DomParse读取XML文件
     String ip = getIpAddr(request);
         Document doc = null;
     Element root;
     BufferedReader br;
     LinktoneBusiness bf =new LinktoneBusiness(); 
     
    try {
    //if (( br = request.getReader()).read()>0) {
    doc=new SAXBuilder().build(request.getReader());
    root=doc.getRootElement();
    PropertyDescriptor[] pd=Introspector.getBeanInfo(LinktoneBusiness.class).getPropertyDescriptors();
    for(PropertyDescriptor p:pd){
    String fieldName=p.getName();
    String fieldValue;
    if((fieldValue=root.getChildText(fieldName))!=null){
    Method m=p.getWriteMethod();
    m.setAccessible(true);
    try{
    m.invoke(bf, fieldValue);

    }catch(Exception e){
    e.printStackTrace();
    logger.error(e.getMessage());
    }
    }
    }
    // }
    // System.out.println("mspid##############################"+bf.getMsgid());
    try {
    bf.setIp(ip);
    bService.addlintonFlowMT(bf);
    response.getWriter().print(0);
    } catch (OperatorException e1) {
    // TODO Auto-generated catch block

    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

    } catch (JDOMException e) {
    e.printStackTrace();
    try {
    response.getWriter().write("123456");
    } catch (IOException e2) {

    e2.printStackTrace();

    }

    } catch (IntrospectionException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }



    return null;
    }
    public ActionForward addMR(ActionMapping mapping, ActionForm form,
    HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException{
    BusinessFlowService bService = BusinessFlowService.getInstance();
    //BusinessFlow bFlow = new BusinessFlow();
    request.setCharacterEncoding("GBK"); 
    response.setCharacterEncoding("GBK");
    String mString="";
    //DomParse读取XML文件
     String ip = getIpAddr(request);
         Document doc = null;
     Element root;
     BufferedReader br;
     LinktoneMR bf =new LinktoneMR();
    try {
    //if (( br = request.getReader()).read()>0) {
    doc=new SAXBuilder().build(request.getReader());
    root=doc.getRootElement();
    PropertyDescriptor[] pd=Introspector.getBeanInfo(LinktoneMR.class).getPropertyDescriptors();
    for(PropertyDescriptor p:pd){
    String fieldName=p.getName();
    String fieldValue;
    if((fieldValue=root.getChildText(fieldName))!=null){
    Method m=p.getWriteMethod();
    m.setAccessible(true);
    try{
    m.invoke(bf, fieldValue);
    //System.out.println(fieldValue);
    }catch(Exception e){
    e.printStackTrace();
    }
    }
    }
    // }

    try {
    bf.setIp(ip);
    bService.addlintonFlowMR(bf);
    response.getWriter().print(0);
    } catch (OperatorException e1) {
    // TODO Auto-generated catch block

    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

    } catch (JDOMException e) {
    e.printStackTrace();
    try {
    response.getWriter().write("123456");
    } catch (IOException e2) {

    e2.printStackTrace();

    }

    } catch (IntrospectionException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }



    return null;
    }
     public String getIpAddr(HttpServletRequest request) {
           String ip = request.getHeader("x-forwarded-for");
           if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
               ip = request.getHeader("Proxy-Client-IP");
           }
           if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
               ip = request.getHeader("WL-Proxy-Client-IP");
           }
           if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
               ip = request.getRemoteAddr();
           }
           return ip;
       } }
      

  2.   


    这事一个标准的ajax调用啊.
    服务端相当于getParameter取得了一个String,用jdom把这个String  build成xml流解析,完了再返回一个xml流给调用方就好了。
      

  3.   

    我的XML文件是这样的格式<?xml version="1.0" encoding="UTF-8"?>
    <DetailObject><ValueObject hid='344345' ConfName='0' ConfContent='ADSL' ConfCount='32'/>
    </DetailObject>
    怎样解析
      

  4.   

    使用ajax的send(xmldoc)发生,不要作为参数发送,。后台解析,request的输入流中读取