為了演示這個客戶端的具體用法,接下來我們用這個客戶端來嘗試調(diào)用在BDF2-WEBSERVICE模塊當(dāng)中介紹的示例Webservice,看看它能不能調(diào)用成功并為我們返回正確的結(jié)果。具體調(diào)用代碼如下:
WebserviceClient類調(diào)用Webservice測試
package ws;
import com.bstek.bdf2.webservice.client.WebServiceClient;
public class WebserviceInvokeTest {
public static void main(String[] args) throws Exception{
String uri="http://localhost:8080/bdf2-test/dorado/webservice/requestUserWebService";
//設(shè)置Webservice客戶端要調(diào)用的目標(biāo)Webservice的地址
WebServiceClient client=new WebServiceClient(uri);
//設(shè)置要調(diào)用的目標(biāo)Webservice的WS-Security認(rèn)證所需要的username及password,以及是否對用戶名及密碼進(jìn)
行加密傳輸
client.setUsernameToken("admin", "81c1206f28f2738cdf714b4e10428c66f58eee10", true);
/**
* 設(shè)置要調(diào)用的目標(biāo)Webservice的Http Basic認(rèn)證所需要的username及password,
* Http Basic認(rèn)證當(dāng)中所使用的密碼為加密之前的密碼,而非被加密之后的密碼
* */
//client.setHttpAuthenticationCredentials("admin", "admin");
UserRequest request= new UserRequest();
request.setTargetCompany("bstek");
request.setUserCount(2);
//設(shè)置在調(diào)用目標(biāo)Webservice過程當(dāng)中,需要將Javabean與XML進(jìn)行相互序列化的Javabean類的class
client.setMarshallerClasses(new Class[]{UserRequest.class,UserResponse.class});
//發(fā)送調(diào)用請求并返回調(diào)用結(jié)果
UserResponse response=(UserResponse)client.sendAndReceive(request);
//輸出返回結(jié)果
for(User user:response.getUsers()){
System.out.println("username:"+user.getUsername() +" company:"+user.getCompanyId());
}
}
}
基于XFire的Dynamic Client實現(xiàn)Webservice調(diào)用
package test;
import java.net.URL;
import org.apache.xerces.dom.DocumentImpl;
import org.codehaus.xfire.client.Client;
import org.jdom.Element;
import org.jdom.Text;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class SimpleTest {
public static void main(String[] args) throws Exception{
URL url=new URL("http://localhost:8080/bdf2-test/dorado/webservice/UserService.wsdl");
Client client=new Client(url);
Element root=new Element("UserRequest");
Element company=new Element("targetCompany");
company.setContent(new Text("bstek"));
root.addContent(company);
Element userCount=new Element("userCount");
userCount.setContent(new Text("2"));
root.addContent(userCount);
Object[] obj=client.invoke("User",new Object[]{root});
DocumentImpl doc=(DocumentImpl)obj[0];
Node node=doc.getFirstChild().getFirstChild();
NodeList list=node.getChildNodes();
for(int i=0;i<list.getLength();i++){
Node userNode=list.item(i);
System.out.println("username:"+userNode.getFirstChild().getTextContent());
}
}
}
更多建議: