`
yimeng528
  • 浏览: 187793 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

XFire开发客户端几种方式的示例

阅读更多

目录:

  1. 概述
  2. 根据默认配置实现代理客户端
  3. 根据JSR 181注解实现代理客户端
  4. 根据WSDL自动生成客户端代码
  5. 动态客户端的实现

[一]、概述

以 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_axis_xfire客户端调用的几种方法[收集].pdf

    CXF、AXIS2、XFire是三种流行的Java Web服务框架,它们允许开发者创建和消费Web服务。在本文中,我们将重点关注CXF客户端调用Web服务的方法,特别是处理Map类型参数的问题。 首先,CXF客户端调用Web服务时,通常会...

    xfire创建服务端客户端源码

    在这个压缩包中,`xfiletest`可能是一个包含示例代码或者测试用例的文件,它可能包含了服务端和客户端的源码示例,帮助你更好地理解如何实际应用Xfire。 值得注意的是,这个描述提到此源码能在JDK1.7和Tomcat6环境...

    xfire开发web service文档.rar

    在文件列表中,"xfire开发web service文档.doc"可能是主文档,包含了整个教程的详细内容,包括理论解释、示例代码、步骤指南和可能的截图,以帮助读者逐步学习和实践使用XFire创建Web服务。 总的来说,这个压缩包...

    cxf_axis_xfire客户端调用的几种方法.docx

    本文将详细介绍使用CXF作为客户端调用Web服务的几种方法,并结合示例解释相关知识点。 1. **CXF客户端调用** CXF是一个开源的Java框架,它支持多种Web服务标准,包括JAX-WS和JAX-RS。对于客户端调用,CXF提供了一...

    Spring + Xfire + 注解方式

    标题 "Spring + Xfire + 注解方式" 指向的是一个关于整合Spring框架与Xfire服务框架,并利用注解进行配置的教程。这个主题涵盖了Java企业级开发中...同时,这也是一种实践Java EE标准和现代企业级开发技术的有效方式。

    XFire开发实践记录-包括环境准备与复杂对象的配置方法

    总的来说,XFire提供了一种相对直观的方式来处理Web服务,尤其是当涉及到复杂对象的交换时。尽管现在可能有其他更现代的解决方案,但XFire的实践经验和知识仍然是有价值的,特别是对于那些使用MyEclipse 5.5或类似旧...

    Xfire API,Xfire帮助文档

    在开发过程中,Xfire API 提供了丰富的资源和工具,帮助开发者轻松地访问用户信息、游戏统计、好友列表以及聊天功能等。例如,通过API,你可以获取到一个特定用户的在线状态、正在玩的游戏、最近的游戏历史记录,...

    xfire开发的带session生命周期的webservice应用工程实例

    在本示例中,"带session生命周期的webservice应用工程"意味着服务端能够识别和跟踪客户端的会话。在传统的HTTP请求中,Session用于存储用户状态信息,当用户在网站的不同页面间导航时,Session能够在服务器端保持...

    xfire+spring+webservice+client

    它可能包含了Bean定义,用于实例化XFire客户端,以及配置URL、端点地址等信息。 6. **集成与配置**:集成XFire和Spring的关键在于正确配置Spring的ApplicationContext,这通常涉及到定义XFire相关的Bean,如`...

    XFire1.2使用例子

    在源码层面,XFire的核心是基于CXF(Apache CXF,一个开源的Java EE服务框架)进行构建的,它提供了SOAP和RESTful两种通信方式,支持多种Web服务协议,如WS-*标准。XFire1.2的使用例子主要涵盖了以下几个方面: 1. ...

    xfire-webservice数据格式及集成spring

    在提供的压缩包中,`testWSSpring_client`和`testWSSpring`可能包含了使用XFire和Spring开发的Web服务客户端和服务器端的代码。这些代码可以帮助我们理解如何在实际项目中应用上述概念。 7. **总结** XFire和...

    XFire框架实现WebService(二)

    它的主要目标是提供一种简单、直观的方式来创建和使用Web服务,无需处理底层的XML和SOAP细节。XFire通过JAX-WS规范与Java应用程序进行交互,使得开发人员能够专注于业务逻辑,而非繁琐的Web服务实现。 2. **环境...

    基于 xfire 的 webservice 项目

    在IT领域,WebService是一种通过网络进行通信的标准方式,允许不同系统之间交换数据和实现功能共享。XFire是Java平台上的一个开源库,它为创建和消费Web服务提供了一种简单、高效的方法。这个基于XFire的WebService...

    java webservice XFire技术文档,一个简单列子和一个稍微难的列子

    4. **客户端调用**:对于服务的消费者部分,文档会演示如何使用XFire客户端API来调用服务,包括创建代理对象和调用服务方法。 5. **示例代码**:提供的简单例子和稍复杂例子将帮助你理解这些概念。简单例子可能涉及...

    Java Web Service xFire Demo项目,带所有的包,完美运行

    本项目“Java Web Service xFire Demo”是一个完整的示例,用于演示如何在Java环境中使用xFire实现Web服务。 首先,让我们深入了解xFire的核心概念。xFire基于Apache CXF项目,它提供了强大的XML绑定、协议处理和WS...

    Webservice集成Xfire

    总的来说,Xfire为Java开发者提供了一种便捷的途径来实现Web服务的集成,简化了开发流程,提升了开发效率。尽管Xfire已经不再活跃更新,但它的理念和方法论对于理解Web服务集成依然有价值。通过学习Xfire,开发者...

    XFire与Spring组合发布webservices

    将XFire与Spring结合使用,可以实现以下几种发布Web服务的方式: 1. **基于Spring Bean的配置**:通过在Spring配置文件中定义Bean,可以将Web服务的实现类声明为一个Bean。Spring会自动检测该Bean上的JAX-WS注解...

    xfire_webservice_example说明

    3. **服务发布**:xfire提供了一种方式来将服务暴露为SOAP Web服务。这通常涉及到配置XML文件,如`spring-context.xml`,来定义服务的端点(endpoint)和绑定信息。 4. **客户端调用**:xfire同样提供了客户端工具...

    WebService XFire

    2. **XML Binding (XFire Aegis)**:XFire使用Aegis绑定,这是一种基于Java反射的机制,可以将Java对象直接序列化和反序列化为XML,支持自定义数据类型。 3. **配置文件**:XML配置文件(如`xfire.xml`)是XFire的...

Global site tag (gtag.js) - Google Analytics