基础知识__WebService
本文由 Luzhuo 编写,请尊重个人劳动成果,转发请保留该信息.
原文: http://blog.csdn.net/Rozol/article/details/50511873
微博: http://weibo.com/u/2524456400
这是一篇关于WebService的基础知识的整理
介绍
简单应用(原理)
客户端:
- cmd –> d: –>
wsimport -d . http://192.168.0.107:8080/helloService?wsdl
(×生成.class文件)
- cmd –> d: –>
wsimport -s . http://192.168.0.107:8080/helloService?wsdl
(√生成.java文件&.class文件)
- cmd –> d: –>
wsimport -s . -p com.newpackge.demo http://192.168.0.107:8080/helloService?wsdl
(将代码生成在com.newpackge.demo
包下)
- 将生成的代码包(删除.class文件)拷贝到客户端src目录下 –> 找到接口与实现类调用方法 (详见:WsimportInvoke.java)
- 方式二: 通过java jdk 自带的 URLConnect 类 (通过URLConnect发送http请求,往WebService服务端发送xml格式的数据,模拟soap协议) (详见:URLConnectInvoke.java)
- 方式三: 通过客户端编程的方式调用WebService,通过java jdk 的Service类,依赖一个接口,通过wsimport生成的本地代码中获取 (详见:ServiceInvoke.java)
- 方式四: 通过 ajax 去调用WebService (模拟soap协议)(不能实现,因为目前的浏览器都不允许 跨域访问 )(非正规方式实现: jQuery调用本地服务器代码,本地服务器代码去调用WebService)
- 上面各方式优劣分析:
wsdl详解
工具:
cxf框架中的应用(实际使用)
- Apache CXF = Celtix + Xfire
- 支持协议:Soap1.1 / Soap1.2 / CORBA
- 可与Spring快速无缝整合
- 部署灵活: 可运行于 Tomcat / Jboss / Jetty / IBMWS / BeaWL
cxf命令:wsdl2java (与wsimport相似)
服务端:
方式一: 用 cxf 框架提供的类 Serverfactorybean 发布WebService (不需要标注WebService注解与有效方法) (详见:CxfServer.java / CxfWebService.java) (与客户端方式一对应)
方式二: 用 cxf 提供的类 JaxWsServerfactorybean 发布一个带接口的WebService (需要注解webser) (详见:PublishUserService.java / UserService.java / UserServiceImpl.java) (与客户端方式二对应)
- 发布soap1.2协议:
@BindingType(value=SOAPBinding.soAP12HTTP_BINDING)
(只有方式二可行,因为JaxWsServerfactorybean
继承Serverfactorybean
) (详见:UserService.java)- 拦截请求发送消息:(详见:PublishUserService.java)
客户端:
方式一: 用 cxf 框架提供 ClientProxyfactorybean 的类调用WebService,这个接口通过 wsimport 生成 (详见:CxfClientInvoke.java) (与服务端方式一对应)
方式二: 用 cxf 提供的类 JaxWsProxyfactorybean 来调用WebService(详见:CxfJaxWsInvoke.java) (与服务端方式二对应)
工具:
- 环境变量:
cxf与Web的整合
服务端:
- New –> Web Project –> 拷贝cxf的.jar文件到
/Webroot/WEB-INF/lib/
下 –> 配置web.xml(copy) –> 创建cxf-servlet.xml
(/Webroot/WEB-INF/
)(copy) –> …- 发布不带接口的WebService (详见:cxf-servlet.xml / HelloService.java)
- 发布一个带接口的webservice (详见:cxf-servlet.xml / CallService.java / CallServiceImpl.java)
- 拦截消息: (详见:cxf-servlet.xml)
- 访问
http://localhost/CxfSpringWeb/ws
客户端:
- New –> java project –> src创建
CxfSpring.xml
(copy) –> 拷贝cxf的.jar文件到新建lib下 –> Add Build Path –> …- 通过
wsimport -s . http://localhost/CxfSpringWeb/ws/makeCallService?wsdl
生成代码 –> 保留接口文件(如:CallService.java),删除其他 –> copy包到src下 –> 删掉包下报错代码- 通过配置文件的方式调用WebService,需要依赖一个接口 (详见:SpringClientInvoke.java / CxfSpring.xml)
服务端的发布方式简列
- java jdk 的类发布 Endpoint.publish(…); (详见:PublishServer.java)
- cxf 的类 Serverfactorybean 发布 (详见:CxfServer.java / CxfWebService.java)
- cxf 的类 JaxWsServerfactorybean 发布 (详见:PublishUserService.java / UserService.java / UserServiceImpl.java)
- cxf + spring 的配置发布 (详见:cxf-servlet.xml / CallService.java / CallServiceImpl.java)
客户端的调用方式简列
- wsimport方式生成的代码直接调用 (详见:WsimportInvoke.java)
- java jdk 的类 URLConnect 模拟soap协议 (详见:URLConnectInvoke.java)
- 客户端编程的方式调用,依赖一个接口 (详见:ServiceInvoke.java)
- jQuery调用本地服务器代码,本地服务器代码去调用WebService (详见:不会…)
- cxf的 ClientProxyfactorybean 调用,依赖一个接口 (详见:CxfClientInvoke.java)
- cxf的 JaxWsProxyfactorybean 调用,依赖一个接口 (详见:CxfJaxWsInvoke.java)
- cxf + spring 的配置文件调用,依赖一个接口 (详见:SpringClientInvoke.java / CxfSpring.xml)
Code
GitHub
免费的WebService
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。