熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java開源技術 >> 正文

Weblogic Server ant開發Web Service二(圖)

2013-11-23 20:38:59  來源: Java開源技術 

  在VB下調用Web Service
  
  下面我在VB環境下來調用下這個Web Service筆者使用的是Visual Basic 要在VB下調用Web Service需要先安裝Microsoft SOAP toolkit
  
  新建一個VB工程然後把Microsoft Soap Type Library引用進來如下圖
  
 

  新建一個form添加一個按鈕command在form源代碼窗口中整個拷貝如下代碼
  
  Dim soap As MSSOAPLibSoapClient
  Private Sub Command_Click()
  
  MsgBox soapsayHello()
  MsgBox soapwelcome(老Z)
  
  If Err <> Then
  MsgBox Web Service調用失敗 + ErrDescription
  End If
  End Sub
  
  Private Sub Form_Load()
  Set soap = New MSSOAPLibSoapClient
  
  On Error Resume Next
  
  Call soapmssoapinit(//localhost:/WSDemo/HelloWorldWS?WSDL)
  
  If Err <> Then
  MsgBox 初始化SOAP失敗 + ErrDescription
  End If
  
  End Sub
  
  然後運行工程點擊窗口上的按鈕就開始調用前面部署的Web Service(確保Weblogic Server在運行中)成功的話會得到如下圖的兩個MessageBox
  
 educitycn/img_///jpg >
   educitycn/img_///jpg >

  使用非內建數據類型
  
  前面例子中的Web Service方法中使用的參數和返回值都是String類似Stringint等數據類型是屬於Weblogic web service所支持的內建類型關於Weblogic web service所支持的內建數據類型請參見#
  
  所支持的XML非內建類型請參見
  
  #
  
  所支持的Java非內建數據類型請參見
  
  #
  
  WebLogic Server能夠對內建數據類型進行XML與Java表示之間的轉換但是如果你在web service操作中使用了非內建數據類型那麼你必須提供以下信息以確保weblogic server能夠正確地進行轉換
  
  用於處理數據的Java表示與XML之間的轉換的序列化類
  
  包含了數據類型Java表示的Java類
  
  數據類型的XML Schema表示
  
  webservicesxml部署描述文件中的數據類型映射信息
  
  Weblogic Server中帶有servicegen和autotype Atn任務這兩個任務通過對web service的無狀態EJB或者Java類後端組件的內省從而自動生成上述部件上述Ant任務能夠處理許多非內建數據類型所以大多數的開發者並不需要手工生成上述的部件
  
  有時你可能也需要手工去創建非內建數據類型部件因為你的數據類型可能很復雜以致Ant任務不能正確生成前述部件你也可能想要自己控制數據在XML和Java表示之間的轉換過程而不依賴Weblogic Server所使用的缺省轉換程序
  
  本節將演示在Weblogic web service中如何處理非內建(自定義)的數據類型
  
  我們先編寫一個數值Bean類UserInfo如下
  
  package comwnetwwsdemo;
  
  import javautil*;
  
  public class UserInfo{
  private Integer userid;
  private String username;
  private String sex;
  private Date birthday;
  private int level;
  private double salary;
  private telcodes list;
  
  public UserInfo(){}
  
  public Integer getUserid(){
  return userid;
  }
  
  public void setUserid(Integer userid){
  thisuserid = userid;
  }
  
  public String getUsername(){
  return username;
  }
  
  public void setUsername(String username){
  thisusername = username;
  }
  
  public String getSex(){
  return sex;
  }
  
  public void setSex(String sex){
  thissex = sex;
  }
  
  public Date getBirthday(){
  return birthday;
  }
  
  public void setBirthday(Date birthday){
  thisbirthday = birthday;
  }
  
  public int getLevel(){
  return level;
  }
  
  public void setLevel(int level){
  thislevel = level;
  }
  
  public double getSalary(){
  return salary;
  }
  
  public void setSalary(double salary){
  thissalary = salary;
  }
  
  public List getTelcodes(){
  return telcodes;
  }
  
  public void setTelcodes (List telcodes){
  this telcodes = telcodes;
  }
  
  }
  
  在前文中的後端組件類HelloWorldWSjava中增加一個方法
  
  public UserInfo getUserInfo(Integer userid){
  UserInfo userinfo = new UserInfo();
  userinfosetUserid(userid);
  userinfosetUsername(李澤林);
  userinfosetSex();
  userinfosetBirthday(new Date());
  userinfosetLevel();
  userinfosetSalary();
  List telcodes = new ArrayList();
  telcodesadd();
  telcodesadd();
  userinfosetTelcodes (telcodes);
  return userinfo;
  }
  
  在這個方法裡返回值是UserInfo這是我們前面定義的數值Bean由於這是非內建類型而且也不屬於受支持的非內建類型所以需要我們必須自己來處理XML和UserInfo Java表示數據類型之間的轉換
  
  在本文的例子中我們使用Weblogic Server的autotype任務來做這件事情我們先在build目錄建一個autotype目錄然後在前文中ant完整腳本中的compile任務之後增加下述腳本
  
  <target name=gentypeinfo>
  <autotype javatypes=comwnetwwsdemoUserInfo
  targetNamespace=
  packageName=comwnetwwsdemo
  destDir=/autotype
  keepGenerated=true>
  <classpath refid=classpath/>
  </autotype>
  <copy todir=/classes>
  <fileset dir=/autotype>
  <include name=**/*class/>
  </fileset>
  </copy>
  </target>  
  
  autotype Ant任務有幾個常用屬性下面簡要說明下
  
  javatypes需要進行類型轉換的非內建(自定義)數據類型java類注意取值是全限定類名不需要帶上java或者class擴展名如果存在多個這樣的數據類型類用逗號隔開
  
  targetNamespace在對數據類型映射到XML的時候使用的命名空間
  
  packageName生成的序列化相關類的封裝包
  
  destDir生成的序列化相關類存放的目錄
  
  keepGenerated是否保留中間java源文件取值為true或者false
  
  關於autotype任務的詳細信息請參考
  
  #
  
  上述ant任務成功運行後就會生成build/autotype/目錄下生成typesxml文件以及按包封裝的數據轉換類的源文件和class文件
  
  由於增加了自定義數據類型所以我們還得更新sourcewsdd任務腳本以下是增加了自定義數據類型處理後的sourcewsdd任務腳本
  
  <target name=genwsdd>
  <sourcewsdd javaSource=/com/wnetw/ws/demo/HelloWorldWSjava
  typesInfo=/autotype/typesxml
  ddFile=/wsddfiles/webservicesxml
  wsdlFile=/wsddfiles/HelloWorldWSwsdl
  serviceURI=/HelloWorldWS>
  <classpath refid=classpath/>
  </sourcewsdd>
  </target>
  
  跟以前的腳本相比增加了typesInfo屬性來指定自定義數據類型的XML描述文件
  
  增加了對自定義數據類型支持後的完整腳本請參考本文代碼下載文件
  
  按照第一節所述方法運行ant腳本build_wls_allxml後再部署buildpplications目錄下的HelloWorldWSear就可以按照以前說的方法進行測試了
  
  這一次在Weblogic Server自動生成的web service測試主頁
  
 //localhost:/WSDemo/HelloWorldWS
  
  可以發現多了一個叫getUserInfo的方法連接進入此方法的調用測試頁面調用此方法後就可以看到此web service方法的調用結果以下是結果截圖
  
 educitycn/img_///jpg >

  從調用測試結果頁面可以看到這一次的Return Value是
  
  comwnetwwsdemoUserInfod
  
  這正是我們的web service方法返回值類型類型的一個對象圖中的下面也以SOAP消息的形式描述了調用的輸入和返回結果
  
  我們接著修改測試類HelloWorldWSTestjava
From:http://tw.wingwit.com/Article/program/Java/ky/201311/28823.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.