5天學會jaxws-webservice程式設計第三天
前言:
在第二天的學習中,我們瞭解了jaxws如何返回一個List<String>型別的相對複雜的java資料型別給客戶端,在今天,我們將更深入一步做一個真正的Java複雜型別的Webservice的傳輸呼叫。
目標:
1. 用Webservice呼叫和返回Java的複雜型別(比如說:List<Student>這樣的資料)
1.1製作JAVA BEAN-Person物件
這次我們將返回一個List<Person>型別給客戶端。
先來製作我們的Person類,程式碼如下:
package ctsjavacoe.ws.fromjava.bean; import java.io.*; public class Person implements Serializable { private String name = ""; private int age = 0; private String gender = ""; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } } |
1.2製作Service端
package ctsjavacoe.ws.fromjava; import java.util.ArrayList; import java.util.List; import ctsjavacoe.ws.fromjava.bean.*; import javax.jws.WebMethod; import javax.jws.WebService; @WebService public class JavaComplexType { @WebMethod public List<Person> getPerson() { List<Person> testList = new ArrayList<Person>(); Person p = new Person(); p.setName("abc"); p.setAge(31); p.setGender("female"); testList.add(p); p = new Person(); p.setName("def"); p.setAge(33); p.setGender("male"); testList.add(p); p = new Person(); p.setName("aaa"); p.setAge(26); p.setGender("female"); testList.add(p); return testList; } } |
該Service沒有Input,只有一個Output,該Output為一個List<Person>型別,它將返回一個List給客戶端,該List中有三條Person結構的資料
1.2編譯
此處的Webservice Server端生成的全部詳細過程請參見“第一天”教程中的描述。
1. 用wsgen來編譯生成相關的java檔案,wsdl檔案與xsd檔案;
2. 將編譯時輸出至wssrc目錄的檔案拷貝至src目錄;
3. 修改WebContent\WEB-INF目錄下的sun-jaxws.xml檔案,加入:
<endpoint name='JavaComplexType' implementation='ctsjavacoe.ws.fromjava.JavaComplexType' url-pattern='/JavaComplexTypeService' /> |
4.修改WebContent\WEB-INF目錄下的web.xml加入:
<servlet> <servlet-name>JavaComplexType</servlet-name> <servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class> <load-on-startup>2</load-on-startup> </servlet> <servlet-mapping> <servlet-name>JavaComplexType</servlet-name> <url-pattern>/JavaComplexTypeService</url-pattern> </servlet-mapping> |
5. 將JaxWSProject的WebContent目錄下的檔案拷貝至tomcat的webapps\JaxWSSample
目錄下,並選擇全部覆蓋;
6.重啟Tomcat;
7.開啟一個IE瀏覽器,輸入:
2.1編譯前的準備
此處的Webservice Client端生成的全部詳細過程請參見“第一天”教程中的描述。
1. 把Server端生成的wsdl與xsd拷貝至client工程的wsdl目錄下
2. 將ctsjavacoe.ws.fromjava.bean.Person這個類拷貝到client工程的相應的src目錄下,因為在第二天中,我們使用的是List<String>,String對應的xsd中的string是webservice的一個基本型別,因此不需要在客戶端再造型。
而我們這次的返回是一個List<Person>,這個person類可不是xsd所本身擁有的資料型別,因此當客戶端得到webservice的返回時,需要在客戶端對這個Person做造型,而造型時需要有一個Object來告訴客戶端我造出的型是什麼東東,因此這邊比第二天教程中多出了一步,即手工拷貝Person類至Client工程。
3. 由於我們繼續使用polling方式來書寫非同步的客戶端呼叫,因此我們還需要開啟binding.xml檔案,更改一下:
<?xml version="1.0" encoding="UTF-8"?> <bindings xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" wsdlLocation="wsdl/JavaComplexTypeService.wsdl" xmlns="http://java.sun.com/xml/ns/jaxws"> <bindings node="wsdl:definitions"> <enableAsyncMapping>true</enableAsyncMapping> </bindings> </bindings> |
4. 使用wsimport命令來生成client端呼叫時所需要的“控制代碼”
5. 把生成的控制代碼中的JavaComplexTypeService.java這個檔案開啟,編輯它,將裡面兩處Url url=……的地方改成你的Server端實際的Webservice的wsdl地址,而預設它是指向一個本地的wsdl檔案的路徑
2.2書寫Test客戶端呼叫Webservice的Server端
package ctsjavacoe.ws.fromjava; import javax.xml.ws.Response; import java.util.*; import ctsjavacoe.ws.fromjava.bean.*; public class JavaComplexTypePollingClient { public static void main(String[] args) { JavaComplexTypeService service = new JavaComplexTypeService(); JavaComplexType port = service.getJavaComplexTypePort(); Response<GetPersonResponse> getPersonAsync = port.getPersonAsync(); while (!getPersonAsync.isDone()) { System.out.println("is not done"); } List<Person> rtnList = new ArrayList<Person>(); try { GetPersonResponse getPersonResponse = getPersonAsync.get(); rtnList = getPersonResponse.getReturn(); System.out.println("return size======" + rtnList.size()); for (Person p : rtnList) { System.out.println("person=====" + p.getName() + " " + p.getAge() + " " + p.getGender()); } } catch (Exception ex) { ex.printStackTrace(); } } } |
可以看到jaxws已經幫我們把List<Person>轉型過來了,我們只需要用相應的泛型:
List<Person>rtnList = new ArrayList<Person>()去把它接出來就行了。
執行該客戶端,得到如下輸出:
通過第二天,第三天的學習,我們已經基本掌握了jaxws一般的應用,對於java複雜型別的傳輸有了全面的瞭解。
在未來兩天的學習中,我們將使用jaxws的MTOM feature,用webservice來傳輸二進位制檔案,比如說:jpg/gif圖片相關推薦
5天學會jaxws-webservice程式設計第三天
前言: 在第二天的學習中,我們瞭解了jaxws如何返回一個List<String>型別的相對複雜的java資料型別給客戶端,在今天,我們將更深入一步做一個真正的Java複雜型別的Webservice的傳輸呼叫。 目標: 1. 用Webservice呼叫和返回J
5天學會jaxws-webservice程式設計第四天
前言: 從今天開始,我們將學習如何使用Webservice進行二進位制附件的傳輸,這一課題將分成兩個部分: l 第一部分實現Client上傳一個附件到服務端,服務端接收Client傳過來的二進位制附件後儲存至本地。 第二部分實現Client上傳一個Java複雜型別,
5天學會jaxws-webservice程式設計第一天:學習筆記
SOA(Service-Oriented Architecture 面向服務架構)。 SOA 系統原型的一個典型例子是通用物件請求代理體系結構(Common Object Request Broker Architecture,CORBA)。 SOA通過使用基於XML
5天學會jaxws-webservice程式設計第二天
第二天 前言: 大家都知道,僅僅輸入或者返回一個簡單型的String, Int在實際工作中沒有太大的意義。很多時候我們的Service需要返回類似於List<Person>,List<String>這樣的資料結構。 我們現在就一起來看用Jaxws怎
十天學會ASP.net之第三天
學習目的:掌握WEB控制元件的使用(一) 或許你會問,為什麼需要WEB控制元件?WEB控間就好像VB裡面的控間,可以在程式的任何地方引用,修改所有屬性,有了它的配合才能完成程式碼分離。想一下, 如果還是以前的HTML控間,我們當我們需要在某一個地方顯示一段資料庫的內容
webservice(第三天)(包含一個真實專案,讀取EXCEL表格中的資料到資料庫中,其中涉及真實的隱私資料不能公開資料集)
主要內容: CXF的介紹、安裝和配置 CXF釋出SOAP協議的服務 CXF+Spring整合釋出SOAP的服務 CXF釋出REST服務 什麼是REST CXF+Spring整合釋出REST服務 綜合案例 CXF介紹: cxf是一個開源的webservice框架,提供很多完善
「七天自制PHP框架」第三天:PHP實現的設計模式
爭論 框架 啟動 興趣 註意 end php imp close 往期回顧:「七天自制PHP框架」第二天:模型與數據庫,點擊此處 原文地址:http://www.cnblogs.com/sweng/p/6624845.html,歡迎關註:編程老頭 為什麽要使用設計模式?
3天學會MaxScript教程之(第二三天:編寫一個高階Max頂點動畫back到Texture的外掛)
3天學會MaxScrip的第一天在這裡:點選開啟連結有了第一天的知識和初步認識,我們就來製作一個高階點的指令碼外掛吧。max指令碼其實非常簡單,主要知道語法就可以了,邏輯難度幾乎為零。首先來看這個外掛的效果做動畫其實有很多種方式,除了骨骼,目標變形,物理解算外,還有BackT
ios7版 30天精通iPhone手機程式設計 第1天 ios7開發基礎知識點
(1)專案程式模板簡介 Master-Detail Application。可以構建樹形結構導航模式應用,生成的程式碼中包含了導航控制器和表檢視控制器等。 OpenGL Game。可以構建基於
5天學會使用NoahWeb表現層製作動態網站(第三天)
今天是第三天了,使用NoahWeb我們的目的是製作動態站點,所以,我們來學習一下怎麼通過設計器將站點連線上資料庫。呵呵,把昨天建好的站點用設計器開啟,看到整個設計器的介面會如下所示:在選單中找到“資源”然後選擇“資料庫連線”然後點開,看到的就如下圖:出現數據庫連線的配置介面,
【轉載】5天不再懼怕多線程——第三天 互斥體
多線程 str .get 整理 tle ram nbsp line 一點 沒想到我的前兩篇文章還挺受歡迎的,謝謝大家,今天整理下Mutex的使用。 一:Mutex 首先看下MSDN對它的解釋: 不錯,出現了一個亮點,可用於“進程間同步“,既然進程間都可以同步,那
《JavaScript高階程式設計(第3版)》 第三天 引用型別
/*====================================================== *@author wf_Huang *@Time 2018/9/18 20:06 *=======================================
嵌入式Linux學習筆記第三天(檔案程式設計)
嵌入式Linux學習筆記第三天 ——檔案程式設計 嵌入式Linux檔案程式設計有兩種方式:系統呼叫和庫函式。常用的檔案
jax-ws之webservice security(安全)教程第三天
前言: 在今天的學習中,我們講開始過渡到一個真正的websecurity例子。 第二天中我們知道了如何使用handler來處理客戶端提交上來的使用者名稱與密碼,而在今天的學習中,我們將會使用服務端預先配置的使用者名稱與密碼來authenticate客戶端提交上來的值。 相對
第一個沖刺周期-第三天
指針 錯誤 相關 昨天 poi 學習android 調用 效果 star 昨天進行數據庫的部分操作並學習Android入門相關知識。 今天準備看一下隊友的主頁設計並進行完善。 遇到的問題:加入tabhost時位置及大小有些不對,經過修改讓它固定在首部。 還有常見的空指針異常
php函數每日學習二十個(第三天)
大小寫 ace strstr tex str 個數 第三天 替換函數 rst 1,substr() 字符串截取 2,str_replace()字符串替換函數,區分大小寫 3,str_ireplace() 字符串替換函數,不區分大小寫 4,substr_count()統計一個
站立會議第三天
技術分享 src img hello 第三天 程序 androi 出了 studio 1.站立會議內容 經過昨天一天的研究,我們下載好了Android Studio,並且成功地建立了一個項目,調試出了手機的Hello World界面,今天我們就要編寫程序了。 照片:
團隊作業8----第二次項目沖刺(Beta階段) 第三天
最新進展 進展 gif Coding ima 技術 小結 eight ron 沖刺第三天 一、Daily Scrum Meeting照片 二、每個人的工作 1.昨天已完成的任務。 昨天完成服務器上的數據庫部署與Json數據傳輸 2.今天計劃完成的任務。 今
第二次項目沖刺(Beta階段)--第三天
ble log 軟件 left 進展 src 變更 cond 第三天 一、站立式會議照片 二、項目燃盡圖 三、項目進展 隊員 ID 貢獻比 王若凡 201421123022 20% 呂誌哲 201421123021 16% 歐陽勇 20
linux第三天
com 運行級別 zip2 bsp 工作 進行 插入模式 grub 部分 一 正文處理命令及tar命令 使用cat命令進行文件的縱向合並 兩種文件的縱向合並方法 : tar命令:將多個文件(也可能包括目錄,因為目錄本身也是文件)放在一起存放到一個磁帶或磁盤歸檔文件中。並