3、在VB下調用Web Service
下面我在VB環境下來調用下這個Web Service,筆者使用的是Visual Basic 6.0,要在VB下調用Web Service需要先安裝Microsoft SOAP toolkit。
新建一個VB工程,然后把Microsoft Soap Type Library引用進來,如下圖:
開發Web Service二(圖)(圖一)" />
新建一個form1,添加一個按鈕command1,在form1源代碼窗口中整個拷貝如下代碼:
Dim soap As MSSOAPLib.SoapClient
Private Sub Command1_Click()
MsgBox soap.sayHello()
MsgBox soap.welcome("老Z")
If Err <> 0 Then
MsgBox "Web Service調用失。 " + Err.Description
End If
End Sub
Private Sub Form_Load()
Set soap = New MSSOAPLib.SoapClient
On Error Resume Next
Call soap.mssoapinit("http://localhost:7001/WSDemo/HelloWorldWS?WSDL")
If Err <> 0 Then
MsgBox "初始化SOAP失。 " + Err.Description
End If
End Sub
然后運行工程,點擊窗口上的按鈕就開始調用前面部署的Web Service(確保Weblogic Server在運行中),成功的話會得到如下圖的兩個MessageBox:
四、使用非內建數據類型
前面例子中的Web Service方法中使用的參數和返回值都是String,類似String,int等數據類型是屬于Weblogic web service所支持的內建類型,關于Weblogic web service所支持的內建數據類型請參見:http://e-docs.bea.com/wls/docs81/webserv/implement.html#1054236
所支持的XML非內建類型請參見:
http://e-docs.bea.com/wls/docs81/webserv/assemble.html#1060805
所支持的Java非內建數據類型請參見:
http://e-docs.bea.com/wls/docs81/webserv/assemble.html#1068595
WebLogic Server能夠對內建數據類型進行XML與Java表示之間的轉換。但是,如果你在web service操作中使用了非內建數據類型,那么你必須提供以下信息,以確保weblogic server能夠正確地進行轉換。
用于處理數據的Java表示與XML之間的轉換的序列化類;
包含了數據類型Java表示的Java類;
數據類型的XML Schema表示;
web-services.xml部署描述文件中的數據類型映射信息。
Weblogic Server中帶有servicegen和autotype Atn任務,這兩個任務通過對web service的無狀態EJB或者Java類后端組件的內省,從而自動生成上述部件。上述Ant任務能夠處理許多非內建數據類型,所以大多數的開發者并不需要手工生成上述的部件。
有時,你可能也需要手工去創建非內建數據類型部件。因為你的數據類型可能很復雜,以致Ant任務不能正確生成前述部件。你也可能想要自己控制數據在XML和Java表示之間的轉換過程,而不依賴Weblogic Server所使用的缺省轉換程序。
本節將演示在Weblogic web service中如何處理非內建(自定義)的數據類型。
我們先編寫一個數值Bean類UserInfo,如下:
package com.wnetw.ws.demo;
import java.util.*;
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){
this.userid = userid;
}
public String getUsername(){
return username;
}
public void setUsername(String username){
this.username = username;
}
public String getSex(){
return sex;
}
public void setSex(String sex){
this.sex = sex;
}
public Date getBirthday(){
return birthday;
}
public void setBirthday(Date birthday){
this.birthday = birthday;
}
public int getLevel(){
return level;
}
public void setLevel(int level){
this.level = level;
}
public double getSalary(){
return salary;
}
public void setSalary(double salary){
this.salary = salary;
}
public List getTelcodes(){
return telcodes;
}
public void setTelcodes (List telcodes){
this. telcodes = telcodes;
}
}
在前文中的后端組件類HelloWorldWS.java中增加一個方法:
public UserInfo getUserInfo(Integer userid){
UserInfo userinfo = new UserInfo();
userinfo.setUserid(userid);
userinfo.setUsername("李澤林");
userinfo.setSex("男");
userinfo.setBirthday(new Date());
userinfo.setLevel(2);
userinfo.setSalary(1000.51);
List telcodes = new ArrayList();
telcodes.add("123");
telcodes.add("321");
userinfo.setTelcodes (telcodes);
return userinfo;
}
在這個方法里,返回值是UserInfo,這是我們前面定義的數值Bean,由于這是非內建類型,而且也不屬于受支持的非內建類型,所以需要我們必須自己來處理XML和UserInfo Java表示數據類型之間的轉換。
在本文的例子中,我們使用Weblogic Server的autotype任務來做這件事情。我們先在build目錄建一個autotype目錄,然后在前文中ant完整腳本中的compile任務之后增加下述腳本:
<target name="gentypeinfo">
<autotype javatypes="com.wnetw.ws.demo.UserInfo"
targetNamespace=""
packageName="com.wnetw.ws.demo"
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任務的詳細信息請參考:
http://e-docs.bea.com/wls/docs81/webserv/anttasks.html#1080062
上述ant任務成功運行后就會生成build/autotype/目錄下生成types.xml文件以及按包封裝的數據轉換類的源文件和class文件。
由于增加了自定義數據類型,所以我們還得更新source2wsdd任務腳本,以下是增加了自定義數據類型處理后的source2wsdd任務腳本:
<target name="genwsdd">
<source2wsdd javaSource="/com/wnetw/ws/demo/HelloWorldWS.java"
typesInfo="/autotype/types.xml"
ddFile="/wsddfiles/web-services.xml"
wsdlFile="/wsddfiles/HelloWorldWS.wsdl"
serviceURI="/HelloWorldWS">
<classpath refid="classpath"/>
</source2wsdd>
</target>
跟以前的腳本相比,增加了typesInfo屬性來指定自定義數據類型的XML描述文件。
增加了對自定義數據類型支持后的完整腳本請參考本文代碼下載文件。
按照第一節所述方法運行ant腳本build_wls_all.xml后,再部署buildpplications目錄下的HelloWorldWS.ear。就可以按照以前說的方法進行測試了。
這一次在Weblogic Server自動生成的web service測試主頁:
http://localhost:7001/WSDemo/HelloWorldWS
可以發現多了一個叫getUserInfo的方法連接,進入此方法的調用測試頁面,調用此方法后就可以看到此web service方法的調用結果,以下是結果截圖:
從調用測試結果頁面可以看到,這一次的Return Value是:
com.wnetw.ws.demo.UserInfod235
這正是我們的web service方法返回值類型類型的一個對象,圖中的下面也以SOAP消息的形式描述了調用的輸入和返回結果。
我們接著修改測試類HelloWorldWSTest.java,
文章來源于領測軟件測試網 http://www.kjueaiud.com/
版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
技術支持和業務聯系:info@testage.com.cn 電話:010-51297073
老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月