程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java6 WebService使用復雜對象

Java6 WebService使用復雜對象

編輯:關於JAVA

復雜對象可表示的語義比簡單對象強大很多,這裡看看在Java6的WebService中如何使用復雜對象參數。

這裡的參數分兩類,一類是入參,一類是返回值。

復雜對象在並不像想象中那麼簡單,其中還有一些玄機。請看實例:

1、開發服務,統統在服務端

package lavasoft.server;
import javax.jws.WebService;
import javax.xml.ws.Endpoint;
/**
* Java6開發的WebService服務端
*
* @author leizhimin 2009-11-16 10:24:13 
*/
@WebService
public class Java6WS {
         //返回一個復雜對象
         public UserBean doSomething1(String username, String address, boolean flag) {
                 return new UserBean(username, address, flag);
         }
         //接收一個復雜對象
         public String doSomething2(Foo foo) {
                 return foo.toString();
         }
         public static void main(String[] args) {
                 //發布一個WebService
                 Endpoint.publish("http://192.168.14.117:9999/java6ws/Java6WS", new Java6WS());
         }
}

package lavasoft.server;
/**
* 用戶信息
*
* @author leizhimin 2009-11-16 16:43:35
*/
public class UserBean {
         private String username;
         private String address;
         private boolean flag;
         public UserBean() {
         }
         public UserBean(String username, String address, boolean flag) {
                 this.username = username;
                 this.address = address;
                 this.flag = flag;
         }
         public String getUsername() {
                 return username;
         }
         public void setUsername(String username) {
                 this.username = username;
         }
         public String getAddress() {
                 return address;
         }
         public void setAddress(String address) {
                 this.address = address;
         }
         public boolean isFlag() {
                 return flag;
         }
         public void setFlag(boolean flag) {
                 this.flag = flag;
         }
         @Override
         public String toString() {
                 return "UserBean{" +
                                 "username='" + username + '\'' +
                                 ", address='" + address + '\'' +
                                 ", flag=" + flag +
                                 '}';
         }
}

package lavasoft.server;
/**
* Created by IntelliJ IDEA.
*
* @author leizhimin 2009-11-16 17:09:46 
*/
public class Foo {
         private String name;
         private String sex;
         public Foo() {
         }
         public Foo(String name, String sex) {
                 this.name = name;
                 this.sex = sex;
         }
         public String getName() {
                 return name;
         }
         public void setName(String name) {
                 this.name = name;
         }
         public String getSex() {
                 return sex;
         }
         public void setSex(String sex) {
                 this.sex = sex;
         }
         @Override
         public String toString() {
                 return "Foo{" +
                                 "sex='" + sex + '\'' +
                                 ", name='" + name + '\'' +
                                 '}';
         }
}

2、生成客戶端代碼

可以清楚的看出,在客戶端代碼中,已經生成了服務接口和服務實現類,還生成了UserBean和Foo兩個類,而這兩個類和服務端的內容不同。

3、寫客戶端測試代碼

package lavasoft;
import lavasoft.wsclient.Foo;
import lavasoft.wsclient.Java6WS;
import lavasoft.wsclient.Java6WSService;
import lavasoft.wsclient.UserBean;
/**
* 測試Java6 WS生成的客戶端代碼
*
* @author leizhimin 2009-11-16 17:05:00 
*/
public class TestClient {
         public static void main(String[] args) {
                 //創建一個客戶端服務對象
                 Java6WS java6WS = new Java6WSService().getJava6WSPort();
                 System.out.println("----------java6WS.doSomething1-------------");
                 //調用服務方法,並得到方法返回值 
                 UserBean userBean = java6WS.doSomething1("zhangsan", "華中路", true);
                 //打印服務的返回值 
                 System.out.println(userBean.toString());
                 System.out.println(userBean.getUsername() + " " + userBean.getAddress() + " " + userBean.isFlag());
                 System.out.println("----------java6WS.doSomething2-------------");
                 Foo f = new Foo();
                 f.setName("李四");
                 f.setSex("Man");
                 String sf = java6WS.doSomething2(f);
                 System.out.println(sf);
         }
}

4、執行客戶端

執行前先啟動服務端。

執行結果如下:

可以看出,測試很成功。

5、總結

這裡面其實有些細節,需要說明白:

1)、對於復雜對象,必須有一個不帶參數的構造方法。

2)、服務端覆蓋Object的方法不能在客戶端復原,比如toString方法。

3)、服務端的帶參數構造方法在客戶端失效。

以上三點是非常重要的,如果不知道會很郁悶,老出錯還找不到原因。

出處:http://lavasoft.blog.51cto.com/62575/228152

本文配套源碼

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved