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); }
相关推荐
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是一个早期流行的开源Web服务框架,主要用于构建SOAP(简单对象访问协议)和RESTful(Representational State Transfer)服务。这个框架使得Java开发者能够轻松地创建、部署和消费Web服务。xfire依赖于一系列的...
《Xfire全方位解析:1.2.6版本的全面探讨》 Xfire,这款曾经在游戏社区中广受欢迎的即时通讯软件,以其独特的游戏整合功能和社交特性,为玩家提供了便捷的游戏内通信和社区交流平台。本文将深入探讨Xfire 1.2.6这一...
xfire是一款历史悠久的在线游戏平台,它在2004年由GameSpy Industries开发并发布,主要功能是为玩家提供即时通讯、好友列表、游戏内聊天和游戏统计等功能,旨在增强玩家的游戏体验。xfire 1.26是该平台的一个特定...
Xfire API 是一款专为游戏社区设计的接口,它允许开发者构建与Xfire服务交互的应用程序,从而增强玩家的游戏体验并提供社交功能。Xfire API 主要围绕Web服务概念,这意味着它通过网络提供一系列功能,使得第三方...
**XFire v1.99:WebService开发框架详解** XFire,全称为XFire Integration Library,是一个基于Java的开源框架,专门用于构建和部署Web服务。这个“XFire最高版本”指的是XFire项目的最终或最优化的版本,它提供了...
"Java 使用 XFire 调用 webService 接口" 在本文中,我们将学习如何使用 XFire 框架在 Java 中调用 webService 接口。XFIRE 是一个基于 Java 的开源框架,用于简化 Web 服务的开发和集成。下面,我们将通过一个简单...
进行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】是基于Java平台的开源框架,用于构建和消费Web服务。它在Web服务领域提供了一个轻量级、高性能的选择,尤其适合快速开发。在本例中,我们将探讨如何使用XFire来创建一个简单的WebService...
【xfire myeclipse10包】是一款专为MyEclipse10集成开发环境设计的XFire插件安装包。XFire是一款强大的Java Web服务框架,它提供了对Web服务的全面支持,包括创建、部署和消费Web服务的能力。在MyEclipse这样的集成...
Spring 和 XFire 的集成是构建基于 SOAP 的 Web 服务的一种高效方法。XFire 是一个 Java 框架,专门用于创建和消费 Web 服务,而 Spring 框架则提供了全面的企业级应用开发支持。将这两者结合可以利用 Spring 的强大...
《Xfire离线安装插件详解》 Xfire是一款经典的多玩家在线游戏平台,它为玩家提供了便捷的游戏启动、好友管理、即时通讯等服务。在Xfire中,插件是扩展其功能的重要手段,允许用户根据自身需求定制个性化体验。本文...
这篇博客“Java使用XFire调用WebService接口”显然是讨论如何利用XFire这个开源框架来与Web服务交互。 XFire是Apache CXF项目的前身,它提供了一种简单的方式来创建和消费SOAP Web服务。XFire的强项在于其轻量级和...
XFire,全称为XML Fire,是一款历史悠久的开源Java框架,主要用作服务导向架构(SOA)中的Web服务实现工具。它允许开发者快速构建、部署和管理基于HTTP的服务,支持SOAP和RESTful通信协议。在Java开发中,XFire通过...
在IT行业中,集成框架是开发复杂应用程序的关键,Spring和XFire就是两个重要的工具。Spring作为一个强大的Java企业级应用开发框架,提供了丰富的功能,包括依赖注入、面向切面编程(AOP)以及各种服务管理。而XFire...
Xfire是一款曾经非常流行的社交软件,专为游戏爱好者设计,允许玩家在玩游戏时与朋友聊天、分享游戏状态和成就。这个“Xfire案例,webserver——Xfire案例”的主题可能涉及Xfire服务端的实现,特别是它如何作为web...
在本案例中,"Xfire的client.zip"是一个包含了Xfire客户端代码的压缩包,主要用于调用Web服务。 Xfire客户端代码是实现与Xfire服务器通信的代码库,它可能包含了多种语言的实现,如Java、C#或Python等。这些代码...
Xfire是一款古老的开源框架,它允许开发者轻松地创建和消费SOAP Web Services。然而,随着技术的发展,Xfire已经被Apache CXF所取代,但理解Xfire实现HTTPS调用WebService接口的基本原理仍然是有价值的。 标题...
XFire是Java平台上一个曾经流行的开源框架,专门用于构建和消费Web服务。本实例将深入探讨如何利用XFire来实现Web服务。 一、XFire简介 XFire是Apache CXF项目的前身,它提供了一个轻量级、高性能的框架,用于创建...
XFire--Webservice入门xfire