前面我们讲了Servicemix最常用的组件之一CXFBC的使用,几乎常见的接口开发都会用到,这里我们介绍CXFSE,从名字上可以看到这是一个SE组件.属于JBI内部的数据处理单元.
SE 即 Service Enging 服务引擎,JBI一个重要概念,基本概念参考此处
从官网上我们可以看到下面几个特征
- JSR-181 annotations
- JAXB2/Aegis/XMLBeans databinding
- WSDL auto generation
- Java proxy support
- MTOM / attachments support
我们关心最后2个,其实这几个都属于WebService或CXF框架本身的范畴,这里因为Servicemix用到了CXF所以这些特征也带了,想获得详细特性的请访问CXF官网.
其实简单来说,CXFSE最主要的功能是用代码发布一个WSDL,但是,这个WSDL是在JBI容器内的,不对外的,因为CXFSE是一个SE组件而非BC组件,根据JBI规范,不能用于协议转换.
CXFBC+CXFSE 可以做到在Servicemix容器内发布自己的Webservice. 虽然这种做法比较少见,因为Servicemix主要把现有的系统集成,而不是自己发布服务.
一、Java Proxy
官网上这句话解释的非常清楚,‘You can create java proxies for JBI endpoints, provided that they expose a WSDL.’
要理解这句话,首先要明白一件事,即JBI内部用来描述一个服务,也是采用了WSDL规范,这不能说是JBI就是WSDL规范,只能说是JBI用了WSDL规范来描述自身的服务.因此这里我们可以很显性的把一个JBI的组件向外暴露出WSDL,通过CXF-BC直接暴露给外部.当然一般业务角度上来说,这是危险的.
二、MTOM Support
CXF支持MTOM,Servicemix没理由不支持,只需按如下申明即可
<cxfse:endpoint mtomEnabled="true" ... />
结合上面说的一对P话,我们来实际做一个例子,即Servicemix发布一个服务,该服务允许上传附件,即用到了CXFBC+CXFSE+MTOM这些.
待续…
大侠,这个例子你能不能写完啊……我等了好久了
一直不知道怎么通过CXFBC与CXFSE通信,不知道怎么写
通过上一节知道可以通过BC调用外部的webservices,那SE是怎么通过BC调用webservice?
你好,请问有没有这方面更多的资料,我想学习
@Daniel可以参考FuseESB的相关文档比较全面.