spring调用webservice
- 一、WebService入门
- 1.1 什么是WebService
- 1.2 调用网络上的WebService服务
- 1.3 SOAP和WSDL概念
- 1.3.1 SOAP(Simple Object Access Protocol):简单对象访问协议
- 1.3.2 WSDL Web服务描述语言
- 二、基于jdk1.7发布一个WebService服务
- 2.1 服务端发布
- 2.2 客户端调用
- 三、apache CXF
- 3.1 服务端开发
- 3.2 客户端开发
spring调用webservice服务是基于Apache的CXF实现的
一、WebService入门
1.1 什么是WebService
Web service是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的互操作的应用程序。
Web Service技术, 能使得运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件, 就可相互交换数据或集成。依据Web Service规范实施的应用之间, 无论它们所使用的语言、 平台或内部协议是什么, 都可以相互交换数据。Web Service是自描述、 自包含的可用网络模块, 可以执行具体的业务功能。Web Service也很容易部署, 因为它们基于一些常规的产业标准以及已有的一些技术,诸如标准通用标记语言下的子集XML、HTTP。Web Service减少了应用接口的花费。Web Service为整个企业甚至多个组织之间的业务流程的集成提供了一个通用机制。
WebService的特点:
- WebService通过HTTP POST方式接受客户的请求
- WebService与客户端之间一般使用SOAP协议传输XML数据
- 它本身就是为了跨平台或跨语言而设计的
1.2 调用网络上的WebService服务
公共的webservice服务,可以查阅。http://webxml.com.cn/
1.3 SOAP和WSDL概念
1.3.1 SOAP(Simple Object Access Protocol):简单对象访问协议
- SOAP作为一个基于XML语言的协议用于在网上传输数据。
- SOAP = 在HTTP的基础上+XML数据。
- SOAP是基于HTTP的。
SOAP的组成如下:
- Envelope – 必须的部分。以XML的根元素出现。
- Headers – 可选的。
- Body – 必须的。在body部分,包含要执行的服务器的方法。和发送到服务器的数据。
1.3.2 WSDL Web服务描述语言
WSDL(WebService Description Language):web 服务描述语言
就是一个xml文档,用于描述当前服务的一些信息(服务名称、服务的发布地址、服务提供的方法、方法的参数类型、方法的返回值类型等)
二、基于jdk1.7发布一个WebService服务
2.1 服务端发布
服务端发布过程很简单,只需要在类上加上webservice注解即可
@WebService
public class HelloService {
public String sayHello(String name,int i){
System.out.println("服务端的sayHello方法被调用了。。。。");
return "helle" + name;
}
public static void main(String[] args) {
String address = "http://192.168.115.87:8080/hello";
Object implementor = new HelloService();
Endpoint.publish(address, implementor);
}
}
2.2 客户端调用
在控制台中,定位到一个空文件夹,通过jdk提供的命令,将webservice解析生成本地代码
/**
* 1、使用wsimport命令解析wsdl文件生成本地代码
* 2、通过本地代码创建一个代理对象
* 3、通过代理对象实现远程调用
* @author zhaoqx
*
*/
public class App {
public static void main(String[] args) {
HelloServiceService ss = new HelloServiceService();
//创建客户端代理对象,用于远程调用
HelloService proxy = ss.getHelloServicePort();
String ret = proxy.sayHello("小明", 10);
System.out.println(ret);
}
}
三、apache CXF
采用jdk提供的webservice注解对于实际开发中过于困难,因此采用apache提供的CXF来实现
3.1 服务端开发
- 导入CXF相关的jar包
- 在web.xml中配置CXF框架提供的一个Servlet
<!-- 配置CXF框架提供的Servlet -->
<servlet>
<servlet-name>cxf</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
<!-- 通过初始化参数指定CXF框架的配置文件位置 -->
<init-param>
<param-name>config-location</param-name>
<param-value>classpath:cxf.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>cxf</servlet-name>
<url-pattern>/service/*</url-pattern>
</servlet-mapping>
- 在类路径下提供cxf.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jaxws="http://cxf.apache.org/jaxws"
xmlns:soap="http://cxf.apache.org/bindings/soap"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/bindings/soap
http://cxf.apache.org/schemas/configuration/soap.xsd
http://cxf.apache.org/jaxws
http://cxf.apache.org/schemas/jaxws.xsd">
<!-- 引入CXF Bean定义如下,早期的版本中使用 -->
<import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
</beans>
- 开发一个接口和实现类
- 在cxf.xml中注册服务
3.2 客户端开发
1、创建Java项目,并导入相关的jar包
2、使用wsimport或者CXF提供wsdl2java生成本地代码,只需要生成接口文件即可
3、将接口文件复制到项目中
4、提供spring配置文件,注册客户端代理对象
5、读取spring配置文件,创建spring工厂,从工厂中获取代理对象,实现远程调用
同样可以采用注解的方式从spring容器中获得代理对象
//注入crm代理对象
@Autowired
private ICustomerService proxy;