nvidia geforce 210-iphone换铃声

webservice框架
2023年4月6日发(作者:深山红叶dos工具箱)

关于WebService的⽤法demo总结

前⾔

在跨系统和跨平台的系统通信中,WebService是⼀个事实上的标准,其以平台⽆关性,获得了⼴泛的应⽤。本⽂将讲述如何基于

spring来集成CXF,并开发出第⼀个HelloWorld的应⽤。

vice是什么?

Webservice是⼀个平台独⽴的,低耦合的,⾃包含的、基于可编程的web的应⽤程序,可使⽤开放的XML(标准通⽤标记语⾔下的

⼀个⼦集)标准来描述、发布、发现、协调和配置这些应⽤程序,⽤于开发分布式的互操作的应⽤程序。

WebService技术,能使得运⾏在不同机器上的不同应⽤⽆须借助附加的、专门的第三⽅软件或硬件,就可相互交换数据或集成。依

据WebService规范实施的应⽤之间,⽆论它们所使⽤的语⾔、平台或内部协议是什么,都可以相互交换数据。WebService是⾃

描述、⾃包含的可⽤⽹络模块,可以执⾏具体的业务功能。WebService也很容易部署,因为它们基于⼀些常规的产业标准以及已有

的⼀些技术,诸如标准通⽤标记语⾔下的⼦集XML、HTTP。WebService减少了应⽤接⼝的花费。WebService为整个企业甚⾄多

个组织之间的业务流程的集成提供了⼀个通⽤机制。

vice模型

WebService体系结构基于三种⾓⾊(即服务提供者、服务注册中⼼和服务请求者)之间的交互。交互涉及发布、查找和绑定操作,

这些⾓⾊和操作⼀起作⽤于WebServices组件,即WebServices软件模块及其描述。在典型情况下,服务提供者托管可通过⽹络访问

的的软件模块,定义WebServices的服务描述并把它发布到服务注册中⼼;服务请求者使⽤查找操作来从服务注册中⼼检索服务描

述,然后使⽤服务描述与服务提供者进⾏绑定并调⽤WebServices实现和同它交互。

从图中可以看出,SOA结构中共有三种⾓⾊:

(1)、服务提供者:发布⾃⼰的服务,并且对服务请求进⾏响应。

(2)、服务注册中⼼:注册已经发布的WebServices,对其进⾏分类,并提供搜索服务。

(3)、服务请求者:利⽤服务注册中⼼查找所需的服务,然后使⽤该服务。

SOA体系结构中的组件必须具有上述⼀种或多种⾓⾊,这些⾓⾊之间使⽤三种操作:

(1)、发布操作:使服务提供者可以向服务注册中⼼注册⾃⼰的功能及访问接⼝。

(2)、查找操作:使服务请求者可以通过服务注册中⼼查找特定种类的服务。

(3)、绑定操作:使服务请求者能够真正使⽤服务提供者提供的服务。

vice开源框架的选择

⽬前主流的WebService框架主要有3种:Axis2,CXF,和SpringWS。Axis2和CXF都是来⾃于Apache,各个⽅⾯相差不多,

但是⽬前市场上使⽤CXF⽐较多⼀点。

使⽤篇

cfx⼀套最简配置jar包

maven依赖

cxf3.0.4框架必需的包为:

注意:这⾥不包括spring依赖包和commoms下的jar包

1.最简单的demo

cxf-core

3.0.4

cxf-rt-bindings-soap

3.0.4

cxf-rt-databinding-jaxb

3.0.4

cxf-rt-frontend-jaxws

3.0.4

cxf-rt-frontend-simple

3.0.4

cxf-rt-transports-http

3.0.4

cxf-rt-transports-udp

3.0.4

cxf-rt-ws-addr

3.0.4

cxf-rt-wsdl

3.0.4

cxf-rt-ws-policy

3.0.4

neethi

3.0.3

cxf-rt-transports-http-jetty

3.0.3

服务端接⼝定义

服务端提供的获取⽤户的⽅法

注意:“@WebService”标记表⽰该接⼝是⼀个WebService服务;“@WebMethod”表⽰表⽰以下⽅法为WebService服务中的

⽅法;“@WebParam(name=”username”)”表⽰⽅法中的参数,username属性限制了参数的名称,若没有指定该属性,参数

将被重命名。

@WebParam(name=”userName”)经测试,可省略,但为了便于阅读,还是加上

服务端接⼝实现

模拟从服务端获取⽤户

编写服务端的启动程序

模拟WebService服务启动

@WebService

publicinterfaceIUserWebService{

UsergetUserByName(@WebParam(name="userName")StringuserName);

ListgetAllUsers();

}

publicclassUserWebServiceImplimplementsIUserWebService{

privatestaticListusers=newArrayList();

static{

(newUser("001","李四"));

(newUser("002","王五"));

(newUser("003","赵六"));

}

publicUsergetUserByName(StringuserName){

if(y(userName)){

returnnull;

}

for(Useruser:users){

if((e())){

returnuser;

}

}

returnnull;

}

publicListgetAllUsers(){

returnusers;

}

}

publicclassWebServiceApp{

publicstaticvoidmain(String[]args){

//webservice接⼝

IUserWebServiceuserService=newUserWebServiceImpl();

//访问地址

Stringaddress="http://localhost:8080/userWebService";

//发布服务

h(address,userService);

n("webservice已启动");

}

}

Thumenttreeisshownbelow.

xmlns:tns="ame/"xmlns:soap="/wsdl/soap/"xmlns:ns1="/soap/http"

name="UserWebServiceImplService"targetNamespace="ame/">

elementFormDefault="unqualified"targetNamespace="ame/"version="1.0">

显⽰这样的页⾯说明服务启动成功了,下⾯模拟客户端访问

编写客户端

publicclassWebServiceClient{

publicstaticvoidmain(String[]args){

JaxWsProxyFactoryBeansvr=newJaxWsProxyFactoryBean();

//服务端接⼝

viceClass();

//服务端地址

ress("http://localhost:8080/userWebService");

IUserWebServiceuserWebService=(IUserWebService)();

Listusers=Users();

n(users);

}

}

输出结果:

[User[name=isName:李四],User[name=isName:王五],User[name=isName:赵六]]

启动服务端,然后启动客户端来访问服务。

2.如何集成spring框架

前提:检查spring版本

了解你的spring版本,cxf对spring版本,需要的依赖是不同的.⾄于什么版本匹配,还需要⾃⾏百度,我只实验了spring4.0+,需要

cxf3.0以上的版本⽀持,不然报错.

在中声明CXF监听器

创建WebService声明的Spring配置⽂件

注意:定义了⼀个WebService,implementor是WebService处理类,值上⾯定义的bean的id,其具体的实现类在

class中指明,address是它的访问路径,就是上⾯提到的将要在URL中显⽰的endpoint的名称。

下⾯可以启动项⽬,访问:项⽬名/webservice/services?wsdl

看⼀下都有什么webservice服务,

读取wsdl⽂件内容,访问路径:项⽬名/services/serviceName?wsdl

配置多个接⼝的⽅法

CXFServlet

vlet

1

CXFServlet

/webservice/*

<?xmlversion="1.0"encoding="utf-8"?>

xmlns:xsi="/2001/XMLSchema-instance"

xmlns:jaxws="/jaxws"

xmlns:http-conf="/transports/http/configuration"

xsi:schemaLocation="/schema/beans

/schema/beans/

/jaxws

/schemas/

/transports/http/configuration

/schemas/configuration/">

总结:配置⽅⾯基本完成了,剩下还是客户端的调⽤

客户端的调⽤

模拟客户端的调⽤

异常问题总结

jar包缺失

在使⽤cxf过程中经常出CannotfindanyregisteredHttpDestinationFactoryfromtheBus,⼀般是没有引⼊cxf-rt-

。查看

tination(:270)类,jettyFactory

为null,也就是缺少http-jetty的实现。

解决办法:

serviceClass="ebService"

address="/RoleWebService">

serviceClass="ebService"

address="/UserWebService">

publicclassWebServiceClient{

publicstaticvoidmain(String[]args){

StringserviceURL="http://localhost:8000/coolframe/webservice/UserWebService";

JaxWsProxyFactoryBeanfactory=newJaxWsProxyFactoryBean();

viceClass();

ress(serviceURL);

IUserWebServiceuserWebService=(IUserWebService)();

ListuserList=Users();

n(userList);

}

//输出结果:[User[name=isName:李四],User[name=isName:王五],User[name=isName:赵六]]

}

Causedby:ption:CannotfindanyregisteredHttpDestinationFactoryfromtheBus.

spring版本和cxf版本不匹配

解决办法:

根据spring版本⾃⾏百度,更换cxf依赖版本

xml加载取顺序问题

解决办法:

把cxf的配置不要放在DispatcherServlet⾥,放到contextConfigLocation⾥加载

xml⽂件找不到

cxf2.7以上配置中不要写下⾯的两句

cxf-rt-transports-http-jetty

3.0.3

MethodError:bProxyClass(Ljava/lang/Class;)Z

BeanDefinitionException:Nobeannamed'cxf'isdefined

contextConfigLocation

classpath*:conf/

tFoundException:classpathresource[META-INF/cxf/]cannotbeopenedbecauseitdoesnotexist

更多推荐

webservice框架