客戶端請求的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; } }