`
tsinglongwu
  • 浏览: 232816 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

CXF客户端开发(转载)

    博客分类:
  • SOA
阅读更多
1.创建工程

在 myeclipse 中创建 webservice 工程, file->new->other->web service project,起名字 webservicetest。
其实所谓的 webservice 也不可能单独通讯, soap协议是一个更上层的通讯协议,他是凌驾在http协议上的,所以我们web开发熟悉的servlet必不可少,默认就可以啦。

选择以下工具 jar 包,

工程创建完毕,看看效果。包结构基本上遵守 web 的工程模式,仔细看多了一个目录WebServices ,下边的 services.xml 作用就是我们的应用下提供了几个webservices服务,另外就是 web.xml 会发生变化。

下一步工作我们分三种情况举例,分别是通讯传输基本数据类型,xml数据类型,对象类型。 这三种情况应该可以涵盖了平时所有的应用。

1.1 基本数据类型通讯

创建一个 service 服务程序。 File->new->other->myeclipse->web service 。


仍然需要起一个服务类的名字, FirstService , myeclipse 会为我们生成两个类服务接口类 (IFirstService) 和服务实现类 (FirstServiceImpl) 。

看看你的 service.xml 发生了什么变化。

看一下我们的实现类,很简单,就是返回一个基本数据类型 — 字符串

任务完成一半了,我们先部署一下,看看效果。

部署完成后我们生成 wsdl ,如下

Myeclipse 有个访问 wsdl 的工具,如下:

点击到 wsdl 方式,并录入 wsdl 的 url 路径。

测试 一下功能,结果如下 :

相当于客户端发一个字符串给服务端,服务端处理后返回一个字符串响应,功能叙述完毕 。

下来我们开发一个正式的客户端。

File->new->other->web service client 填写 wsdl 访问路径。生成的类以及关键测试代码 如下:

1.2 对象类型通讯

简单基础类型通讯不能满足我们日常的系统开发工作 , 我们还需要支持远程对象传输 , 保证大数据量的传输 , 不过这就需要考虑效率问题 。压力测试时要注意 webservice 的效率测试 。

在生成 service 端和 client 端时最好使用两个工程,把 service 部署后建立另外一个xfire 工程 ,并生成 client ,在传输对象的过程中 client 端也需要一个 User 对象,这个对象的作用就是映射服务器端的自定义对象。

首先我们需要创建服务类,返回参数是自定义对象 User 。

创建 User 对象 ,注意这个是服务器端的。

为了在 WSDL 中映射参数的类型,我们需要创建一个配置文件,并和服务类放在一个包下。 IFirstService.aegis.xml

服务器端都准备好了,部署!看看我们 wsdl 。

注意其中对参数的定义。

下来就是 client 端的开发了,顺便介绍一下 xfire 客户端的三种模式

【 1. Client 开发者拥有Web服务端的 class】

即:能拿到服务端的接口 Class 和 Entity 类及 aegis 配置文件
// 传统 POJO 模式

Service srvcModel = new ObjectServiceFactory().create(Hello.class);

XFireProxyFactory factory = new XFireProxyFactory(

XFireFactory.newInstance().getXFire());

String helloWorldURL = "http://localhost:8080/webservice/services/Hello ";

Hello srvc = ( Hello) factory.create(srvcModel,helloWorldURL);

System.out.println(srvc.sayHello("Robin"));

// JSR181 模式,注意这里 Server 端开发组需要向 Client 提供实现类,而不止于 // 接口,有点危险

Service  srvcModel = new AnnotationServiceFactory().create(HelloImpl.class);

XFireProxyFactory factory = new XFireProxyFactory(XFireFactory.newInstance().getXFire());

String helloWorldURL = "http://localhost:8080/webservice/services/Hello";

Hello hello = (Hello) factory.create(srvcModel,helloWorldURL);

System.out.println(hello.sayHello("caohuili:"));

【2. 动态模式】

    动态模式不需要服务端的 class ,不过性能和复杂对象映射等估计做得不会太好。
Client client = new Client(new URL("http://localhost:8080/webservice/services/Hello?wsdl "));
Object[] results = client.invoke("sayHello", new Object[] { "Cao," });
System.out.println((String) results[0]);

【3.根据 WSDL 生成 Client Stub】
 // 简单参数的
HelloClient client=new HelloClient();

HelloPortType port =client.getHelloHttpPort();

System.out.println(port.sayHello("hi!"));

// 参数复杂的
MemberServiceClient client = new MemberServiceClient();

MemberService memberService = client.getMemberServiceHttpPort();

User user = new User();

/*JAXBElement<String> name = new JAXBElement<String>(new QName("http://memberService ", "username"), String.class, "smallnest");

JAXBElement<String> password = new JAXBElement<String>(new QName("http://memberService ", "password"), String.class, "123456");*/

ObjectFactory bjFac=new ObjectFactory();

JAXBElement<String> name = objFac.createUserUsername("smallnest");
JAXBElement<String> password = objFac.createUserPassword("123456");

user.setUsername(name);
user.setPassword(password);

Member neMember = new Member();

JAXBElement<String> memeberName = new JAXBElement<String>(new QName("http://memberService ", "name"), String.class, " 迈克 ");

JAXBElement<String> email = new JAXBElement<String>(new QName("http://memberService ", "email"), String.class,"micro@micro.com ");

oneMember.setName(memeberName);
oneMember.setEmail(email);
oneMember.setRank(6);

 // 调用方法
memberService.addMember(oneMember, user);

那我们就完成自己的客户端 ,很简单,还是用 eclipse 新建立一个工程,并根据 wsdl 生成一个 client 。

执行结果   :

1.3 数组类型通讯

对于基本类型的数组,不用在 aegis.xml 文件中映射配置,生成客户端时,会生成 ArrayOfString 的映射类型接收数据。如果是自己定义的复杂对象,就需要在 aegis.xml 文件中配置对象映射,这时 client 会根据 wsdl 生成对应的 ArroyOfxxx 对象 。

首先生成服务类 。

from:http://blog.csdn.net/yaba213/archive/2010/11/19/6021695.aspx

分享到:
评论

相关推荐

    CXF客户端支持最少jar

    CXF客户端是开发人员用来与CXF服务交互的重要组件,它允许我们轻松地调用远程Web服务。然而,为了减小程序的体积和依赖性,有时我们需要精简CXF客户端所依赖的jar包。本文将深入探讨如何配置和使用CXF客户端所需的...

    cxf客户端所需jar包-4个

    标题 "cxf客户端所需jar包-4个" 暗示了这四个JAR文件是Apache CXF框架中用于构建客户端应用程序的基本组件,使得开发者能够方便地调用Web服务。Apache CXF是一个开源的Java框架,它允许创建和消费Web服务,支持多种...

    cxf客户端调用axis服务端流程

    本文将深入探讨如何使用CXF客户端调用Axis服务端的流程。 ### 一、了解CXF和Axis **CXF**(CXF: Composite eXtensible Framework)是一个开源的Java Web服务框架,它提供了多种方式来创建和使用Web服务,包括JAX-...

    CXF客户端生成器

    【CXF客户端生成器】是基于Apache CXF框架的一个实用工具,主要用于自动生成Java客户端代码,使得开发者可以方便地调用Web服务。Apache CXF是一个开源的SOAP和RESTful Web服务框架,它允许开发者创建和消费各种Web...

    CXF客户端调用例子

    CXF客户端调用例子展示了如何使用CXF来创建和消费Web服务。这个例子包含了服务端和客户端两部分,两者都是用Java语言编写的。 在Java中,CXF提供了丰富的API和工具,使得开发者能够方便地实现SOAP(Simple Object ...

    CXF客户端添加soapHeader代码 + jar包 + apache-cxf-3.1.15

    以上步骤展示了如何在CXF客户端中添加SOAP Header,这个过程涉及到CXF客户端的配置、自定义Header处理以及服务调用。通过这样的方式,我们可以灵活地控制SOAP请求中的Header信息,满足各种服务交互的需求。记得根据...

    CXF客户端,自动生成方式

    在IT行业中,Web服务是应用程序之间进行通信的一种标准方法,而CXF是一个开源的Java框架,专门用于构建和消费Web服务。...学习并熟练掌握CXF客户端的自动生成,对于提高开发效率和代码质量有着显著的帮助。

    apache-cxf-2.7.7以及cxf客户端所需要的jar包

    这个压缩包"apache-cxf-2.7.7以及cxf客户端所需要的jar包"包含了Apache CXF 2.7.7版本及其客户端运行所需的库文件。这些jar包对于创建、部署和消费Web服务至关重要,特别是对于使用命令行生成Web服务客户端的开发者...

    Cxf客户端及服务器端,实现客户端和服务器端的权限验证

    - 配置CXF客户端,添加安全拦截器,如WSS4JOutInterceptor,以添加必要的安全头部。 - 客户端需要提供认证信息,对于基本认证,这可以通过设置HTTP请求头完成;对于WS-Security,可能需要创建和配置`UsernameToken...

    Java webservice cxf客户端调用demo和服务端

    Java WebService CXF客户端调用和服务端的实现是企业级应用程序中常见的通信方式,它基于标准的SOAP(Simple Object Access Protocol)协议,提供了一种在分布式环境中交换信息的方法。CXF是一个开源框架,它简化了...

    cxf 开发webservice客户端

    本篇文章将详细探讨如何利用CXF框架开发一个Web服务客户端,以及如何进行测试。 一、CXF简介 CXF全称CXF CXF (Continued eXtensible Framework),它是一个Java框架,提供了创建和消费Web服务的能力。CXF支持WS-*...

    CXF客户端启动过程

    【标题】:“CXF客户端启动过程详解” 【正文】: CXF(Apache CXF)是一个开源的Java框架,主要用于构建和服务导向架构(SOA)。它提供了丰富的API和工具,用于创建Web服务,既可以作为服务器端也可以作为客户端。...

    cxf客户端(对象,上传与下载文件支持断点传输)

    【标题】:“CXF客户端:对象参数,文件上传下载及断点续传功能” 在Java Web开发中,CXF框架广泛用于实现Web服务,包括SOAP和RESTful接口。本示例着重于CXF客户端如何处理对象参数传递以及支持文件的上传和下载,...

    springboot整合CXF发布webservice和客户端调用

    - 对于客户端调用,可以使用CXF的`JaxWsProxyFactoryBean`创建服务代理对象,然后调用其方法进行服务调用。 4. **项目结构** - `.classpath`和`.project`是Eclipse IDE的项目配置文件。 - `pom.xml`是Maven的...

    CXF客户端最少包

    【CXF客户端最少包】指的是在使用Apache CXF框架构建客户端应用时,为了实现基本的SOAP或RESTful服务调用,所需要最小化的依赖集合。在这个描述中,提到了两个核心的JAR文件:cxf-2.7.18.jar和fastjson-1.2.34.jar。...

    基于SSL验证的Apache CXF客户端设计

    基于SSL验证的Apache CXF客户端设计 1,服务器端Tomcat配置SSL支持 2,服务器端Web Service接口设计 3,客户端访问设计,包括代码和配置文件 详情请看博客:...

    webservice的cxf框架客户端调用所需jar包

    这些JAR包组合在一起,为CXF客户端调用提供了完整的环境,包括XML解析、SOAP消息处理、加密安全、缓存优化、消息传递以及依赖管理等多个方面。在实际项目中,将这些JAR包放入项目的`lib`目录下,确保了所有必要的...

    开发CXF JAVA客户端

    在IT行业中,开发CXF Java客户端是一项常见的任务,特别是在构建基于Web服务的应用程序时。CXF是一个开源框架,它提供了创建和消费SOAP和RESTful Web服务的能力。本篇将深入探讨如何利用CXF来开发Java客户端,同时也...

    CXF客户端测试需要的最少JAR包

    在标题和描述中提到的“CXF客户端测试需要的最少JAR包”,是指能够支持CXF客户端功能运行的基础依赖集合。 通常,一个基础的CXF客户端测试环境可能包括以下关键组件: 1. **cxf-rt-frontend-jaxws**:这是CXF的...

    CXF 一个完整的webService(整合客户端和服务端)

    整合CXF客户端和服务端** 在实际项目中,可能会同时存在服务端和客户端的开发。为了确保它们之间的兼容性,需要确保服务端发布的WSDL与客户端使用的WSDL一致。CXF提供了丰富的API和工具来简化这一过程。 - 测试:...

Global site tag (gtag.js) - Google Analytics