`

XFire序

 
阅读更多

1、上篇中关于Jsr181HandlerMapping分析。

 红箭头中指代的就是上篇中注入的三个参数。

2、其中ApplicationObjectSupport类实现了ApplicationContextAware接口方法:

 

public final void setApplicationContext(ApplicationContext context) throws BeansException {
		if (context == null && !isContextRequired()) {
			// Reset internal context state.
			this.applicationContext = null;
			this.messageSourceAccessor = null;
		}
		else if (this.applicationContext == null) {
			// Initialize with passed-in context.
			if (!requiredContextClass().isInstance(context)) {
				throw new ApplicationContextException(
						"Invalid application context: needs to be of type [" + requiredContextClass().getName() + "]");
			}
			this.applicationContext = context;
			this.messageSourceAccessor = new MessageSourceAccessor(context);
			initApplicationContext();
		}
		else {
			// Ignore reinitialization if same context passed in.
			if (this.applicationContext != context) {
				throw new ApplicationContextException(
						"Cannot reinitialize with different application context: current one is [" +
						this.applicationContext + "], passed-in one is [" + context + "]");
			}
		}
	}

 以上红字加粗的代码非常重要。

 

3、在Jsr181HandlerMapping类中定义了该方法:

 

  protected void initApplicationContext()
            throws BeansException{
        if (serviceFactory == null) {
        	serviceFactory = createServiceFactory();
        }

        ApplicationContext context = getApplicationContext();
 
        while (true){
            if (context == null) break;
            
            processBeans(context, serviceFactory);

            context = context.getParent();
        }
    }

 

 

其中红色字体createServiceFactory();创建了AnnotationServiceFactory类的实例

      红色字体processBeans(context, serviceFactory);如下代码:

private void processBeans(ApplicationContext beanFactory, 
                          AnnotationServiceFactory serviceFactory){
        String[] beanNames = beanFactory.getBeanDefinitionNames();

        ConfigurableApplicationContext ctxt = (ConfigurableApplicationContext) beanFactory;

        // Take any bean name or alias that has a web service annotation
        for (int i = 0; i < beanNames.length; i++) {
            BeanDefinition def = ctxt.getBeanFactory().getBeanDefinition(beanNames[i]);
    
            if (!def.isSingleton() || def.isAbstract()) continue;
            
            Class clazz;
            Object bean;
            try
            {
                clazz = getApplicationContext().getType(beanNames[i]);
                bean = beanFactory.getBean(beanNames[i]);
                try
                {
                    clazz = SpringUtils.getUserTarget(bean).getClass();
                }
                catch (Exception e)
                {
                    logger.error("Failed to get the User Target Class of bean " + beanNames[i], e);
                }
            }
            catch (BeanIsAbstractException e)
            {
                // The bean is abstract, we won't be doing anything with it.
                continue;
            }

            if (clazz != null && 
                    !Modifier.isAbstract(clazz.getModifiers()) && 
                    webAnnotations.hasWebServiceAnnotation(clazz))
            {
                Service endpoint = serviceFactory.create(clazz);
                customizeService(bean, endpoint);
            }
            else
            {
                if (logger.isDebugEnabled())
                {
                    logger.debug("Rejected bean '" + beanNames[i] + "' since it has no WebService annotation");
                }
            }
        }
    }

 4、红色字体Service endpoint = serviceFactory.create(clazz); 是李永ServiceFactory创建Service的方法

   

 

      紫色字体customizeService(bean, endpoint);是定制系统使用的WebService,其中的代码为:

protected void customizeService(Object bean, Service endpoint) {
		if (logger.isInfoEnabled())
		{
		    logger.info("Exposing  service " + endpoint.getName() + 
		                " to " + urlPrefix + endpoint.getSimpleName());
		}
		if( getInHandlers()!= null ){//  添加  InHandlers
			endpoint.getInHandlers().addAll(getInHandlers());	
		}
		
		if( getOutHandlers()!= null ){//  添加  OutHandlers
			endpoint.getOutHandlers().addAll(getOutHandlers());	
		}
		
		if( getFaultHandlers()!= null ){//  添加  FaultHandlers
			endpoint.getFaultHandlers().addAll(getFaultHandlers());	
		}
		//----- 将该 WebService 调用XFire的注册器注入进去
		xFire.getServiceRegistry().register(endpoint);
		endpoint.setInvoker(new BeanInvoker(bean));
		Object controller = createController(endpoint.getName());
		registerHandler(urlPrefix + endpoint.getSimpleName(), controller);
	}

 

    

  • 大小: 56.6 KB
  • 大小: 5.9 KB
分享到:
评论

相关推荐

    xfire所有jar包

    activation.jar commons-logging.jar jdom-1.0.jar spring.jar spring-mock.jar stax-api-1.0.1.jar stax-utils-snapshot-20040917.jar wsdl4j-1.5.2.jar wstx-asl-3.0.1.jar ...xfire-xmlbeans-1.2.2.jar

    xfire依赖jar包

    xfire是一个早期流行的开源Web服务框架,主要用于构建SOAP(简单对象访问协议)和RESTful(Representational State Transfer)服务。这个框架使得Java开发者能够轻松地创建、部署和消费Web服务。xfire依赖于一系列的...

    xfire-all-1.2.6 xfire所需的全部包

    《Xfire全方位解析:1.2.6版本的全面探讨》 Xfire,这款曾经在游戏社区中广受欢迎的即时通讯软件,以其独特的游戏整合功能和社交特性,为玩家提供了便捷的游戏内通信和社区交流平台。本文将深入探讨Xfire 1.2.6这一...

    xfire

    xfire是一款历史悠久的在线游戏平台,它在2004年由GameSpy Industries开发并发布,主要功能是为玩家提供即时通讯、好友列表、游戏内聊天和游戏统计等功能,旨在增强玩家的游戏体验。xfire 1.26是该平台的一个特定...

    Xfire API,Xfire帮助文档

    Xfire API 是一款专为游戏社区设计的接口,它允许开发者构建与Xfire服务交互的应用程序,从而增强玩家的游戏体验并提供社交功能。Xfire API 主要围绕Web服务概念,这意味着它通过网络提供一系列功能,使得第三方...

    Xfire-v1.99 XFire最高版本

    **XFire v1.99:WebService开发框架详解** XFire,全称为XFire Integration Library,是一个基于Java的开源框架,专门用于构建和部署Web服务。这个“XFire最高版本”指的是XFire项目的最终或最优化的版本,它提供了...

    java使用XFire调用webService接口

    "Java 使用 XFire 调用 webService 接口" 在本文中,我们将学习如何使用 XFire 框架在 Java 中调用 webService 接口。XFIRE 是一个基于 Java 的开源框架,用于简化 Web 服务的开发和集成。下面,我们将通过一个简单...

    xfire相关jar包

    进行WebService开发中所用到的xfire所有相关包如:xfire-jsr181-api-1.0-M1.jar、xfire-jaxws-1.2.6.jar、xfire-java5-1.2.6.jar、xfire-core-1.2.6.jar、xfire-annotations-1.2.6.jar、xfire-aegis-1.2.6.jar、...

    XFire创建的WebService

    【XFire创建的WebService】是基于Java平台的开源框架,用于构建和消费Web服务。它在Web服务领域提供了一个轻量级、高性能的选择,尤其适合快速开发。在本例中,我们将探讨如何使用XFire来创建一个简单的WebService...

    xfire myeclipse10包

    【xfire myeclipse10包】是一款专为MyEclipse10集成开发环境设计的XFire插件安装包。XFire是一款强大的Java Web服务框架,它提供了对Web服务的全面支持,包括创建、部署和消费Web服务的能力。在MyEclipse这样的集成...

    spring 集成xfire 比较好的一种方式

    Spring 和 XFire 的集成是构建基于 SOAP 的 Web 服务的一种高效方法。XFire 是一个 Java 框架,专门用于创建和消费 Web 服务,而 Spring 框架则提供了全面的企业级应用开发支持。将这两者结合可以利用 Spring 的强大...

    xfire离线安装插件

    《Xfire离线安装插件详解》 Xfire是一款经典的多玩家在线游戏平台,它为玩家提供了便捷的游戏启动、好友管理、即时通讯等服务。在Xfire中,插件是扩展其功能的重要手段,允许用户根据自身需求定制个性化体验。本文...

    Java使用XFire调用WebService接口

    这篇博客“Java使用XFire调用WebService接口”显然是讨论如何利用XFire这个开源框架来与Web服务交互。 XFire是Apache CXF项目的前身,它提供了一种简单的方式来创建和消费SOAP Web服务。XFire的强项在于其轻量级和...

    xfire所需jar包

    XFire,全称为XML Fire,是一款历史悠久的开源Java框架,主要用作服务导向架构(SOA)中的Web服务实现工具。它允许开发者快速构建、部署和管理基于HTTP的服务,支持SOAP和RESTful通信协议。在Java开发中,XFire通过...

    Spring2.0和XFire1.2.6整合案例

    在IT行业中,集成框架是开发复杂应用程序的关键,Spring和XFire就是两个重要的工具。Spring作为一个强大的Java企业级应用开发框架,提供了丰富的功能,包括依赖注入、面向切面编程(AOP)以及各种服务管理。而XFire...

    Xfire案例,webserver——Xfire案例

    Xfire是一款曾经非常流行的社交软件,专为游戏爱好者设计,允许玩家在玩游戏时与朋友聊天、分享游戏状态和成就。这个“Xfire案例,webserver——Xfire案例”的主题可能涉及Xfire服务端的实现,特别是它如何作为web...

    Xfire的client.zip_Xfire客户端代码_webservice

    在本案例中,"Xfire的client.zip"是一个包含了Xfire客户端代码的压缩包,主要用于调用Web服务。 Xfire客户端代码是实现与Xfire服务器通信的代码库,它可能包含了多种语言的实现,如Java、C#或Python等。这些代码...

    xfire https

    Xfire是一款古老的开源框架,它允许开发者轻松地创建和消费SOAP Web Services。然而,随着技术的发展,Xfire已经被Apache CXF所取代,但理解Xfire实现HTTPS调用WebService接口的基本原理仍然是有价值的。 标题...

    xfire实现webservice实例

    XFire是Java平台上一个曾经流行的开源框架,专门用于构建和消费Web服务。本实例将深入探讨如何利用XFire来实现Web服务。 一、XFire简介 XFire是Apache CXF项目的前身,它提供了一个轻量级、高性能的框架,用于创建...

    XFire--Webservice入门xfire

    XFire--Webservice入门xfire

Global site tag (gtag.js) - Google Analytics