webservice--解析xml

客戶端請求的xml格式:java

<?xml version="1.0" encoding="utf-8" ?>
<selectPage>
<start></start>
<end></end>
</selectPage>
服務器

服務器響應的xml格式:dom

<?xml version="1.0" encoding="utf-8" ?>
  <selectPage>
    <accountName></accountName>
</selectPage>ide

 

服務端this

實體:spa

package com.zpark.yyl.entity;

import java.io.Serializable;

public class Account implements Serializable {
    private Integer accountNo;
    private String accountName;
    private String password;
    private Integer balance;
    //private java.util.Date openDate;
    
    public Integer getAccountNo() {
        return accountNo;
    }
    public void setAccountNo(Integer accountNo) {
        this.accountNo = accountNo;
    }
    public String getAccountName() {
        return accountName;
    }
    public void setAccountName(String accountName) {
        this.accountName = accountName;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public Integer getBalance() {
        return balance;
    }
    public void setBalance(Integer balance) {
        this.balance = balance;
    }
    
    public Account(Integer accountNo, String accountName, String password,
            Integer balance) {
        super();
        this.accountNo = accountNo;
        this.accountName = accountName;
        this.password = password;
        this.balance = balance;
    }
    public Account() {
        super();
    }
    @Override
    public String toString() {
        return "Account [accountNo=" + accountNo + ", accountName="
                + accountName + ", password=" + password + ", balance="
                + balance + "]";
    }
}

實現類:.net

package com.zpark.yyl.serivce;

import java.util.List;

import javax.jws.WebService;
import javax.xml.ws.WebFault;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;

import com.zpark.yyl.dao.AccountDao;
import com.zpark.yyl.dao.AccountDaoImpl;
import com.zpark.yyl.entity.Account;

/**
 *
 * 實現類:解析客戶端傳來的String數據,發送xml數據給客戶端
 * 
 */
@WebService
public class AccountServiceImpl implements AccountService {
    
    private AccountDao ad = new AccountDaoImpl();
    @Override
    public String selectPage(String info) throws Exception {
        
        //解析請求的xml
        Account account = parseXml(info);
        int start = account.getAccountNo()-1;  //起始下標
        int end = account.getBalance()-start;  //記錄數
        
        //查詢區域列表
        List<Account> list = ad.selectPage(start, end);
        
        //解析list響應爲客戶端
        String psrseList = psrseList(list);
        
        return psrseList;
    }

    
    //解析請求的xml
    private Account parseXml(String info) throws Exception{
        Account account = new Account();
        //使用dom4j解析
        Document document=null;
        try {
            document = DocumentHelper.parseText(info);
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException("出錯了");
        }     
        String start = document.selectSingleNode("selectPage/start").getText();
        String end = document.selectSingleNode("selectPage/end").getText();
        
        account.setAccountNo(Integer.parseInt(start));
        account.setBalance(Integer.parseInt(end));
        return account;
        
    }
    
    //解析list,響應回去
    private String psrseList(List<Account> list){
        Document document = DocumentHelper.createDocument();
        Element root = DocumentHelper.createElement("areas");
        //添加根節點
        document.add(root);
        
        for (Account account : list) {
            String accountName = account.getAccountName();
            root.addElement("accountName").addText(accountName);
        }
        
        return document.asXML();
        
    }
}

客戶端:code

package client;

import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import javax.xml.namespace.QName;
import javax.xml.ws.Service;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Node;

import com.zpark.yyl.entity.Account;
import com.zpark.yyl.serivce.AccountServiceImpl;

/**
 * 使用jaxws標準方法,向服務端發送String數據,接收服務器響應的String數據
 * 
 */
public class MyClient_local {
    public static void main(String[] args) throws Exception {
    
        URL wsdlDocumentLocation = new URL("http://127.0.0.1:12345/area?wsdl");
        
        //從wsdl中找到服務視圖
        QName serviceName = new QName("http://serivce.yyl.zpark.com/","AccountServiceImplService");
        
        //建立服務視圖
        Service service=Service.create(wsdlDocumentLocation , serviceName);
        
        //1.從服務視圖中獲得portType對象 
        AccountServiceImpl weatherWebServiceSoap = service.getPort(AccountServiceImpl.class);
        
        //調用portType方法,發送xml數據
        String request =getXml(1,3);
        String query = weatherWebServiceSoap.selectPage(request);
        
        
        //解析服務端傳來的數據
         List<Account> parseXml = parseXml(query);
         for (Account account : parseXml) {
             System.out.println(account.getAccountName());
        }
        
        
        
    }
    
    
    //解析服務端的xml,封裝成對象
        private static List<Account> parseXml(String info) throws Exception{
                System.out.println(info);
            
                List<Account> list = new ArrayList<Account>();
                //使用dom4j解析
                Document document = DocumentHelper.parseText(info); 
                 List selectNodes=null;
                try {
                    selectNodes = document.selectNodes("/areas//accountName");
                } catch (Exception e) {
                    e.printStackTrace();
                    throw new RuntimeException("出錯了");
                }
                //遍歷根節點
                for (Object object : selectNodes) {
                    Node accountName = (Node)object;
                    String text = accountName.getText();
                    Account account = new Account();
                    account.setAccountName(text);
                    list.add(account);
                }
                return list;
                
        }
            
    //發送xml,根據接口描述組織內容
    private static String getXml(int start,int end){
        
    String Xml="<?xml version=\"1.0\"  encoding=\"utf-8\" ?>"+
                "<selectPage>"+
                "<start>"+start+"</start>" +
                "<end>"+end+"</end>"+
                "</selectPage>";
                
    return Xml;
    }
}
相關文章
相關標籤/搜索