中科院云平台架构师,专注于数字化、智能化,技术方向:云、Linux内核、AI、MES/ERP/CRM/OA、物联网、传感器、大数据、ML、微服务。
分类: Java
2013-01-03 21:41:30
首先大家可以从 上面获取到Service Model的简要描述。在这里我简单给翻译如下:
在CXF中有几个很相似名词 JaxWsServiceFactoryBean, JaxWsServerFactoryBean,当初我刚接触的时候也困惑了一阵,好在当时正好Dan Diephouse在北京,我就当面问了他一下这个问题,也算是得到一个权威解释了。其实如果大家仔细看过我的上一篇文章和这篇文章,应该对所谓的Server以及Service 的 FactoryBean有一个大概的认识了。
Server 是对服务器端来说,Service是针对服务信息来说的。也就是一个Server必然要包含一个Servie信息。
如果我们使用CXF内部API来创建服务的话,我们只需要通过设置JaxWsServerFactoryBean 就可以发布服务了。如果大家浏览一下具体的代码可以发现 在JaxWsServerFactorBean的构造函数中会创建一个缺省JaxWsServiceFactoryBean. 当然你在构建自己的Server的同时也可以设置自己的ServiceFactoryBean,我的理解是提供这样API目的在于CXF对Spring的支持。你可以在Spring中定义装配符合自己要求的服务,自然需要有读取和设置的这或者那样Bean的方法了。
AbstractServiceFactoryBean
作为ServiceFactoryBean的抽象类这里定义了我们前面提到的服务信息中包含了服务自身的内容,也就是CXF runtime需要的配置信息。主要包含了dataBinding, Interceptors等的信息。
ReflectionServiceFactoryBean
它是simple frontend的ServiceFactoryBean,至于为什么叫做ReflectionServiceFactoryBean要从Simple Frontend支持POJO的服务实现说起。简单来说我们可以通过Reflection API获取到POJO Class的方法,参数以及返回值信息。ReflectionServiceFactoryBean就是在这些信息的基础上,构建Service Model的。当然RefectionServiceFactoryBean 也支持从WSDL创建Service Model。大家在调用ServiceFactoryBean构建Service Modle的时候需要注意一条很重要的INFO日志 "Create service from WSDL: ..." 或者是 "Create sevice from class ..."。 这条日志来表明Service Model是通过WSDL创建还是通过Class信息创建的。
JaxWsServiceFactoryBean
SUN针对Java的Web Service实现先后提出两套API,一个是JaxRPC,另一个JaxWs。 JaxWsServiceFactoryBean继承了ReflectionServiceFactoryBean, 并提供JaxWsAPI的支持。在该类中这里主要是支持JSR181,重载了很多父类的方法,有关createServiceFromWSDL的部分则可重用父类ReflectionServiceFactoryBean.