当前位置 : 主页 > 网页制作 > Nodejs >

WebService(4)_Apache CXF 服务端三种发布方式(图文详解实例)

来源:互联网 收集:自由互联 发布时间:2021-06-24
感觉CXF的开发方式,和使用JDK原生开发,并没有什么太大的区别 注: 由于JDK或者CXK框架的版本问题,生成客户端之后,有一个类会抛出异常,原则上,可以根据提示,将第三个入参删除,并不会对
感觉CXF的开发方式,和使用JDK原生开发,并没有什么太大的区别

注: 由于JDK或者CXK框架的版本问题,生成客户端之后,有一个类会抛出异常,原则上,可以根据提示,将第三个入参删除,并不会对调用WebService产生影响.

CXF包,自己去Apache官网上下载吧 , 如何配置环境变量 , 以及验证 , 自己百度吧…. 验证方法 :   在命令行中 输入  wsdl2java -v


CXF方式的WebService发布有三种:
1. Main()
	i. 使用main()发布,CXF会启动内置的jetty服务器来提供Web服务(启动中会看到控制台输出的日志)
	
2. 基于Spring 发布到 Tomcat

3.不基于Spring 发布到 Tomcat

Jetty 和 Tomcat 的比较 :
相同点:
	1.Tomcat 和 Jetty都是一种Servlet引擎.他们都支持标准的Servlet规范和JavaEE的规范.

不同点:
	1.架构比较:
		(1).Jetty 的架构比Tomcat更为简单.
		(2).Jetty 的架构是基于Handler来实现的,主要的扩展功能都可以用Handler来实现.扩展简单
		(3).Tomcat 的架构是基于容器设计的,进行扩展时需要了解Tomcat的整体设计结构,不易扩展.
			
	2.性能比较:
		(1).Jetty 和Tomcat性能方面差异不大.
			Jetty可以同时处理大量连接而且可以长时间保持连接,适合于Web聊天应用等等..
			Jetty的架构简单,因此作为服务器,Jetty可以按需加载组件,减少不需要的组件,减少了服务内存开销,从而提高服务器性能.
			Jetty默认采用NIO,在处理IO请求上可能更占优势,在处理静态资源时,性能更高.
						
			Tomcat适合处理少数非常繁忙的链接,也就是连接生命周期短的话,Tomcat的总体性能更高.
			Tomcat默认采用BIO处理IO请求,在处理静态资源时,性能较差.
						
			Jetty的应用更加快速,修改简单,对新的Servlet规范的支持较好.
			Tomcat目前应用比较广泛,对JavaEE 和 Servlet的支持更加全面,很多特性会直接集成进来.


1.使用Main()发布 CXF WebService

1.1 首先是项目结构

1.2 一个接口 , 一个接口实现类 , 一个发布Main方法

1.3 接口实现

1.4 使用Main()发布

1.5 使用 CXF提供的工具方法 "wsdl2java +发布URL "即可生成客户端.前提是你安装配置了CXF客户端以及JDK

生成客户端方法和JDK自带的 方法是类似的 , 你要是把 WebService(3)_开发流程(原生/JDK自带工具) 这篇看懂了,就OK了...

关于如何根据WSDL文档 , 调用接口方法 , 在JDK自带的那篇里面也说明了....

//******************************************************萌萌的分割线******************************************************//******************************************************萌萌的分割线******************************************************//******************************************************萌萌的分割线******************************************************

2.使用Spring 发布 CXF 至 Tomcat

2.1 使用Spring发布 CXFTomcat不再写例子,而是套用很久以前的一个Demo.

2.2 其实和之前使用 Main()发布差不多,只不过这次咱们的是一个Web工程.

    结构的话是这样子的………

只要关注红框处就可以 ,其他的可以忽略……

2.3 接口 ,没什么说的 ,之前都说过两遍了自己体会

2.4 实现类  只看红框标出来的就行了 , 其他的请无视….(其实我是想打上马赛克的)

实现接口中的两个方法...具体的业务逻辑...

2.5 Spring配置文件 ,这个Spring配置文件和一般的 applicationContext.xml是不一样的哦

Id :唯一标示符

Implementor :接口实现类的全路径地址

Address : Tomcat发布之后的访问地址

http://localhost:8088/web项目名字/address?wsdl

这个是Apache CXF 官网提供的 XML头 , 给你复制用的…不要谢我…

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:jaxws="http://cxf.apache.org/jaxws"
    xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">
 
<jaxws:endpoint id="classImpl"
    implementor="org.apache.cxf.jaxws.service.Hello"
    endpointName="e:HelloEndpointCustomized"
    serviceName="s:HelloServiceCustomized"
    address="http://localhost:8080/test"
    xmlns:e="http://service.jaxws.cxf.apache.org/endpoint"
    xmlns:s="http://service.jaxws.cxf.apache.org/service"/>
 

</beans>

关于配置文件中的配置解释 :




2.6 web.xml

配置Spring配置文件的路径

SpringFrameWork监听器

CXF的一个过滤器?拦截器?  这个……


2.7 最后直接把这个工程 , 丢到Tomcat中运行就可以了...



这个Web项目 ,propertiesweb选项卡中的名字为准……

有时候把项目名字改掉了,Web名字不改也是没用的


其他的生成客户端就不说了和之前的一样样的…………


//******************************************************萌萌的分割线******************************************************
//******************************************************萌萌的分割线******************************************************
//******************************************************萌萌的分割线******************************************************


3不基于Spring发布 CXF Tomcat

虽然不基于Spring ,但是这个工程依旧是一个Web工程……

3.1 工程结构


3.其实还是和之前的差不多的

一个接口 ,一个接口实现 ,还有一个继承 "CXFNonSpringServlet"类的实现类真是见名知意啊

3.3 接口 

仔细看看 ,有没有什么和上面不一样的???

是的,你没有看错

他喵的 ,竟然没有WebServiceWebMethod注解了

一下子 ,还真有些不习惯………

3.4 实现类

接口实现类 ,依旧是那么的平淡无奇……

3.5 别忘记还有web.xml配置


3.6 最后是这个CXFNonSpringServletImpl实现类….

这个实现类 ,具体还没深入看过

回头查了资料 , 再来补上

先这么写吧

3.7 然后把这个工程丢到Tomat里面 , 奔跑吧....

3.8 哒啦...出来了...

TomcatManager中就可以看到 CXF发布的服务了


3.9然后咱们生成客户端调用一下

生成客户端阅读WSDL文档 , 就不说了

网友评论