三、 複雜物件類型的WebService

來源:互聯網
上載者:User

1、這次我們編寫複雜點的WebService方法,返回的資料是我們定義屬性帶getter、setter方法JavaBean,一維數組、二維數組等。

看代碼:

代碼import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.util.Random;import data.User;/** * <b>function:</b>複雜類型資料的WebService:位元組數組、返回一維int數組、二維String數組及自訂JavaBean對象等 * @author hoojo * @createDate 2011-1-13 下午03:34:52 * @file ComplexTypeService.java * @package  * @project Axis2WebService * @blog http://blog.csdn.net/IBM_hoojo * @email hoojo_@126.com * @version 1.0 */public class ComplexTypeService {public String upload4Byte(byte[] b, int len) {String path = "";FileOutputStream fos = null;try {String dir = System.getProperty("user.dir");File file = new File(dir + "/" + new Random().nextInt(100) + ".jsp");fos = new FileOutputStream(file);fos.write(b, 0, len);path = file.getAbsolutePath();System.out.println("File path: " + file.getAbsolutePath());} catch (Exception e) {e.printStackTrace();} finally {try {fos.close();} catch (IOException e) {e.printStackTrace();}}return path;}public int[] getArray(int i) {int[] arr = new int[i];for (int j = 0; j < i; j++) {arr[j] = new Random().nextInt(1000);}return arr;}public String[][] getTwoArray() {return new String[][] { { "中國", "北京" }, { "日本", "東京" }, { "中國", "上海", "南京" } };}public User getUser() {User user = new User();user.setAddress("china");user.setEmail("jack@223.com");user.setName("jack");user.setId(22);return user;}}

上面的WebService服務分別是傳遞位元組完成資料上傳,返回一維int數組和二維字串數組,以及返回User JavaBean對象。

下面看看User Bean代碼:

代碼package data;import java.io.Serializable;/** * <b>function:</b>User Entity * @author hoojo * @createDate Dec 16, 2010 10:20:02 PM * @file User.java * @package com.hoo.entity * @project AxisWebService * @blog http://blog.csdn.net/IBM_hoojo * @email hoojo_@126.com * @version 1.0 */public class User implements Serializable {private static final long serialVersionUID = 677484458789332877L;private int id;private String name;private String email;private String address;//getter/setter@Overridepublic String toString() {return this.id + "#" + this.name + "#" + this.email + "#" + this.address;}}

值得注意的是這個User對象的package是data,如果是其它的package,你就需要在tomcat目錄下的webapps中的axis2的WEB-INF目錄下建立一個data目錄,和你的User對象的目錄保持一致。否則你的WebService將會出現ClassNotFontException異常。然後重啟你的tomcat,雖然axis2支援熱部署。

2、編寫調用上面WebService的用戶端代碼,代碼如下:

代碼package com.hoo.service;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import javax.xml.namespace.QName;import org.apache.axis2.addressing.EndpointReference;import org.apache.axis2.client.Options;import org.apache.axis2.rpc.client.RPCServiceClient;import com.hoo.entity.User;/** * <b>function:</b>複雜類型資料WebService用戶端調用代碼 * @author hoojo * @createDate 2011-1-13 下午03:36:38 * @file ComplexTypeServiceClient.java * @package com.hoo.service * @project Axis2WebService * @blog http://blog.csdn.net/IBM_hoojo * @email hoojo_@126.com * @version 1.0 */public class ComplexTypeServiceClient {public static void main(String[] args) throws IOException {RPCServiceClient client = new RPCServiceClient();Options options = client.getOptions();String address = "http://localhost:8080/axis2/services/ComplexTypeService";EndpointReference epr = new EndpointReference(address);options.setTo(epr);QName qname = new QName("http://ws.apache.org/axis2", "upload4Byte");String path = System.getProperty("user.dir");File file = new File(path + "/WebRoot/index.jsp");FileInputStream fis = new FileInputStream(file);int len = (int) file.length();byte[] b = new byte[len];int read = fis.read(b);//System.out.println(read + "#" + len + "#" + new String(b));fis.close();Object[] result = client.invokeBlocking(qname, new Object[] { b, len }, new Class[] { String.class });System.out.println("upload:" + result[0]);qname = new QName("http://ws.apache.org/axis2", "getArray");result = client.invokeBlocking(qname, new Object[] { 3 }, new Class[] { int[].class });int[] arr = (int[]) result[0];for (Integer i : arr) {System.out.println("int[] :" + i);}qname = new QName("http://ws.apache.org/axis2", "getTwoArray");result = client.invokeBlocking(qname, new Object[] {}, new Class[] { String[][].class });String[][] arrStr = (String[][]) result[0];for (String[] s : arrStr) {for (String str : s) {System.out.println("String[][]: " + str);}}qname = new QName("http://ws.apache.org/axis2", "getUser");result = client.invokeBlocking(qname, new Object[] {}, new Class[] { User.class });User user = (User) result[0];System.out.println("User: " + user);}}

上面的代碼運行後的結果是:

upload:D:\tomcat-6.0.28\bin\28.jsp

int[] :548

int[] :201

int[] :759

String[][]: 中國

String[][]: 北京

String[][]: 日本

String[][]: 東京

String[][]: 中國

String[][]: 上海

String[][]: 南京

User: 22#jack#jack@223.com#china

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.