这里并未涉及到JSR 181 Annotations 的相关应用,具体的三种方式如下① 通过WSDL地址来创建动态客户端
② 通过服务端提供的接口来创建客户端
③ 使用Ant通过WSDL文件来生成客户端第一种方式:通过WSDL地址来创建动态客户端package com.jadyer.client;import java.net.MalformedURLException;import java.net.URL;import org.codehaus.xfire.client.Client;/*** 通过WSDL来创建动态客户端* @see 此时需要在项目中引入XFire 1.2 Core Libraries和XFire 1.2 HTTP Client Libraries*/ public class ClientFromWSDL {public static void main(String[] args) throws MalformedURLException, Exception {Client client = new Client(new URL("http://127.0.0.1:8080/XFire_demo/services/XFireServer?wsdl"));Object[] results11 = client.invoke("sayHello", new Object[]{"Jadyer22"});System.out.println(results11[0]);}} 第二种方式:通过服务端提供的端口来创建客户端package com.jadyer.client;import java.net.MalformedURLException;import java.util.List;import org.codehaus.xfire.client.XFireProxyFactory;import org.codehaus.xfire.service.Service;import org.codehaus.xfire.service.binding.ObjectServiceFactory;import com.jadyer.model.Person;import com.jadyer.model.User;import com.jadyer.server.HelloService;/*** 通过Web服务端提供的接口来创建客户端* @see 客户端必须提供一个与服务端完全一致的接口,包名也要一致* @see 在本例中,需要在客户端(即该项目)中提供HelloService.java接口,以及Person和User两个POJO类* @see 并且此时需要在项目中引入XFire 1.2 Core Libraries和XFire 1.2 HTTP Client Libraries*/ public class ClientFromInterface {public static void main(String[] args)throws MalformedURLException{//首先使用XFire的ObjectServiceFactory从HelloService接口创建一个服务模型serviceModel//serviceModel包含服务的说明,换句话说,就是服务的元数据//Create a metadata of the service Service serviceModel = new ObjectServiceFactory().create(HelloService.class);//访问的地址String serviceURL = "http://127.0.0.1:8080/XFire_demo/services/XFireServer";//通过查看org.codehaus.xfire.client.XFireProxyFactory源码发现//下面两行代码与这里直接new XFireProxyFactory()的作用是等效的//XFire xfire = XFireFactory.newInstance().getXFire();//XFireProxyFactory factory = new XFireProxyFactory(xfire);//为XFire获得一个代理工厂对象//Create a proxy for the deployed service XFireProxyFactory factory = new XFireProxyFactory();//通过proxyFactory,使用服务模型serviceModel和服务端点URL(用来获得WSDL)//得到一个服务的本地代理,这个代理就是实际的客户端HelloService client = (HelloService)factory.create(serviceModel, serviceURL);/*** Invoke the service* @see 调用服务的本地代理(即实际的客户端)中的方法,便得到我们需要的WebServcie*//*--处理简单对象--*/ String serviceResponse = client.sayHello("Jadyer11");System.out.println(serviceResponse);/*--处理对象--*/ User u = new User();u.setName("Jadyer99");Person pp = client.getPerson(u);System.out.println(pp.getName());/*--处理List--*/ List这是它要用到的接口和两个POJO类/*** Web服务提供给客户端的接口* @see 这是第二种方式创建的客户端,要用到的接口*/ package com.jadyer.server;import java.util.List;import com.jadyer.model.Person;import com.jadyer.model.User;public interface HelloService {public String sayHello(String name);public Person getPerson(User u);public List第三种方式:使用Ant通过WSDL文件来生成客户端package com.jadyer.client;/*** 使用Ant通过WSDL生成客户端* @see 这里的ClientFromAnt.java是我自己创建的,并非Ant生成* @see 这里要用到的JAR有:xfire-all-1.2.6.jar以及//xfire-distribution-1.2.6//lib//目录中的所有JAR包* @see 我们需要把这些JAR包都拷贝到Web Project//WebRoot//WEB-INF//lib//目录中* @see 然后把build.xml和MyFirstXFireServer.wsdl都拷贝到下Web Project的根目录下即可* @see 关于MyFirstXFireServer.wsdl文件,是我在WebServices服务启动后* @see 访问http://127.0.0.1:8080/XFire_demo/services/XFireServer?wsdl然后将其另存得到的*/ public class ClientFromAnt {public static void main(String[] args) {XFireServerClient client = new XFireServerClient();//String url = "http://127.0.0.1:8080/XFire_demo/services/XFireServer";//String result = client.getXFireServerHttpPort(url).sayHello("Jadyer33");//上面的两行代码,与下面的这一行代码,同效~~String result = client.getXFireServerHttpPort().sayHello("Jadyer33");System.out.println(result);}} 用到的Ant文件,如下也可以使用下面的这个Ant文件最后我再把MyFirstXFireServer.wsdl的内容,附加上第四种方法这种方法用到了spring的jar包,是前几天在找XFire+Spring的资料的时候看到的,在这里也是做个记录。同样的,这种方法和上面所提到的第二种方法在客户端都需要与服务器一样的接口,包名也必须一样。
(1)在src目录下新建client.xml(名字并非特定)(2)在程序中调用服务代码非常简单ApplicationContext ctx = new ClassPathXmlApplicationContext("client.xml");MathService mathService = (MathService)ctx.getBean("MathService");int result = mathService.add(int one,int two);第五种办法先获取到wsdl文件,命名为mathWebService.wsdl放在客户端的src目录下,接着通过程序访问该wsdl文件,并调用需要的方法。
String wsdl = "mathWebService.wsdl " ; // 对应的WSDL文件Resource resource = new ClassPathResource(wsdl);Client client = new Client(resource.getInputStream(), null ); // 根据WSDL创建客户实例Object[] objArray = new Object[ 2 ];objArray[ 0 ] = 2 ;obiArray[1] = 3;// 调用特定的Web Service方法Object[] results = client.invoke( " add " , objArray);System.out.println( " result: " + results[ 0 ]);对于这几种方法,第一种方法如果传递的参数为服务器端的实体对象,这点好像比较麻烦,不知道在客户端建立和服务器端相同的实体类行不行,没有实践,返回结果如果是复杂数据类型的话不知道有没有什么问题,或者如何转换,没有深入研究。而且我个人觉得方法调用不是那么直观。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持脚本之家!
您可能感兴趣的文章:Java编程中使用XFire框架调用WebService程序接口基于JQuery的访问WebService的代码(可访问Java[Xfire])
java webservice上传下载文件代码分享ASP.NET使用WebService实现天气预报功能使用jQuery Ajax 请求webservice来实现更简练的Ajax C# WebService发布以及IIS发布ASP.NET中Webservice安全 实现访问权限控制ajax跨域调用webservice的实现代码PHP使用SOAP扩展实现WebService的方法android调用WebService实例分析
