WebService(4)_Apache CXF 服务端四种发布方式(图文详解实例)
来源:互联网 发布:ubuntu解压tar.gz命令 编辑:程序博客网 时间:2024/06/04 18:37
这里把四个方法的工程项目都上传了.. 下载之后直接可以发布测试使用
CXF+Jetty发布WebService
WebService使用RI发布
CXF+Spring+Tomcat发布WebService
CXF+Tomat发布WebService
这个是由于JDK版本引起的
CXF包,自己去Apache官网上下载吧 ,
CXF配置环境变量
在CLASSPATH中添加 D:\JavaApp\apache-cxf-2.7.5\lib
新建CXF_HOME D:\JavaApp\apache-cxf-2.7.5
在PATH中添加 D:\JavaApp\apache-cxf-2.7.5\bin
验证方法 : 在命令行中 输入 wsdl2java -v
CXF方式的WebService发布有四种:1.使用CXF内置的Jetty发布WebService2.使用RI(Oracle JAX_WS RI) 发布WebService3.在Web容器(Tomcat)中基于Spring发布WebService4.CXF不基于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.使用CXF内置Jetty发布 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自带的那篇里面也说明了....
//******************************************************萌萌的分割线******************************************************
//******************************************************萌萌的分割线******************************************************
//******************************************************萌萌的分割线******************************************************
然后我们看使用RI(OracleJAX_WS RI)发布WebService
首先我们需要将RI 和 Tomcat进行整合.
RI的下载地址 : https://jax-ws.java.net/2.2.8/
下载完成之后,解压..
随后需要对 Tomcat 的 config/catalina.properties 文件进行配置:
common.loader=${catalina.base}/lib,${catalina.base}/lib/*.jar,${catalina.home}/lib,${catalina.home}/lib/*.jar,D:/Tool/jaxws-ri/lib/*.jar注意:以上配置中的最后一部分,其实就是在 Tomcat 中添加一系列关于 RI 的 jar 包。
这样子RI和Tomcat就整合好了...
下面我们编写服务端代码
接口
package com.ws.ri.server;import javax.jws.WebService;@WebServicepublic interface HelloService {public String sayHello(String name);}
@WebServicepublic class HelloServiceImpl implements HelloService {@Overridepublic String sayHello(String name) {return "hello : " + name;}}
在WEB-INF目录下添加"sun-jaxws.xml"配置文件.
配置三个属性:WS 的名称、实现类、URL 模式。正是通过这个“URL 模式”来访问 WSDL 的
<?xml version="1.0" encoding="UTF-8"?><endpoints xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime" version="2.0"><endpoint name="HelloService" implementation="com.ws.ri.server.HelloServiceImpl"url-pattern="/wsri/helloservice"/></endpoints>然后将这个项目,丢到整合好RI的Tomcat中,跑起来...
然后你会在控制台看到这样的打印信息
然后打开浏览器,输入发布的url : http://localhost:8080/WebService_RI_Server_1/wsri/helloservice
这个url注意前面要加上web项目的名字.
然后就出现了RI的控制台
点击WSDL就可以查看WSDL文档了..
接下去的客户端调用,就省略了..
//******************************************************萌萌的分割线******************************************************
//******************************************************萌萌的分割线******************************************************
//******************************************************萌萌的分割线******************************************************
接下来我们看在Web容器(Tomcat)中基于Spring发布WebService
接口
package com.ws.cxf.spring.tomcat.server;import javax.jws.WebService;@WebServicepublic interface HelloService {public String sayHello(String name);}接口实现
package com.ws.cxf.spring.tomcat.server;import javax.jws.WebService;import org.springframework.stereotype.Component;@WebService@Componentpublic class HelloServerImpl implements HelloService {/** * 发布地址 : http://localhost:8080/WebService_CXF_Spring_Tomcat_Server_1/ws * 到达控制台 */@Overridepublic String sayHello(String name) {return "Hello : " + name;}}
<?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"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"><!-- 这边是引入CXF的核心配置 --><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" /><jaxws:endpoint id="sayHello"implementor="com.ws.cxf.spring.tomcat.server.HelloServerImpl" address="/sayHello" /></beans>
<?xml version="1.0" encoding="UTF-8"?><web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <!-- Spring --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- CXF --> <servlet> <servlet-name>cxf</servlet-name> <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>cxf</servlet-name> <url-pattern>/ws/*</url-pattern> </servlet-mapping> </web-app>
然后将工程丢入Tomcat中跑吧...
在页面输入url
然后点击WSDL就可以看到WSDL文档了...
客户端调用.. 不说了.. 都是一样的...
//******************************************************萌萌的分割线******************************************************
//******************************************************萌萌的分割线******************************************************
//******************************************************萌萌的分割线******************************************************
4. 不基于Spring发布 CXF至 Tomcat
接口
注意 : 这里不用加@WebService注解
package com.test;public interface HelloWorld {public String sayHello(String name);}
package com.test;public class HelloWorldImpl implements HelloWorld {public String sayHello(String name) {return "hello : " + name;}}
主方法
package com.test;import javax.servlet.ServletConfig;import org.apache.cxf.Bus;import org.apache.cxf.BusFactory;import org.apache.cxf.frontend.ServerFactoryBean;import org.apache.cxf.transport.servlet.CXFNonSpringServlet;public class CXFNoSpringServletImpl extends CXFNonSpringServlet{private static final long serialVersionUID = 1L;@Overrideprotected void loadBus(ServletConfig sc) {super.loadBus(sc);Bus bus = getBus();BusFactory.setDefaultBus(bus);ServerFactoryBean sfb = new ServerFactoryBean();sfb.setServiceClass(HelloWorld.class);sfb.setAddress("/helloService");sfb.setServiceBean(new HelloWorldImpl());sfb.create();}}
然后配置web.xml
<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <display-name></display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>CXFServlet</servlet-name> <servlet-class>com.test.CXFNoSpringServletImpl</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>CXFServlet</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> </web-app>
直接丢到Tomcat跑就行了..
输入网址
接着就可以看到wsdl文档,, 客户端调用同上....
- WebService(4)_Apache CXF 服务端四种发布方式(图文详解实例)
- CXF方式发布WebService
- CXF客户端访问服务端四种方式
- WebService(6)_Apache CXF拦截器
- webservice入门实例,CXF方式
- 使用CXF 开发SOAP webservice 服务端实例
- cxf依赖spring 方式实现webservice服务端
- WebService-CXF第二种方式发布和调用
- WebService-CXF第三种方式发布和调用
- (四)CXF整合Spring发布WebService服务
- WebService(9)_Apache CXF_CXFFrame_发布框架
- WebService 四种发布方式总结
- WebService 四种发布方式总结
- WebService 四种发布方式总结
- WebService 四种发布方式总结
- 使用CXF发布WebService服务简单实例
- CXF整合Spring发布WebService实例
- CXF整合Spring发布WebService实例
- C语言调用Window/Linux上的各种应用程序
- 关于屏幕适配问题
- Code forces 699B
- E/dalvikvm: Could not find class
- Struts2、Spring4与Hibernate5三大框架整合
- WebService(4)_Apache CXF 服务端四种发布方式(图文详解实例)
- 等级分布图的边界元素的处理
- JS-类型转换
- 求一个字符串中连续出现次数最多的子串
- HDU 5878 I Count Two Three (DFS预处理 + 二分)
- 对称的二叉树
- js学习笔记:基本包装类型——Number
- C#控制台基础 删除一个空文件夹(回收站中找不到)
- 【原创】东方耀reactnative 视频23之-ViewPageAndroid