注: 由于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发布 CXF至Tomcat不再写例子,而是套用很久以前的一个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项目 ,以properties中web选项卡中的名字为准……
有时候把项目名字改掉了,而Web名字不改…也是没用的…
其他的生成客户端就不说了…和之前的一样样的…………
//******************************************************萌萌的分割线******************************************************
//******************************************************萌萌的分割线******************************************************
//******************************************************萌萌的分割线******************************************************
3. 不基于Spring发布 CXF至 Tomcat
虽然不基于Spring ,但是这个工程依旧是一个Web工程……
3.1 工程结构
3.2 其实还是和之前的差不多的…
一个接口 ,一个接口实现 ,还有一个继承 "CXFNonSpringServlet"类的实现类…真是见名知意啊…
3.3 接口
仔细看看 ,有没有什么和上面不一样的???
是的,你没有看错…
他喵的 ,竟然没有WebService和WebMethod注解了…
一下子 ,还真有些不习惯………
3.4 实现类
接口实现类 ,依旧是那么的平淡无奇……
3.5 别忘记还有web.xml配置
3.6 最后是这个CXFNonSpringServletImpl实现类….
这个实现类 ,具体还没深入看过…
回头查了资料 , 再来补上…
先这么写吧…
3.7 然后把这个工程丢到Tomat里面 , 奔跑吧....
3.8 哒啦...出来了...
在Tomcat的Manager中就可以看到 CXF发布的服务了…
3.9然后咱们生成客户端调用一下…
生成客户端和阅读WSDL文档 , 就不说了…