Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

       可以看到,这个uri的值源自我们的wsdl,实际上在编写Webservice调用客户端时,我们需要好好研究目标Webservice产生的WSDL文件,要通过这个文件知道目标Webservice的调用地址是什么(uri),需要传递的入参是什么,出参又是什么等,只有了解这些信息之后,才能确定该如何编写我们的Webservice调用客户端,所以,对于使用Webservice的广大程序员来说,了解并能读懂WSDL是何其重要。

       因为Webservice是标准的,所以除了可以采用BDF2提供的WebserviceClient实现调用外,还可以采用其它工具实现,比如之前介绍的SoapUI就是一例。下面我们就以XFire的Dynamic Client为例,演示下如何使用XFire的Dynamic Client来调用我们的这个UserService,其代码如下:

Code Block
title基于XFire的Dynamic Client实现Webservice调用
linenumberstrue
languagejava
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());
			
		}
	}
}

       关于XFire的Dynamic Client大家可以到其官网了解,这里需要指出的是在调用client的invoke时,它的第二个参数可以接受一个jdom的DOM对象,利用这个特性我们创建一个基于JDOM的UserRequest的DOM对象,并将需要的信息填充到这个XML的DOM当中,最后作为参数提交给XFire的Dynamic Client去处理,XFire的Dynamic Client将给出的参数构建为SOAP消息传递给服务器处理。