什么是CXF
它允许创建高性能和可扩展的服务,您可以将这样的服务部署在 Tomcat 和基于 Spring 的轻量级容器中,以及部署在更高级的服务器上,例如 Jboss、IBM�0�3 WebSphere�0�3 或 BEA WebLogic。
该框架提供了以下功能: Web 服务标准支持:CXF 支持以下 Web 服务标准: Java API for XML Web Services (JAX-WS) SOAP Web 服务描述语言(Web Services Description Language ,WSDL) 消息传输优化机制(Message Tran***ission Optimization Mechani***,MTOM) WS-Basic Profile WS-Addressing WS-Policy WS-ReliableMessaging WS-Security 前端建模:CXF 提供了前端建模的概念,允许您使用不同的前端 API 来创建 Web 服务。API 允许您使用简单的工厂 Bean 并通过 JAX-WAS 实现来创建 Web 服务。它还允许您创建动态 Web 服务客户端。 工具支持:CXF 提供了用于在 Java Bean、Web 服务和 WSDL 之间进行转换的不同工具。它提供了对 Maven 和 Ant 集成的支持,并无缝地支持 Spring 集成。 RESTful 服务支持:CXF 支持代表性状态传输(Representational State Transfer,RESTful )服务的概念,并支持 Java 平台的 JAX-RS 实现。(本系列的第 2 部分将提供有关 RESTful 服务的更多信息。) 对不同传输和绑定的支持:CXF 支持不同种类的传输,从 XML 到逗号分隔值 (CSV)。除了支持 SOAP 和 HTTP 协议绑定之外,它还支持 Java Architecture for XML Binding (JAXB) 和 AEGIS 数据绑定。 对非XML 绑定的支持:CXF 支持非 XML 绑定,例如 Javascript Object Notation (JSON) 和 Common Object Request Broker Architecture (CORBA)。它还支持 Java 业务集成(Java Business Integration,JBI)体系架构和服务组件体系架构(Service Component Architecture,SCA)。
基于CXF的WebService服务
CXF是Apache的一个开源框架,使用它可以发布一个类服务,其他应用程序可以调用接口,以下是我搭建webservice服务的步骤,主要是与spring整合搭建,用的是cxf 3.x和spring 4.x。
这里需要说明的一点是cxf-core包在2.x版本中命名为cxf-rt-core,低版本的spring用的都是cxf-rt-core,刚开始我引的包也是这个,maven库中维护到2.7版之后这个包就以cxf-core的命名开始3.x的版本维护,由于与其他包的版本冲突造成服务一直搭不起来,浪费了很多时间。
引入cxf.jaxws jar包
如何使用CXF调用webservice接口
webservice的调用,常用的大约有3种方式:
1、使用axis调用
2、使用xfire调用
3、使用cxf调用
项目中,采用axis进行调用,记录如下,备忘:
ps教程:想当年的时候是用的xfire方式调用的,结果没做记录,现在已经完全记不得怎么玩了。所以说要多写博客啊 t_t
版本说明:
aixs版本:axis-bin-1_4.zip
java环境略
***步:确保wsdl文件可用,文中为获取到send***sservice.wsdl,当然url的也行。
第二步:执行生成客户端代码的脚本。脚本内容为:
set axis_lib=d:axis-1_4lib
set java_cmd=java -djava.ext.dirs=%axis_lib%
set output_path=.
set package=info.jyzh.wap.liaoning.push
%java_cmd% org.apache.axis.wsdl.wsdl2java send***sservice.wsdl -o%output_path% -p%package% -t
#查看wsdl2java的使用帮助#%java_cmd% org.apache.axis.wsdl.wsdl2java -help
ok,至此,客户端代码就生成出来了。还带了一个单元测试哦。
实际工作中,碰到以下情况,客户端不能直接连上webservice服务器,中间被强大的代理服务器挡住了。如下图:
为此,修改生成的代码,本次是在sendmmsserviceimplservicesoapbindingstub中作修改,如下:
static {
axisproperties.setproperty("http.proxyhost","88.88.88.88");
axisproperties.setproperty("http.proxyport","8080");
axisproperties.setproperty("http.proxyuser","asp教程yy");
axisproperties.setproperty("http.proxypassword","123456");
_operations = new org.apache.axis.description.operationdesc[1];
_initoperationdesc1();
cxf是什么英语单词的简称
CXF
生词本
[医]Chest X-r*** Film
网 络
信息交换格式;
色彩交换格式;
色彩交换形式。
Apache CXF = Celtix + XFire,开始叫 Apache CeltiXfire,后来更名为 Apache CXF 了,以下简称为 CXF。CXF 继承了 Celtix 和 XFire 两大开源项目的精华,提供了对 JAX-WS 全面的支持,并且提供了多种 Binding 、DataBinding、Transport 以及各种 Format 的支持,并且可以根据实际项目的需要,采用代码优先(Code First)或者 WSDL 优先(WSDL First)来轻松地实现 Web Services 的发布和使用。Apache CXF已经是一个正式的Apache顶级项目。
如何使用CXF将 wsdl 文件变成java文件
用myeclipse将wsdl文件生成java代码:
1、选择新建的工程后,点击右键,选择“Run As”-“Run”,如下图所示:
2、弹出如下窗口:
3、 在上图中,左边选择“Java Application”后,点击左上角的新增“”按钮new configuration,页面如下图所示:
4、在上图中,将“Include libraries when searching for a main class” 勾上,而后点击“Main class”右边的“Search”按钮,弹出窗口如下图所示:
5、在上图中输入WSDL2Java后,查找到axis这个jar包中对应类,点击“OK”按钮,此时主窗口如下图所示:
6、在上图中点击“Arguments”页签,Arguments里把要生成的web service URI或wsdl文件写进去,最后点run。在下图中输入的是wsdl文件的路径: src/wsdl/acd_accessCode_interface.wsdl、src/wsdl/acd_accessCode_service.wsdl:
7、生成的java代码如下:
cxf怎样提高webservice性能,及访问速度调优
性能:
1、 启用FastInfoset(快速信息集)
webservice的性能实在是不敢恭维。曾经因为webservice吞吐量上不去,对webservice进行了一些性能方面的优化,采用了FastInfoset,效果很明显,极端条件下的大数据量传输,性能提高60%,他可以减少传输成本,序列化成本和xml解析成本。
Cxf提供了FastInfoset协商机制,实现类见org.apache.cxf.feature.FastInfosetFeature,在bus中启用如下配置:
cxf:featurescxf:fastinfoset force="false"//cxf:features
Force=false表示服务端和客户端***次通信时会协商(通过检查标准的HTTP头的Accept字段,值为MIME类型的application/fastinfoset)是否启用FastInfoset支持,如果客户端不支持,则不启用快速信息集。
需要在pom中添加依赖:
dependency
groupIdcom.sun.xml.fastinfoset/groupId
artifactIdFastInfoset/artifactId
version1.2.9/version
typejar/type
scopecompile/scope
/dependency
FastInfoset参考:
client和service端都要配置
2、 启用gzip压缩支持
客户端和服务器端是否使用Gzip压缩,也是基于http协议协商的(检查请求header 中是否有Accept-encoding:gzip)。但是这里需要仔细权衡下。对于小数据量,启用gzip压缩支持是吃力不讨好的行为,数据量很小的时候,gzip压缩结果不明显,还浪费cpu。我们需要权衡数据大小,按照经验设置threshold为10*1024byte。
在bus中启用如下配置:
bean
property name="threshold"value10240/value/property
/bean
官方文档指定是是配置org.apache.cxf.transport.http.gzip.GZIPFeature,但是这个类会找不到,可能是官方文档年久失修,造成一些混乱。官方文档中也没提示指定threshold,请参考GZIPFeature源代码。
参考
3、 使用slf4j代替cxf默认日志组件
CXF 默认使用java.util.logging作为日志打印组件,其性能我就不过多评价,也不太便于我们做统一日志管理。目前系统使用的slf4j作为日志打印组件,替换如下:
在classpath中加入meta-INF/cxf/org.apache.cxf.Logger文件,文件内容为
org.apache.cxf.common.logging.Slf4jLogger
4、 测试中启用日志
bus中加入cxf:logging/,请在测试环境中启用有助于debug
补充:
1、如何自定义返回码:
请求在service中处理遇到异常后,会调用请求链中所有拦截器的handleF***lt方法,参考PhaseInterceptorChain#unwind,然后判断请求是否单向请求,如果不是,则构建异常请求链,并构建异常message对象,调用异常请求链中的handleMessage 方法(参考:AbstractF***ltChainInitiatorObserver)
JAXWSMethodInvoker转发soap请求到指定对象的方法,如果在请求处理失败,调用updateHeader方法,把请求时的soap header放入返回header中。但是不同通过继承JAXWSMethodInvoker来实现清除异常时soap header也返回给客户端的问题,因为JAXWSMethodInvoker没有采用注入的机制(JaxWsServerFactoryBean#createInvoker)也没有chain.异常时,会由这些拦截器处理返回请求:
setup [ServerPolicyOutF***ltInterceptor]
prepare-send [MessageSenderInterceptor, Soap11F***ltOutInterceptor]
pre-stream [LoggingOutInterceptor, StaxOutInterceptor]
pre-protocol [WebF***ltOutInterceptor]
write [SoapOutInterceptor]
拦截器初始化类OutF***ltChainInitiatorObserver
我们可以在异常链中加入清理soap header的拦截器SoapHeaderOutFilterInterceptor,清理掉在系统异常时soapheader中有信息的问题。
返回错误状态码,在执行Soap11F***ltOutInterceptor拦截器中被写死。
message.put(org.apache.cxf.message.Message.RESPONSE_CODE, new Integer(500));
为了使返回数据中有错误码,需要在Soap11F***ltOutInterceptor后面加入拦截器
2、在项目测试时遇到一个报错invalid LOC header (bad signature),这个问题是因为jar包损坏照成的,虽然构建路径中有这个jar,但是还是会出现loadClass失败,清理maven 本地仓库目录的jar,修改pom(比如加上一空行)让m2e重新加载。
3、Cxf中有一个很不错的特性,支持javascript访问soap webservice,客户端访问类似的请求,会生成javascript 客户端,js编程时就可以使用此客户端提供的对象,启用此功能需要在引入
import resource="classpath:meta-INF/cxf/cxf-extension-javascript-client.xml" /并且在依赖中加入:
dependency
groupIdorg.apache.cxf/groupId
artifactIdcxf-rt-javascript/artifactId
version2.4.1/version
typejar/type
scopecompile/scope
/dependency
关于cxf和cxf币最新消息的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。