webservice中的xml文件的交互

  使用webservice中使用的类型可以是好多种,string、element、document等等甚至可以使对象!

  我使用element来传输xml文件,写了一个文件,源码如下


import java.io.Reader;
import java.io.StringReader;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.apache.xpath.XPathAPI;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.xml.sax.InputSource;
/**

  • 工单查询接口 boos提供serialNumber、serviceNum输入参数
    *
  • @author joypen
    /
    public class WidebandBusinessQueryService {
    // 提供的查询方法
    public Element queryWideband(Element requestXml) throws Exception {
    Map map = this.databaseMethod(requestXml);
    String responseXml = this.dealResponseXml(map);
    System.out.println("111 "+responseXml);
    Document doc = null;
        Reader strreader=new StringReader(responseXml);
        DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
        doc = builder.parse(new InputSource(strreader));
    return  doc.getDocumentElement();
    
    }
    // 连接数据库,并且执行sql语句
    private Map databaseMethod(Element requestXml) {
    Connection conn = null;
    PreparedStatement ps = null;
    ResultSet rs = null;
    Map map = null;
    String serialNumber = null;
    String serviceNum = null;
    try {
        map = this.parseXml(requestXml);
        serialNumber = (String) map.get("SERIALNUMBER");
        serviceNum = (String) map.get("SERVICENUM");
        if(TextUtil.isNull(serialNumber) || "".equals(serialNumber) || TextUtil.isNull(serviceNum) || "".equals(serviceNum)){
            map.put("ERRORCODE", "1");
            map.put("DESCRIPTION", "SERIALNUMBER OR SERVICENUM IS WORING!");
        }else{
            conn = Helper.getDBCnn();
            conn.setAutoCommit(false);
            String sqlString = this.sqlQueryString(serialNumber, serviceNum);
            ps = conn.prepareStatement(sqlString);
            rs = ps.executeQuery();
            map = this.dealResult(rs);
        }
    } catch (Exception e) {
        System.out.print("WidebandBusinessQueryService--数据库连接出错!");
        e.printStackTrace();
    }finally{
        try {
            rs = null;
            ps = null;
            if(conn!=null){
                conn.setAutoCommit(true);
                conn.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    return map;
    
    }
    // 拼接sql语句
    private String sqlQueryString(String serialNumber, String serviceNum) {
    StringBuffer sql = new StringBuffer();
    sql.append("select * from t_pbb_open_main where SERIALNUMBER = +serialNumber+ and SERVICE_NUM = +serviceNum+ ");
    return sql.toString();
    
    }
    // 处理返回的结果集
    private Map dealResult(ResultSet rs) {
    HashMap map = null;
    try {
        map = new HashMap();
        if(rs.next()){
            map.put("ERRORCODE", "0");
            map.put("SERIALNUMBER", rs.getString("SERIALNUMBER"));
            map.put("SERVICENUM", rs.getString("SERVICE_NUM"));
            map.put("FORMNO", rs.getString("FORM_NO"));
            map.put("STATE", rs.getString("PROCESS_STATE"));
            map.put("OPERATORNAME", rs.getString("SERVICE_NUM"));
        }else{
            map.put("ERRORCODE", "1");
            map.put("DESCRIPTION", "WITHOUT THIS RECORD!");
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return map;
    
    }
    // 解析xml,得到serialNumber和serviceNum
    private Map parseXml(Element requestXml) throws Exception {
    Map map = new HashMap();
        String serialNumber="";
        Node tmpNode = XPathAPI.selectSingleNode(requestXml, "//SERIALNUMBER");
        if (tmpNode != null)
        {
            Node txtNode = tmpNode.getFirstChild();
            if (txtNode != null)
                serialNumber = txtNode.getNodeValue();
        }
        String serviceNum="";
        tmpNode = XPathAPI.selectSingleNode(requestXml, "//SERVICENUM");
        if (tmpNode != null)
        {
            Node txtNode = tmpNode.getFirstChild();
            if (txtNode != null)
                serviceNum = txtNode.getNodeValue();
        }
        map.put("SERIALNUMBER", serialNumber);
        map.put("SERVICENUM", serviceNum);
    return map;
    
    }
    // 拼接responseXml
    private String dealResponseXml(Map responseMap) {
    String resultCode = (String) (TextUtil.isNull(responseMap.get("ERRORCODE")) ? "" : responseMap.get("ERRORCODE"));
    String serialNumber = (String) (TextUtil.isNull(responseMap.get("SERIALNUMBER")) ? "" : responseMap.get("SERIALNUMBER"));
    String serviceNum = (String) (TextUtil.isNull(responseMap.get("SERVICENUM")) ? "" : responseMap.get("SERVICENUM"));
    String formNo = (String) (TextUtil.isNull(responseMap.get("FORMNO")) ? "" : responseMap.get("FORMNO"));
    String description = (String) (TextUtil.isNull(responseMap.get("DESCRIPTION")) ? "" : responseMap.get("DESCRIPTION"));
    String time = (String) (TextUtil.isNull(responseMap.get("time")) ? "" : responseMap.get("time"));
    String state = (String) (TextUtil.isNull(responseMap.get("STATE")) ? "" : responseMap.get("STATE"));
    String operatorName = (String) (TextUtil.isNull(responseMap.get("OPERATORNAME")) ? "" : responseMap.get("OPERATORNAME"));
    String operatorPhone = (String) (TextUtil.isNull(responseMap.get("OPERATORPHONE")) ? "" : responseMap.get("OPERATORPHONE"));
    StringBuffer sb = new StringBuffer();
    sb.append("
    
    ");
    sb.append("
    
    ");
    sb.append(""+resultCode+"
    
    ");
    sb.append(""+serialNumber+"
    
    ");
    sb.append(""+serviceNum+"
    
    ");
    sb.append(""+formNo+"
    
    ");
    sb.append("响应时间
    
    ");
    sb.append("失败原因
    
    ");
    sb.append("
    
    ");
    sb.append("当前环节
    
    ");
    sb.append("操作人姓名
    
    ");
    sb.append("操作人电话
    
    ");
    sb.append("
    
    ");
    sb.append("
    
    ");
    return sb.toString();
    
    }
    public static void main(String[] args) throws Exception {
    String reqeustXml = "321312陶宏辉请求时间";
    Document doc = null;
    Reader strreader=new StringReader(reqeustXml);
    DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
    doc = builder.parse(new InputSource(strreader));
    Element responseXml = new WidebandBusinessQueryService().queryWideband(doc.getDocumentElement());
    String testXml = "";
    Node tempNode = XPathAPI.selectSingleNode(responseXml, "//OPERATORNAME");
    if(tempNode!=null){
        Node txtNode = tempNode.getFirstChild();
        if(txtNode!=null){
            testXml = txtNode.getTextContent();
        }
    }
    System.out.println("reqeust: "+reqeustXml);
    System.out.println("testXml: "+testXml);
    
    }
    }