日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

jaxws-webservice编程续

發布時間:2025/3/20 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 jaxws-webservice编程续 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

前言:

在第二天的學習中,我們了解了jaxws如何返回一個List<String>類型的相對復雜的java數據類型給客戶端,在今天,我們將更深入一步做一個真正的Java復雜類型的Webservice的傳輸調用。

目標:

1. 用Webservice調用和返回Java的復雜類型(比如說:List<Student>這樣的數據)

一、編寫Server端

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瀏覽器,輸入:

http://localhost:9090/JaxWSSample/JavaComplexTypeService?wsdl ,可以看到如下的wsdl輸出。

一、編寫Client端

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圖片


轉載于:https://my.oschina.net/leejayblog/blog/291786

總結

以上是生活随笔為你收集整理的jaxws-webservice编程续的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。