服务代理生成器( ServiceProxyGenerator )也是一个值得一提的地方,我们先看一下它的接口:
-
-
-
-
-
- public interface ServiceProxyGenerator {
-
-
-
-
-
-
-
-
-
-
-
-
-
- Object getService(Class serviceClass, String serviceUrl, Properties props) throws Exception;
- }
-
-
- public void registService(ServiceModel serviceModel) throws ServiceException {
- ······
- String key = serviceModel.getServiceId() + KEY_SPAR
- + serviceModel.getServiceClass().getName();
- if ( serviceNames .contains(key)) {
- throw new ServiceRegistException( "service is exist!" );
- }
- Object proxy = null ;
- try {
- ServiceProxyGenerator proxyGenerator = (ServiceProxyGenerator) beanFactory
- .getBean(serviceModel.getServiceType() + PROXY_GENERATOR_END );
- proxy = proxyGenerator.getService(serviceModel.getServiceClass(), serviceModel
- .getServiceUrl(), serviceModel.getProps());
- } catch (Exception e) {
- throw new ServiceRegistException( "can't regist service !" , e);
- }
- if (proxy != null ) {
- serviceNames .add(key);
- serviceContainer .put(key, proxy);
- } else {
- throw new ServiceRegistException( "fail to regist service !" );
- }
- }
上面做特殊标记的代码就是应用服务代理生成器的地方,这里我们用到了 Spring 的 bean 工厂,根据注册服务的类型( xfire,httpinvoker,hessian 等)到 Spring 容器里查找相应的生成器,并生成指定类型的服务。看下面配置的几个服务代理生成器:
xml 代码
-
- < bean id = "xfire_generator" class = "com.tonysoft.common.service.repository.generator.XFireServiceProxyGenerator" lazy-init = "true" >
- < property name = "serviceFactory" >
- < ref bean = "xfire.serviceFactory" />
- property >
- bean >
-
-
- < bean id = "hessian_generator" class = "com.tonysoft.common.service.repository.generator.HessianServiceProxyGenerator" lazy-init = "true" >
- bean >
-
-
- < bean id = "httpinvoker_generator" class = "com.tonysoft.common.service.repository.generator.HttpInvokeServiceProxyGenerator" lazy-init = "true" >
- bean >
-
-
- < bean id = "custom_generator" class = "com.tonysoft.common.service.repository.generator.CustomServiceProxyGenerator" lazy-init = "true" >
- bean >
-
-
- < bean id = "serviceRepository" class = "com.tonysoft.common.service.repository.DefaultServiceRepository" >
- bean >
-
-
- < bean id = "serviceIdProvider" class = "com.tonysoft.common.service.repository.provider.DefaultServiceIdProvider" >
- bean >
-
- < bean id = "abstractServiceProxyFactory" class = "com.tonysoft.common.service.repository.ServiceProxyFactory" abstract = "true" >
- bean >
<o:p></o:p>
<o:p>简单看一下 HttpInvoker 类型服务代理生成器的代码: </o:p>
java 代码
- public class HttpInvokeServiceProxyGenerator implements ServiceProxyGenerator {
-
-
- private HttpInvokerProxyFactoryBean httpInvokerFactory = new HttpInvokerProxyFactoryBean();
-
-
-
-
- public Object getService(Class serviceClass, String serviceUrl, Properties props) {
-
- httpInvokerFactory .setServiceInterface(serviceClass);
-
- httpInvokerFactory .setServiceUrl(serviceUrl);
-
-
- httpInvokerFactory .afterPropertiesSet();
-
- return httpInvokerFactory .getObject();
-
- }
-
- }
<o:p>是的,正如你所看到的一样,我们这里把真正生成服务代理的任务交给了 Spring 的 HttpInvokerProxyFactoryBean 来完成。 <o:p></o:p></o:p>
<o:p> </o:p>
提供在初始化时注册的静态服务功能,配制如下:
-
- < bean id = "bootupServiceRegister" class = "com.tonysoft.common.service.repository.register.BootupServiceRegister" lazy-init = "false" >
- < property name = "services" >
- < list >
- < bean class = "com.tonysoft.common.service.repository.ServiceModel" >
- < property name = "serviceClass" >< value > com.tonysoft.common.service.repository.example.HelloHttpInvoker value > property >
- < property name = "serviceId" >< value > default value > property >
- < property name = "serviceType" >< value > httpinvoker value > property >
- < property name = "serviceUrl" >< value > http://localhost:8080/serviceRepositoryApplication/service/httpInvoker/helloHttpInvoker.service value > property >
- < property name = "props" >
- < props > props >
- property >
- bean >
- < bean class = "com.tonysoft.common.service.repository.ServiceModel" >
- < property name = "serviceClass" >< value > com.tonysoft.common.service.repository.example.HelloXFire value > property >
- < property name = "serviceId" >< value > default value > property >
- < property name = "serviceType" >< value > xfire value > property >
- < property name = "serviceUrl" >< value > http://localhost:8080/serviceRepositoryApplication/service/xfire/helloXFire.service?WSDL value > property >
- < property name = "props" >
- < props > props >
- property >
- bean >
- list >
- property >
- bean >
具体内容可以参看附件中的资源: <o:p></o:p>
一、 ServiceRepository 的源代码( Eclipse 工程) <o:p></o:p>
二、 一个示例应用 <o:p></o:p>
三、 打包部署的 ANT 脚本 <o:p></o:p>
<o:p> </o:p>
把项目导入 Eclipse 中,直接运行 Ant 脚本,在 target 目录下会生成服务中心的 jar 包,同时生成示例应用的 war 包,把 war 包放到任意服务器( Server )上并启动服务器并确保应用正常启动。 运行 ServiceRepositoryTest .java 执行完整的单元测试,观测结果。其他的自己看源码吧。
分享到:
相关推荐
通过定义一个`RemoteServicePool`接口,我们可以将具体的远程调用技术(如Hessian、HttpInvoker、XFire)的细节隐藏起来,开发者只需要通过接口方法`getService(String serviceId)`来获取服务,而无需关心服务的实现...
Spring通过RmiProxyFactoryBean支持RMI服务的透明调用,客户端无需关心底层的网络通信细节,只需要像调用本地方法一样调用远程服务。 3. **Hessian**:Hessian是一种轻量级的二进制RPC协议,由Caucho公司开发。它...
在1.2.6版本中,它提供了稳定、高效的服务,为游戏开发者提供了一种便捷的方式来构建和管理游戏网络架构。此压缩包文件包含了多个关键组件,让我们一一解析。 首先,`xfire-all-1.2.6.jar`是核心库文件,它集成了...
xfire-jar包包含了实现这些功能所需的类库,允许开发者通过Java代码与远程Web服务进行交互。 在描述中提到的"Demo样板",通常是一个预配置的示例程序,用于演示如何使用xfire客户端来连接和调用Web服务。然而,由于...
XFire提供了一个动态代理机制,使得我们可以像调用本地方法一样调用远程Web服务。客户端首先会创建一个服务代理,然后通过这个代理调用服务器端的方法。 ```java MyWebService service = (MyWebService) ...
- 访问XFire官方网站(http://xfire.codehaus.org/)下载XFire 1.2.6版本的压缩包。 - 解压压缩包,获取所需的`jar`包。 2. **从MyEclipse安装目录获取`jar`包**: - 从路径`...\myeclipse\eclipse\plugins\...
在IT行业中,Web服务是一种广泛使用的技术,它允许不同应用程序之间进行交互和数据交换。XFire(现称为CXF)是Java平台上的一个开源框架,专门用于构建和消费Web服务。本篇将深入探讨XFire Web服务的调用代码及其...
Xfire是Java中的一个轻量级Web服务框架,它简化了Web服务的开发和部署,支持WSDL(Web Services Description Language)自动生成,使得服务消费者可以方便地找到并调用服务。 标题“Xfire调用WebService无法传递...
- 外部访问:当Web服务对外提供,允许远程客户端通过HTTP访问时,就需要使用上面介绍的代理方式,通过URL调用服务。 七、XFire与其他框架对比 虽然现在CXF已经取代了XFire,但XFire在轻量级和易用性方面仍有其优势...
在本主题中,我们将深入探讨如何使用xFire来发布Web服务以及如何调用远程服务。 首先,让我们了解xFire的核心功能。xFire是一个基于Java的框架,它提供了对SOAP(Simple Object Access Protocol)协议的强大支持,...
《XFire_lib.jar在Spring整合中的关键作用及应用》 在现代软件开发中,Spring框架因其强大的依赖注入、AOP(面向切面编程)以及IoC(控制反转)特性,被广泛应用于Java企业级应用中。然而,为了实现更丰富的功能,...
这些技术都是Java开发中的重要工具,Spring作为全面的框架提供了服务管理和依赖注入,Hibernate则是流行的ORM(对象关系映射)解决方案,而Xfire是用于构建SOAP Web服务的库。 首先,Spring框架在分布式系统中的...
这篇博客“Java使用XFire调用WebService接口”显然是讨论如何利用XFire这个开源框架来与Web服务交互。 XFire是Apache CXF项目的前身,它提供了一种简单的方式来创建和消费SOAP Web服务。XFire的强项在于其轻量级和...
"Java 使用 XFire 调用 webService 接口" 在本文中,我们将学习如何使用 XFire 框架在 Java 中调用 webService 接口。XFIRE 是一个基于 Java 的开源框架,用于简化 Web 服务的开发和集成。下面,我们将通过一个简单...
XFire通过使用Java注解或XML配置文件,使得开发者可以快速地将Java对象暴露为Web服务,或者消费远程Web服务。 自定义实体类是我们在开发中经常会遇到的一种情况。实体类通常用于封装业务逻辑中的数据,它们是数据库...
标题 "spring远程调用和xfire aegis 源代码上传" 涉及到的是在Java开发中使用Spring框架进行远程过程调用(RPC)以及整合XFire和Aegis库来实现服务间的通信。这一主题是分布式系统设计中的一个重要组成部分,特别是...
### XFire开发指南知识点概述 #### 一、XFire简介 - **定义**: XFire是一个高性能的Java SOAP框架,用于构建面向服务架构(SOA)的应用程序。 - **特性**: - 支持多种标准:如SOAP、WSDL、WS-I Basic Profile、WS-...
<servlet-class>org.codehaus.xfire.transport.servlet.XFireConfigurableServlet</servlet-class> <load-on-startup>0</load-on-startup> </servlet> <servlet-name>XFireServlet</servlet-name> ...
在本案例中,"Xfire的client.zip"是一个包含了Xfire客户端代码的压缩包,主要用于调用Web服务。 Xfire客户端代码是实现与Xfire服务器通信的代码库,它可能包含了多种语言的实现,如Java、C#或Python等。这些代码...
import org.codehaus.xfire.client.XFireProxyFactory; import org.codehaus.xfire.service.Service; import org.codehaus.xfire.service.binding.ObjectServiceFactory; import com.xfire.core.entity.UserInfo; ...