WebService流行框架之Axis和CXF

2024-04-23 04:38

本文主要是介绍WebService流行框架之Axis和CXF,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!



 

前言

今天主要讲解下WebService的两个流行的框架AxisCXF

 

正题

一、服务端发布WebService

在讲解之前,我们先来看一下这篇博客主要讲解的内容:


    每一种框架都有自己的特点,有自己的侧重,但是他们的共同之处在于对发布WebService进行了封装,所以我们只需编写一个配置文件或者使用@WebService注解就可以发布WebService,我们这里着重说一下他们各自的特点:


1.Axis1

Axis1有两种发布方式:

1JWS方式

a.这种方式很简单,只需要将源码java文件放到AXIS_HOME下面,然后将后缀改为.jws,这样,Axis 会自动编译.jws文件,并把它自动加入到Java WebServie的服务中。


b.但是这种方式的缺点是:只能是java源代码,同时类中不能含有包名。

 

2WSDD方式

1.写一个java类(需要引入axis的jar包)


2.配置web.xml文件(配置AxisServletAdminServletSOAPMonitorServiceAxisHTTPSessionListener


3.写一个deloy.wsdd文件,部署项目(tomcat启动就可以部署项目)

 

安装axis1到tomcat:

1.Axis官方网站:http://ws.apache.org/axis/,可以在官网下载最新1.4的包:axis-bin-1_4.zip


2.将解压后的axis-1_4\webapps\下的axis目录考到%TOMCAT_HOME%/Webapps/目录下


3.启动tomcat后在浏览器里输入http://localhost:port/axis


4.点击上图中的Validataion链接,页面上会提示已经有的包和缺少的包的信息,根据提示将必须的包下载全,

将这些类包复制到%tomcathome%/webapps/axis/WEB-INF/lib/目录下

重新启动tomcat,直到Validation页面中看不到有Error与Warning的提示信息。

 

2.Axis2

客户端对于数据类型的不同有两种调用方式:RPCServiceClient和OMAbstractFactory方式

1)RPC方式:

处理基本的数据类型,如String,int等

 

2)OM方式:

可处理基本数据类型和自定义数据类型(比如java实体对象):通过xml的参数形式进行传递(传递的参数需要转换为OMElement)

 

注:如果参数或返回值是List类型则需要进行手动处理转换(手动编写一个服务端对传递过来的参数进行处理,将传过来的OMElement手动转换为List类型,调用执行方法,然后将返回的List类型再转换为OMElement传回客户端)

 

Axis2发布文件(编写services.xml

1.将官网下载的axis2.war包拷贝到tomcat_home/webapps下,运行即会解压


2.将其conf,modules和services文件夹拷贝到项目的WEB-INF下面,并将lib下的jar包拷贝到web-inf/lib下面


3.配置Web.xml(配置AxisServletAxisAdminServlet


4.编写services下面的services.xml文件,指定要发布的类

 

3.CXF

CXF发布WebService有三种方式:main方式,基于和不基于Spring发布到容器

1main方式

引入jar包,在接口和实现类上使用@WebService即可,发布完成后即可在浏览器中访问url,不需要启动tomcat等服务。

 

2)不基于Spring方式发布到容器

a)引入cxfjar包,编写web.xml(配置自定义的CXFServlet,该CXFServlet需要继承CXFNonSpringServlet


b)编写实体类,业务类和服务类(实体类需要和服务类在同一包下,否则报错)


c)启动Tomcat,即可发布服务

 

3)基于Spring方式发布到容器

a)web.xml配置(Spring配置,cxf封装的CXFServlet配置)


b)applicationContext-server.xml配置

<!--Import apache CXF bean definition 固定-->

<importresource="classpath:META-INF/cxf/cxf.xml" />

<importresource="classpath:META-INF/cxf/cxf-extension-soap.xml" />

<importresource="classpath:META-INF/cxf/cxf-servlet.xml" />

 

<!--services接口配置 -->

<beanid="helloServicesBean"class="com.ms.services.impl.HelloServicesImpl" />

<!--CXF 配置WebServices的服务名及访问地址 -->

<jaxws:serverid="helloServices" address="/HelloServices"

serviceClass="com.ms.services.IHelloServices">

<!--要暴露的webservice服务 -->

<jaxws:serviceBean>

<refbean="helloServicesBean"/>

</jaxws:serviceBean>

</jaxws:server>

 

c)编写类

实体类

服务接口(类头使用@WebService)

服务实现(类头使用@WebService(endpointInterface="com.ms.services.IHelloServices"))

 

以上是关于AxisCXF发布特点及其需要注意的地方,是我做例子时的总结,有兴趣的同学可以下载源码

 

 

二、客户端调用WebService

服务端将接口发布成功后,就等着客户端来进行调用了,客户端如何并通过什么方式来调用我们服务端发布的wsdl文件呢?

 

1.调用一次WebService的本质:


 

1.客户端把调用方法参数,转换生成XML文档片段(SOAP消息,input消息,该文档片段必须符合WSDL定义的格式),通过网络,把XML文档片段传给服务器

 

2.服务器接收到XML文档片段,解析XML文档片段,提取其中的数据,并把数据转换调用WebService所需要的参数值。

 

3.服务器执行方法。

 

4.把执行方法得到的返回值,再次转换生成为XML文档片段(SOAP消息,output消息)——该文档片段必须符合WSDL定义的格式,通过网络,把XML文档片段传给客户端。

 

5.客户端接收到XML文档片段,解析XML文档片段,提取其中数据,并把数据转换调用WebService的返回值。

 

从上面调用本质来看,要一个语言支持WebService,唯一的要求是:该语言支持XML文档解析、生成、支持网络传输。

 

2.客户端调用方式:

客户端调用服务端方法总体来说有三种方式:

 

1DIIDynamic Invocation Interface

采用直接调用方式,可以在程序中设置诸多的调用属性,使用较为灵活,但是调用过程却相对繁琐复杂,易造成代码膨胀且可重用性低,每次调用不同的Web Service都要重复进行大量编码。

 

这也是我们比较常用的一种方法,就是调用invoke方法,传入方法名和方法参数即可。

 

2Stubs

JAX-RPC使用静态的Stub方式包装对底层接口的调用,从而提供一种更为简便的调用方式。使用该方式需要利用支持环境(比如Axis)所提供的工具根据WSDL预生成WebService客户端的实现代码。因此如果服务的WSDL发生变化,就必须重新生成新的客户端代码并进行重新部署。

 

该方法需要使用wsdl2java命令来预生成WebService客户端代码,为了支持该命令,需要安装一些环境。

 

3Dynamic Proxy

动态代理(Dynamic Proxy)的方法实现对Web Service的动态调用,可以在运行时根据用户定义的Client端接口创建适配对象。从而避免了直接操作底层的接口,减少了客户端的冗余,屏蔽了调用相关的复杂性。

 

该方法主要在于客户端接口,该客户端接口需要继承java.rmi.Remote接口,然后将服务端的接口中的方法copy过来。

 

 

小结:

从发展历史角度来看,很容易理解他们的侧重点,Axis1最早,所以注重的只是简单的发布接口即可,之后随之Axis2对其进行了优化,可以支持自定义参数,但并不完善,所以CXF的出现对这一功能进行了完善并且适应了潮流,实现了与Spring的集成,跟这些比起来,EJB3中对于WebService的支持只需要使用一个@WebService即可完成,所以软件的开发是让使用者变傻,而我们学习这些是为了理解其原理和本质。

这篇关于WebService流行框架之Axis和CXF的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/927810

相关文章

修改若依框架Token的过期时间问题

《修改若依框架Token的过期时间问题》本文介绍了如何修改若依框架中Token的过期时间,通过修改`application.yml`文件中的配置来实现,默认单位为分钟,希望此经验对大家有所帮助,也欢迎... 目录修改若依框架Token的过期时间修改Token的过期时间关闭Token的过期时js间总结修改若依

Idea调用WebService的关键步骤和注意事项

《Idea调用WebService的关键步骤和注意事项》:本文主要介绍如何在Idea中调用WebService,包括理解WebService的基本概念、获取WSDL文件、阅读和理解WSDL文件、选... 目录前言一、理解WebService的基本概念二、获取WSDL文件三、阅读和理解WSDL文件四、选择对接

MyBatis框架实现一个简单的数据查询操作

《MyBatis框架实现一个简单的数据查询操作》本文介绍了MyBatis框架下进行数据查询操作的详细步骤,括创建实体类、编写SQL标签、配置Mapper、开启驼峰命名映射以及执行SQL语句等,感兴趣的... 基于在前面几章我们已经学习了对MyBATis进行环境配置,并利用SqlSessionFactory核

cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个?

跨平台系列 cross-plateform 跨平台应用程序-01-概览 cross-plateform 跨平台应用程序-02-有哪些主流技术栈? cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个? cross-plateform 跨平台应用程序-04-React Native 介绍 cross-plateform 跨平台应用程序-05-Flutte

Spring框架5 - 容器的扩展功能 (ApplicationContext)

private static ApplicationContext applicationContext;static {applicationContext = new ClassPathXmlApplicationContext("bean.xml");} BeanFactory的功能扩展类ApplicationContext进行深度的分析。ApplicationConext与 BeanF

数据治理框架-ISO数据治理标准

引言 "数据治理"并不是一个新的概念,国内外有很多组织专注于数据治理理论和实践的研究。目前国际上,主要的数据治理框架有ISO数据治理标准、GDI数据治理框架、DAMA数据治理管理框架等。 ISO数据治理标准 改标准阐述了数据治理的标准、基本原则和数据治理模型,是一套完整的数据治理方法论。 ISO/IEC 38505标准的数据治理方法论的核心内容如下: 数据治理的目标:促进组织高效、合理地

ZooKeeper 中的 Curator 框架解析

Apache ZooKeeper 是一个为分布式应用提供一致性服务的软件。它提供了诸如配置管理、分布式同步、组服务等功能。在使用 ZooKeeper 时,Curator 是一个非常流行的客户端库,它简化了 ZooKeeper 的使用,提供了高级的抽象和丰富的工具。本文将详细介绍 Curator 框架,包括它的设计哲学、核心组件以及如何使用 Curator 来简化 ZooKeeper 的操作。 1

【Kubernetes】K8s 的安全框架和用户认证

K8s 的安全框架和用户认证 1.Kubernetes 的安全框架1.1 认证:Authentication1.2 鉴权:Authorization1.3 准入控制:Admission Control 2.Kubernetes 的用户认证2.1 Kubernetes 的用户认证方式2.2 配置 Kubernetes 集群使用密码认证 Kubernetes 作为一个分布式的虚拟

Spring Framework系统框架

序号表示的是学习顺序 IoC(控制反转)/DI(依赖注入): ioc:思想上是控制反转,spring提供了一个容器,称为IOC容器,用它来充当IOC思想中的外部。 我的理解就是spring把这些对象集中管理,放在容器中,这个容器就叫Ioc这些对象统称为Bean 用对象的时候不用new,直接外部提供(bean) 当外部的对象有关系的时候,IOC给它俩绑好(DI) DI和IO

Sentinel 高可用流量管理框架

Sentinel 是面向分布式服务架构的高可用流量防护组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者保障微服务的稳定性。 Sentinel 具有以下特性: 丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应