nvidia geforce 210-iphone换铃声
![webservice框架](/uploads/image/0084.jpg)
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
服务端接⼝定义
服务端提供的获取⽤户的⽅法
注意:“@WebService”标记表⽰该接⼝是⼀个WebService服务;“@WebMethod”表⽰表⽰以下⽅法为WebService服务中的
⽅法;“@WebParam(name=”username”)”表⽰⽅法中的参数,username属性限制了参数的名称,若没有指定该属性,参数
将被重命名。
@WebParam(name=”userName”)经测试,可省略,但为了便于阅读,还是加上
服务端接⼝实现
模拟从服务端获取⽤户
编写服务端的启动程序
模拟WebService服务启动
@WebService
publicinterfaceIUserWebService{
UsergetUserByName(@WebParam(name="userName")StringuserName);
List
}
publicclassUserWebServiceImplimplementsIUserWebService{
privatestaticList
static{
(newUser("001","李四"));
(newUser("002","王五"));
(newUser("003","赵六"));
}
publicUsergetUserByName(StringuserName){
if(y(userName)){
returnnull;
}
for(Useruser:users){
if((e())){
returnuser;
}
}
returnnull;
}
publicList
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)();
List
n(users);
}
}
输出结果:
[User[name=isName:李四],User[name=isName:王五],User[name=isName:赵六]]
启动服务端,然后启动客户端来访问服务。
2.如何集成spring框架
前提:检查spring版本
了解你的spring版本,cxf对spring版本,需要的依赖是不同的.⾄于什么版本匹配,还需要⾃⾏百度,我只实验了spring4.0+,需要
cxf3.0以上的版本⽀持,不然报错.
在中声明CXF监听器
创建WebService声明的Spring配置⽂件
注意:
class中指明,address是它的访问路径,就是上⾯提到的将要在URL中显⽰的endpoint的名称。
下⾯可以启动项⽬,访问:项⽬名/webservice/services?wsdl
看⼀下都有什么webservice服务,
读取wsdl⽂件内容,访问路径:项⽬名/services/serviceName?wsdl
配置多个接⼝的⽅法
<?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)();
List
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以上配置中不要写下⾯的两句
MethodError:bProxyClass(Ljava/lang/Class;)Z
BeanDefinitionException:Nobeannamed'cxf'isdefined
classpath*:conf/
tFoundException:classpathresource[META-INF/cxf/]cannotbeopenedbecauseitdoesnotexist
更多推荐
webservice框架
发布评论