webservice--解析xml


客户端请求的xml格式:

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

服务器响应的xml格式:

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

 

服务端

实体:

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 + "]";
    }
}

实现类:

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();
        
    }
}

客户端:

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;
    }
}

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM