成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

J2EE web service開發(三)SAAJ帶附件的soap消息

開發 后端
本文講述了J2EE web service開發中SAAJ帶附件的soap消息。帶附件的soap消息api內容很豐富,它是一個允許用soap消息而不是用jax-rpc來調用web service的API。

帶附件的soap消息api,其內容很豐富,它是一個允許用soap消息而不是用jax-rpc來調用web service的API .它通過直接創建XML消息來完成web serivce的調用.SOAP API 簡化了創建XML的工作. 取自j2ee文檔的soap消息的結構圖.
 
完整的SAAJ客戶端程序. 服務器端的程序在j2ee web service開發(一) 里可以找到.沒有詳細介紹saaj的一些類
的使用.好在它們都有很好的自解釋性.

  1. package array;  
  2.  
  3. import javax.xml.soap.*;  
  4. import java.net.*;  
  5. import java.io.*;  
  6. import java.util.*;  
  7. import java.text.SimpleDateFormat;  
  8. public class SaajClient {  
  9.     public SaajClient() {  
  10.     }  
  11.  
  12.     public static void main(String[] args) throws Exception {  
  13.         SaajClient client = new SaajClient();  
  14.         User[] user = new User[2];  
  15.         user[0] = new User("張三""027-88888888"new Date());  
  16.         user[1] = new User("lisi"nullnew Date());  
  17.         saajTest(user);  
  18.  
  19.     }  
  20.  
  21.     private static void saajTest(User[] user) throws MalformedURLException,  
  22.             IOException,  
  23.             UnsupportedOperationException, SOAPException {  
  24.         MessageFactory factory = MessageFactory.newInstance();//SAAJ的根工廠類  
  25.         SOAPMessage message = factory.createMessage();  
  26.         //SOAPMessage 對象需要一些元素,包括SOAPPart,SOAPEnvelope,SOAPHeader,SOAPBody對象  
  27.         //SAAJ通過返回一個新的已經包括這些元素的SOAPMessage對象來簡化操作  
  28.         SOAPFactory s = SOAPFactory.newInstance();//通用工廠類,創建Name,SOAPElement對象  
  29.  
  30.         Name countUser = s.createName("countUser""mh""http://array");  
  31.         //Name對象表示一個XML限定名稱  
  32.         Name arrayOfUser_1 = s.createName("arrayOfUser_1");  
  33.         Name xsi = s.createName("xmlns:xsi");  
  34.         Name nullAttribute = s.createName("xsi:nil");  
  35.  
  36.         //下面的代碼創建soap對象  
  37.         SOAPBody body = message.getSOAPBody();  
  38.         SOAPBodyElement bodyChildElement = body.addBodyElement(countUser);  
  39.         SOAPElement arrayOfUser = bodyChildElement.addChildElement(  
  40.                 arrayOfUser_1);  
  41.       //  arrayOfUser.addAttribute(xsi, "http://www.w3.org/2001/XMLSchema-instance");  
  42.         arrayOfUser.addNamespaceDeclaration("xsi","http://www.w3.org/2001/XMLSchema-instance");  
  43.         //定義arrayOfUser的 xmlns:xsi屬性  該名稱空間是XML模式實例命名空間,由XML模式規范定義,它定義了  
  44.         //可以在XML文檔中使用的屬于該命名空間的一些特性.  
  45.         for (int i = 0; i < user.length; i++) {  
  46.             //需要注意順序,也就是和復雜類型的sequence元素的順序對應  
  47.             Name valueName = s.createName("value");  
  48.             SOAPElement value = arrayOfUser.addChildElement(valueName);  
  49.             Name birthday = s.createName("birthDay");  
  50.             SOAPElement birthdayElement = value.addChildElement(birthday);  
  51.  
  52.             if (user[i].getBirthDay() == null) {  
  53.                 birthdayElement.addAttribute(nullAttribute, "1");  
  54.             } else {  
  55.                 //日期類型必須進行格式化  
  56.                 SimpleDateFormat format= new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");  
  57.                 birthdayElement.addTextNode(format.format(user[i].getBirthDay()));  
  58.             }  
  59.             Name name = s.createName("name");  
  60.             SOAPElement nameElement = value.addChildElement(name);  
  61.             if (user[i].getName() == null) {  
  62.                 //傳送空值  
  63.                 nameElement.addAttribute(nullAttribute, "1");  
  64.             } else {  
  65.                 nameElement.addTextNode(user[i].getName());  
  66.             }  
  67.             Name phone = s.createName("phone");  
  68.             SOAPElement phoneElement = value.addChildElement(phone);  
  69.             if (user[i].getPhone() == null) {  
  70.                 phoneElement.addAttribute(nullAttribute, "1");  
  71.             } else {  
  72.                 phoneElement.addTextNode(user[i].getPhone());  
  73.             }  
  74.  
  75.         }  
  76.  
  77.         //發送soap消息  
  78.         SOAPConnectionFactory f = SOAPConnectionFactory.newInstance();  
  79.         SOAPConnection conn = f.createConnection();  
  80.         URL url = new URL("http://localhost:8082/complexType-array/services/CountUser");  
  81.         SOAPMessage response = conn.call(message, url);  
  82.  
  83.         SOAPBody soapBody = response.getSOAPBody();  
  84.         Iterator it = soapBody.getChildElements();  
  85.         while (it.hasNext()) {  
  86.             SOAPBodyElement bodyElement = (SOAPBodyElement) it.next();  
  87.             String returnValue = bodyElement.getValue();  
  88.             System.out.println(bodyElement.getElementName().getLocalName() +  
  89.                                "      " + returnValue);  
  90.         }  
  91.  
  92.  
  93.         response.writeTo(System.out);  
  94.     }  
  95. }  

程序向服務器端傳送的數據:

  1. POST /complexType-array/services/CountUser HTTP/1.1  
  2. SOAPAction: ""  
  3. Content-Type: text/xml; charset=UTF-8  
  4. User-Agent: Java/1.5.0_03  
  5. Host: localhost:8082  
  6. Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2  
  7. Connection: keep-alive  
  8. Content-Length: 448  
  9.  
  10. < env:Envelope xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'> 
  11.    < env:Header/> 
  12.    < env:Body> 
  13.       < mh:countUser xmlns:mh='http://array'> 
  14.          < arrayOfUser_1 xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'> 
  15.             < value> 
  16.                < birthDay>2006-11-08T22:36:13< /birthDay> 
  17.                < name>張三< /name> 
  18.                < phone>027-88888888< /phone> 
  19.             < /value> 
  20.             < value> 
  21.                < birthDay>2006-11-08T22:36:13  
  22.                < name>lisi  
  23.                < phone xsi:nil='1'/> 
  24.             < /value> 
  25.          < /arrayOfUser_1> 
  26.       < /mh:countUser> 
  27.    < /env:Body> 

從傳送的數據來看,就是一個符合soap規范的xml文檔.既然是xml文檔,也就是說可以用jdom api 來操作它
事實上就是這樣,在J2EE web service開發中,soap api 可以跟 jdom api混合使用。

【編輯推薦】

  1. 實現數據庫表字j2ee應用
  2. j2ee web service開發(二)動態代理與動態調用
  3. j2ee web service開發(一) 映射數組復雜類型
  4. J2ee學習經驗和流程
  5. 快速開發EJB和J2EE Web Applic
責任編輯:book05 來源: csdn
相關推薦

2009-06-22 10:09:00

J2EE web se

2009-06-22 10:59:00

J2EE web se

2009-06-22 10:14:00

J2EE web se

2009-06-22 09:56:00

J2EE web se

2009-06-22 09:48:00

J2EE web se

2009-06-22 11:50:00

J2EE Web應用快速開發

2009-06-18 16:13:14

J2EE開發

2009-06-10 13:37:06

J2EE可伸縮性J2EE靈活性J2EE維護

2009-06-10 14:10:23

J2EE學習J2EE是什么

2009-06-22 17:09:00

J2EE項目開發流程

2009-06-23 08:06:46

J2EE體系架構J2EE模型J2EE設計模式

2009-06-23 16:48:26

J2EE常見問題J2EE平臺

2009-06-11 17:06:11

J2EE歷史Java EE概述

2009-06-16 11:14:00

Hibernate+SJ2EE應用開發

2011-07-21 14:23:03

J2EE

2009-06-11 17:11:07

J2EE設計模式工廠模式

2009-06-22 17:34:40

J2EE架構

2009-06-18 15:54:57

J2EE下使用JNDI

2009-06-23 08:12:48

J2EE調用存儲過程

2009-06-22 17:05:41

Java EEJava企業應用
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 香蕉视频在线播放 | 欧美a在线 | 麻豆一区| 精品免费国产一区二区三区四区介绍 | 久久久久亚洲精品 | 一区二区电影 | 亚洲成人av在线播放 | 成人毛片视频在线播放 | 粉嫩av久久一区二区三区 | 精品久久久久久久久久久久久久 | 国产精品九九九 | 久久国产精品亚洲 | 日韩中文字幕视频在线 | 国产.com | 国产精品成人一区二区 | 中文字幕国产 | 精品国产综合 | 91精品国产综合久久婷婷香蕉 | 青青久久av北条麻妃海外网 | 久久一久久 | 久久精品欧美一区二区三区不卡 | 黄色片视频免费 | 免费爱爱视频 | 亚洲一区中文字幕 | 99精品国产一区二区青青牛奶 | 久久国产欧美一区二区三区精品 | 中文字幕久久精品 | 久久久久国产一区二区三区四区 | 仙人掌旅馆在线观看 | 国产精品久久久久久吹潮 | 日日精品 | 国产乱码久久久久久 | 成人在线中文字幕 | 国产精品成av人在线视午夜片 | 日韩人体在线 | 亚洲日本欧美日韩高观看 | 免费观看www7722午夜电影 | 国产精品国色综合久久 | 一区视频在线免费观看 | 欧美美女二区 | 亚洲国产精品久久久久秋霞不卡 |