1. 程式人生 > >5天學會jaxws-webservice程式設計第三天

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

       }

    }

}

當我們在eclipse裡鍵入getPersonResponse.getReturn()

可以看到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命令:將多個文件(也可能包括目錄,因為目錄本身也是文件)放在一起存放到一個磁帶或磁盤歸檔文件中。並