目录:
- 概述
- 根据默认配置实现代理客户端
- 根据JSR 181注解实现代理客户端
- 根据WSDL自动生成客户端代码
- 动态客户端的实现
[一]、概述
以 XFire webservice入门开发实例 中发布的服务端为例,WSDL:http://demo.micmiu.com:8080/xfire-base-demo/services/HelloWorldService 。
创建一个客户端调用的工程:
mvn archetype:create -DgroupId=com.micmiu.xfire.demo -DartifactId=xfire-client-demo -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
[二]、根据默认配置实现代理客户端
首先:编写一个像之前文章中服务端一样的服务接口类:HelloWorldService.java
package com.micmiu.xfire.demo.client; import javax.jws.WebService; /** * * @blog http://www.micmiu.com * @author Michael */ public interface HelloWorldService { /** * return welcome * @param username * @return */ String sayHello(String username); }
客户端调用测试类:HelloClient4Default.java
package com.micmiu.xfire.demo.client; import org.codehaus.xfire.client.XFireProxyFactory; import org.codehaus.xfire.service.Service; import org.codehaus.xfire.service.binding.ObjectServiceFactory; /** * * @blog http://www.micmiu.com * @author Michael */ public class HelloClient4Default { /** * @param args */ public static void main(String[] args) { String wsURL = "http://demo.micmiu.com:8080/xfire-base-demo/services/HelloWorldService"; try { System.out.println(" ----> 初始客户端 <---- "); Service serviceModel = new ObjectServiceFactory() .create(HelloWorldService.class); // Service serviceModel = new ObjectServiceFactory().create( // HelloWorldService.class, "HelloWorldService", // "http://demo.xfire.micmiu.com/HelloWoldService", null); HelloWorldService client = (HelloWorldService) new XFireProxyFactory() .create(serviceModel, wsURL); System.out.println(client.sayHello("Michael")); System.out.println(" ----> 客户端调用结束 <---- "); } catch (Exception e) { e.printStackTrace(); } } }
ps:注意代码中的 webservice的URL 没有后缀 ?wsdl
运行日志:
----> 初始客户端 <---- Hi,Michael welcome,see more http://www.micmiu.com ----> 客户端调用结束 <----
[三]、根据JSR 181注解实现代理客户端
修改上面 [一] 中的服务接口类,添加@webService 注解:HelloWorldService.java
package com.micmiu.xfire.demo.client; import javax.jws.WebService; /** * * @blog http://www.micmiu.com * @author Michael */ @WebService public interface HelloWorldService { /** * return welcome * @param username * @return */ String sayHello(String username); }
编写客户端代码:HelloClient4JSR181Annotation.java
package com.micmiu.xfire.demo.client; import org.codehaus.xfire.annotations.AnnotationServiceFactory; import org.codehaus.xfire.client.XFireProxyFactory; import org.codehaus.xfire.service.Service; /** * * @blog http://www.micmiu.com * @author Michael */ public class HelloClient4JSR181Annotation { /** * @param args */ public static void main(String[] args) { String wsURL = "http://demo.micmiu.com:8080/xfire-base-demo/services/HelloWorldService"; try { System.out.println(" ----> 初始客户端 <---- "); Service serviceModel = new AnnotationServiceFactory() .create(HelloWorldService.class); HelloWorldService client = (HelloWorldService) new XFireProxyFactory() .create(serviceModel, wsURL); System.out.println(client.sayHello("Michael")); System.out.println(" ----> 客户端调用结束 <---- "); } catch (Exception e) { e.printStackTrace(); } } }
ps:注意代码中的 webservice的URL 没有后缀 ?wsdl
运行日志:
----> 初始客户端 <---- Hi,Michael welcome,see more http://www.micmiu.com ----> 客户端调用结束 <----
[四]、根据WSDL自动生成客户端代码
目录结构如下:
E:\software code\xFire>tree ├─client-src │ └─lib
运用WsGen命令生成代码:
java -cp .;./lib/* org.codehaus.xfire.gen.WsGen -wsdl http://demo.micmiu.com:8080/xfire-base-demo/services/HelloWorldService?wsdl -o ./client-src -p com.micmiu.xfire.demo.base.client -overwrite true
参数说明:
- -wsdl : 指定wsdl文件或者URL
- -o : 指定输出目录
- -package : 指定客户端代码的包结构
- -binding : 指定绑定:jaxb 或 xmlbeans
- -overwrite : 指定是否覆盖
运行日志:
E:\software code\xFire>java -cp .;./lib/* org.codehaus.xfire.gen.WsGen -wsdl htt p://demo.micmiu.com:8080/xfire-base-demo/services/HelloWorldService?wsdl -o ./cl ient-src -p com.micmiu.xfire.demo.base.client -overwrite true Running WsGen... wsdl : http://demo.micmiu.com:8080/xfire-base-demo/services/HelloWorldService ?wsdl package : com.micmiu.xfire.demo.base.client output : ./client-src binding : externalBindings : baseURI : profile : explictAnnotation : false overwrite : true serverStub : true forceBare : false 2012-7-30 18:26:22 org.codehaus.xfire.gen.Wsdl11Generator generate 信息: Generating code for WSDL at http://demo.micmiu.com:8080/xfire-base-demo/se rvices/HelloWorldService?wsdl with a base URI of http://demo.micmiu.com:8080/xfi re-base-demo/services/HelloWorldService?wsdl 2012-7-30 18:26:23 org.codehaus.xfire.gen.jsr181.AbstractServiceGenerator genera te 信息: Creating class com.micmiu.xfire.demo.base.client.HelloWorldServicePortType 2012-7-30 18:26:23 org.codehaus.xfire.gen.jsr181.AbstractServiceGenerator genera te 信息: Creating class com.micmiu.xfire.demo.base.client.HelloWorldServiceImpl com\micmiu\xfire\demo\hellowoldservice\ObjectFactory.java com\micmiu\xfire\demo\hellowoldservice\SayHello.java com\micmiu\xfire\demo\hellowoldservice\SayHelloResponse.java com\micmiu\xfire\demo\hellowoldservice\package-info.java com\micmiu\xfire\demo\base\client\HelloWorldServiceClient.java com\micmiu\xfire\demo\base\client\HelloWorldServiceImpl.java com\micmiu\xfire\demo\base\client\HelloWorldServicePortType.java Done.
客户端代码生成后的目录结构如下:
E:\software code\xFire>tree /F client-src 卷 tools 的文件夹 PATH 列表 卷序列号为 AA19-63C1 E:\SOFTWARE CODE\XFIRE\CLIENT-SRC ├─com │ └─micmiu │ └─xfire │ └─demo │ ├─base │ │ └─client │ │ HelloWorldServiceClient.java │ │ HelloWorldServiceImpl.java │ │ HelloWorldServicePortType.java │ │ │ └─hellowoldservice │ ObjectFactory.java │ package-info.java │ SayHello.java │ SayHelloResponse.java │ └─META-INF └─xfire services.xml
把上面的源代码copy到项目中即可,编写测试代码:HelloWorldGenClientTest.java
package com.micmiu.xfire.demo.base.client; /** * * @blog http://www.micmiu.com * @author Michael */ public class HelloWorldGenClientTest { public static void main(String[] args) throws Exception { System.out.println(" ----> 初始客户端 <---- "); HelloWorldServiceClient service = new HelloWorldServiceClient(); HelloWorldServicePortType client = service .getHelloWorldServiceHttpPort(); System.out.println(client.sayHello("Michael")); System.out.println(" ----> 客户端调用结束 <---- "); } }
运行结果:
----> 初始客户端 <---- Hi,Michael welcome,see more http://www.micmiu.com ----> 客户端调用结束 <----
[五]、动态客户端的实现
编写测试代码:HelloClient4Dynamic.java
package com.micmiu.xfire.demo.client; import java.net.URL; import org.codehaus.xfire.client.Client; /** * * @blog http://www.micmiu.com * @author Michael */ public class HelloClient4Dynamic { /** * @param args */ public static void main(String[] args) { String wsURL = "http://demo.micmiu.com:8080/xfire-base-demo/services/HelloWorldService?wsdl"; try { System.out.println(" ----> 初始客户端 <---- "); Client client = new Client(new URL(wsURL)); Object[] results = client.invoke("sayHello", new Object[] { "Michael" }); System.out.println(results[0]); System.out.println(" ----> 客户端调用结束 <---- "); } catch (Exception e) { e.printStackTrace(); } } }
ps:注意代码中的 webservice的URL 有后缀 ?wsdl
运行结果:
----> 初始客户端 <---- Hi,Michael welcome,see more http://www.micmiu.com ----> 客户端调用结束 <----
相关推荐
CXF、AXIS2、XFire是三种流行的Java Web服务框架,它们允许开发者创建和消费Web服务。在本文中,我们将重点关注CXF客户端调用Web服务的方法,特别是处理Map类型参数的问题。 首先,CXF客户端调用Web服务时,通常会...
在这个压缩包中,`xfiletest`可能是一个包含示例代码或者测试用例的文件,它可能包含了服务端和客户端的源码示例,帮助你更好地理解如何实际应用Xfire。 值得注意的是,这个描述提到此源码能在JDK1.7和Tomcat6环境...
在文件列表中,"xfire开发web service文档.doc"可能是主文档,包含了整个教程的详细内容,包括理论解释、示例代码、步骤指南和可能的截图,以帮助读者逐步学习和实践使用XFire创建Web服务。 总的来说,这个压缩包...
本文将详细介绍使用CXF作为客户端调用Web服务的几种方法,并结合示例解释相关知识点。 1. **CXF客户端调用** CXF是一个开源的Java框架,它支持多种Web服务标准,包括JAX-WS和JAX-RS。对于客户端调用,CXF提供了一...
标题 "Spring + Xfire + 注解方式" 指向的是一个关于整合Spring框架与Xfire服务框架,并利用注解进行配置的教程。这个主题涵盖了Java企业级开发中...同时,这也是一种实践Java EE标准和现代企业级开发技术的有效方式。
总的来说,XFire提供了一种相对直观的方式来处理Web服务,尤其是当涉及到复杂对象的交换时。尽管现在可能有其他更现代的解决方案,但XFire的实践经验和知识仍然是有价值的,特别是对于那些使用MyEclipse 5.5或类似旧...
在开发过程中,Xfire API 提供了丰富的资源和工具,帮助开发者轻松地访问用户信息、游戏统计、好友列表以及聊天功能等。例如,通过API,你可以获取到一个特定用户的在线状态、正在玩的游戏、最近的游戏历史记录,...
在本示例中,"带session生命周期的webservice应用工程"意味着服务端能够识别和跟踪客户端的会话。在传统的HTTP请求中,Session用于存储用户状态信息,当用户在网站的不同页面间导航时,Session能够在服务器端保持...
它可能包含了Bean定义,用于实例化XFire客户端,以及配置URL、端点地址等信息。 6. **集成与配置**:集成XFire和Spring的关键在于正确配置Spring的ApplicationContext,这通常涉及到定义XFire相关的Bean,如`...
在源码层面,XFire的核心是基于CXF(Apache CXF,一个开源的Java EE服务框架)进行构建的,它提供了SOAP和RESTful两种通信方式,支持多种Web服务协议,如WS-*标准。XFire1.2的使用例子主要涵盖了以下几个方面: 1. ...
在提供的压缩包中,`testWSSpring_client`和`testWSSpring`可能包含了使用XFire和Spring开发的Web服务客户端和服务器端的代码。这些代码可以帮助我们理解如何在实际项目中应用上述概念。 7. **总结** XFire和...
它的主要目标是提供一种简单、直观的方式来创建和使用Web服务,无需处理底层的XML和SOAP细节。XFire通过JAX-WS规范与Java应用程序进行交互,使得开发人员能够专注于业务逻辑,而非繁琐的Web服务实现。 2. **环境...
在IT领域,WebService是一种通过网络进行通信的标准方式,允许不同系统之间交换数据和实现功能共享。XFire是Java平台上的一个开源库,它为创建和消费Web服务提供了一种简单、高效的方法。这个基于XFire的WebService...
4. **客户端调用**:对于服务的消费者部分,文档会演示如何使用XFire客户端API来调用服务,包括创建代理对象和调用服务方法。 5. **示例代码**:提供的简单例子和稍复杂例子将帮助你理解这些概念。简单例子可能涉及...
本项目“Java Web Service xFire Demo”是一个完整的示例,用于演示如何在Java环境中使用xFire实现Web服务。 首先,让我们深入了解xFire的核心概念。xFire基于Apache CXF项目,它提供了强大的XML绑定、协议处理和WS...
总的来说,Xfire为Java开发者提供了一种便捷的途径来实现Web服务的集成,简化了开发流程,提升了开发效率。尽管Xfire已经不再活跃更新,但它的理念和方法论对于理解Web服务集成依然有价值。通过学习Xfire,开发者...
将XFire与Spring结合使用,可以实现以下几种发布Web服务的方式: 1. **基于Spring Bean的配置**:通过在Spring配置文件中定义Bean,可以将Web服务的实现类声明为一个Bean。Spring会自动检测该Bean上的JAX-WS注解...
3. **服务发布**:xfire提供了一种方式来将服务暴露为SOAP Web服务。这通常涉及到配置XML文件,如`spring-context.xml`,来定义服务的端点(endpoint)和绑定信息。 4. **客户端调用**:xfire同样提供了客户端工具...
2. **XML Binding (XFire Aegis)**:XFire使用Aegis绑定,这是一种基于Java反射的机制,可以将Java对象直接序列化和反序列化为XML,支持自定义数据类型。 3. **配置文件**:XML配置文件(如`xfire.xml`)是XFire的...