Spring整合CXF

版权声明:转载请随意! https://blog.csdn.net/qq_41723615/article/details/89519322

一、分布式开发:

在现实的开发环境中,可能一个项目会被部署到不同的区域上,例如银行系统。省,城市都有各自的服务器。

所有的服务器都有可能调用一个业务中心,这样如果单独将业务中心抽取出来,做业务的处理过程,只要中心的业务修改了,

那么其他服务器也会产生变化。

现在的分布式开发,更多情况是将业务中心的操作分步处理,给所有的客户端提供支持。

技术的过渡:

   -》        -》          

EJB技术:

            

现在不使用这些技术了。

WebService处理技术(WEB服务):现在的WEB服务不再局限于EJB容器,可以直接在服务器进行搭建。

CXF开发框架:简化WebService开发难度。

SOA(面向服务架构):不同的用户都可以通过这个服务器进行远程的操作调用。

不管是EJB、RMI、WebService、SOA这些技术都存在本质的问题:慢。而为了提供性能使用了JSON作为数据的交互方式。

所以JSONP(跨域请求)的应用就越来越多了。后面的发展更多的是对WebService进行封装处理。

 二、开发WebService程序

本次操作将基于CXF工具进行WebService程序编写。

如果现在只是进行最为基础的CXF的WebService开发,不需要全部的开发包都拷贝进项目中,只需要拷贝一个核心的包就够了。

范例:定义一个支持Web服务的接口。

WebService的调用一定要以接口为主。

package jcn;

import javax.jws.WebParam;
import javax.jws.WebService;

@WebService
public interface IEchoService {

	public String echo(@WebParam String info);
}

此时接口就变为了WebService服务接口,服务器地接口主要是给客户端看的。

范例:定义实现类

package jcn;

import javax.jws.WebService;

@WebService(endpointInterface="jcn.IEchoService",serviceName="echo")
public class EchoServiceImpl implements IEchoService{

	@Override
	public String echo(String info) {
		return "ECHO:" + info;
	}

}

现在的webService是基于CXF的,这个组件最方便的地方在于它可以直接用Application的方式进行,里面自带小的WEB容器。

范例:发布服务

import javax.xml.ws.Endpoint;

public class TestCode {

	public static void main(String[] args) {
		IEchoService echoService = new EchoServiceImpl();
		Endpoint.publish("http://localhost:8888/echourl", echoService);
	}
}

如果要想去查看服务信息,则可以通过浏览器打开输入路径。

http://localhost:8888/echourl?wsdl

现在的接口描述语言都是通过XML文件的形式给出来的。

整个webService留给用户开发最麻烦的部分不在于服务器端,而在于客户端,这个时候的开发工具就可以帮助用户很多的忙; 

开发工具会自动的生成一系列的辅助调用代码。

三、利用工具创建webservice项目

项目创建完成需要建立具体客户端代码;

现在只是一个标准的webservice操作,不需要IBM的webSphere支持。

之前给出了webservice的描述地址信息。下面需要将信息拷贝过来。

接口路径地址:http://localhost:8888/echourl?wsdl

随后会在com.client中生成许多代码,实际上就是描述客户端的假实现。

编写调用测试:

package com.test;

import com.client.Echo_Service;
import com.client.IEchoService;

public class TestEcho {

	public static void main(String[] args) {
		Echo_Service service = new Echo_Service();
		IEchoService portType = service.getEchoServiceImplPort();
		System.out.println(portType.echo("www.baidu.com"));
	}
	
}

现在明明是一个远程的服务器调用操作,但是由于一些代理代码的生成,所以现在客户端的调用就好像是在本地调用的感觉一样。

四、将CXF与spring整合

spring支持CXF的开发整合,如果要将CXF交由spring管理,需要将CXF所有开发拷贝到项目中。

随后添加spring添加支持配置。

编写web.xml文件添加CXF的Servlet配置。

 <servlet>
  	<servlet-name>CXFServlet</servlet-name>
  	<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>CXFServlet</servlet-name>
  	<url-pattern>/*</url-pattern>
  </servlet-mapping>

编写applicationContext.xml文件:

<import resource="classpath:META-INF/cxf/cxf.xml"/>
<import resource="classpath:META-INF/cxf/cxf-servlet.xml"/>
<jaxws:endpoint id="echoServiceImpl"/>

现在的项目CXF将交由Spring进行管理,随后将项目发布到Tomcat之中。

分布式开发现在的开发环境之中依然会大量使用,但是不是所有操作都会使用分布式开发,对于高并发量的数据建议使用JSON的形式进行传递,或者利用JSONP进行跨域的访问。

webservice是一种设计的思想,核心就在于业务层的突出。

猜你喜欢

转载自blog.csdn.net/qq_41723615/article/details/89519322