ProviderManager
类ProviderManager
- java.lang.Object继承
- org.jivesoftware.smack.provider.ProviderManager
public final class ProviderManager
extends Object管理提供程序以解析XMPP数据包的自定义XML子文档。存在两种类型的提供者:- IQProvider - 将IQ请求解析为Java对象。
- PacketExtension - 将附加到数据包的XML子文档解析为PacketExtension实例。
IQProvider
默认情况下,Smack只知道如何使用几个名称空间中的子数据包处理IQ数据包,例如:
- jabber:iq:auth
- jabber:iq:roster
- jabber:iq:register
由于更多的IQ类型是XMPP及其扩展的一部分,因此提供了可插入的IQ解析机制。IQ提供程序以编程方式或通过创建提供程序文件进行注册。该文件是包含一个或多个iqProvider条目的XML文档,如以下示例所示:
<?xml version="1.0"?>
<smackProviders>
<iqProvider>
<elementName>query</elementName>
<namespace>jabber:iq:time</namespace>
<className>org.jivesoftware.smack.packet.Time</className>
</iqProvider>
</smackProviders>每个IQ提供程序都与元素名称和命名空间相关联。如果多个提供程序条目尝试注册以处理相同的命名空间,则从类路径加载的第一个条目将优先。IQ提供程序类可以实现IQProvider接口,也可以扩展IQ类。在前一种情况下,每个IQProvider都负责解析原始XML流以创建IQ实例。在后一种情况下,bean introspection用于尝试使用IQ节XML中的值自动设置IQ实例的属性。例如,XMPP时间节类似于以下内容:
<iq type='result' to='joe@example.com' from='mary@example.com' id='time_1'>
<query xmlns='jabber:iq:time'>
<utc>20020910T17:58:35</utc>
<tz>MDT</tz>
<display>Tue Sep 10 12:58:35 2002</display>
</query>
</iq>为了将此节自动映射到上面的providers文件中列出的Time对象,它必须具有方法setUtc(String),setTz(String)和setDisplay(String)。内省服务将自动尝试将XML中的String值转换为boolean,int,long,float,double或Class,具体取决于IQ实例所期望的类型。
还存在用于节扩展的可插入系统,用于消息和存在分组的自定义命名空间中的子元素。每个扩展提供程序都在smack.providers文件中注册了一个名称空间,如下例所示:
<?xml version="1.0"?>
<smackProviders>
<extensionProvider>
<elementName>x</elementName>
<namespace>jabber:iq:event</namespace>
<className>org.jivesoftware.smack.packet.MessageEvent</className>
</extensionProvider>
</smackProviders>如果多个提供程序条目尝试注册以处理相同的元素名称和命名空间,则从类路径加载的第一个条目将优先。每当在数据包中找到节扩展时,解析将被传递给正确的提供者。每个提供程序都可以实现PacketExtensionProvider接口,也可以是标准Java Bean。在前一种情况下,每个扩展提供程序负责解析原始XML流以构造对象。在后一种情况下,bean introspection用于尝试使用节扩展子元素中的值自动设置类的属性。当扩展提供程序未注册元素名称和命名空间组合时,Smack将在DefaultPacketExtension对象中存储子数据包的所有顶级元素,然后将其附加到数据包。
构造函数摘要
构造函数 构造函数和描述 ProviderManager()
方法摘要
所有方法静态方法具体方法 修饰符和类型 方法和描述 static voidaddExtensionProvider(String elementName, String namespace, Object provider)添加具有指定元素名称和名称空间的扩展提供程序。static voidaddIQProvider(String elementName, String namespace, Object provider)添加具有指定元素名称和名称空间的IQ提供程序(必须是IQProvider的实例或IQ的Class对象)。static voidaddLoader(ProviderLoader loader)static voidaddStreamFeatureProvider(String elementName, String namespace,ExtensionElementProvider<ExtensionElement> provider)static ExtensionElementProvider<ExtensionElement>getExtensionProvider(String elementName, String namespace)返回注册到指定XML元素名称和名称空间的节扩展提供程序。static List<ExtensionElementProvider<ExtensionElement>>getExtensionProviders()返回所有PacketExtensionProvider实例的不可修改的集合。static IQProvider<IQ>getIQProvider(String elementName, String namespace)返回注册到指定XML元素名称和名称空间的IQ提供程序。static List<IQProvider<IQ>>getIQProviders()返回所有IQProvider实例的不可修改的集合。static ExtensionElementProvider<ExtensionElement>getStreamFeatureProvider(String elementName, String namespace)static StringremoveExtensionProvider(String elementName, String namespace)删除具有指定元素名称和命名空间的扩展提供程序。static StringremoveIQProvider(String elementName, String namespace)删除具有指定元素名称和命名空间的IQ提供程序。static voidremoveStreamFeatureProvider(String elementName, String namespace)
构造函数详细信息
ProviderManager的
public ProviderManager()
方法细节
addLoader
public static void addLoader(ProviderLoader loader)
getIQProvider
public static IQProvider < IQ > getIQProvider(String elementName,
String namespace)返回注册到指定XML元素名称和名称空间的IQ提供程序。例如,如果提供程序已注册到元素名称“query”和命名空间“jabber:iq:time”,则以下节将触发提供程序:<iq type='result' to='joe@example.com' from='mary@example.com' id='time_1'>
<query xmlns='jabber:iq:time'>
<utc>20020910T17:58:35</utc>
<tz>MDT</tz>
<display>Tue Sep 10 12:58:35 2002</display>
</query>
</iq>注意:此方法通常仅由内部Smack类调用。
- 参数:
elementName- XML元素名称。namespace- XML命名空间。- 返回:
- IQ提供者。
getIQProviders
public static List < IQProvider < IQ >> getIQProviders()
返回所有IQProvider实例的不可修改的集合。集合中的每个对象都可以是IQProvider实例,也可以是实现IQProvider接口的Class对象。- 返回:
- 所有IQProvider实例。
addIQProvider
public static void addIQProvider(String elementName,
String namespace,
Object provider)添加具有指定元素名称和名称空间的IQ提供程序(必须是IQProvider的实例或IQ的Class对象)。提供程序将覆盖通过类路径加载的任何提供程序。- 参数:
elementName- XML元素名称。namespace- XML命名空间。provider- IQ提供商。
removeIQProvider
public static String removeIQProvider(String elementName,
String namespace)删除具有指定元素名称和命名空间的IQ提供程序。通常将此方法调用为使用该addIQProvider方法以编程方式添加的清理提供程序。- 参数:
elementName- XML元素名称。namespace- XML命名空间。- 返回:
- 删除IQ提供程序的密钥
getExtensionProvider
public static ExtensionElementProvider < ExtensionElement > getExtensionProvider(String elementName,
String namespace)返回注册到指定XML元素名称和名称空间的节扩展提供程序。例如,如果提供程序已注册到元素名称“x”和命名空间“jabber:x:event”,则以下节将触发提供程序:<message to='romeo@montague.net' id='message_1'>
<body>Art thou not Romeo, and a Montague?</body>
<x xmlns='jabber:x:event'>
<composing/>
</x>
</message>注意:此方法通常仅由内部Smack类调用。
- 参数:
elementName- 与扩展提供程序关联的元素名称。namespace- 与扩展提供者关联的命名空间- 返回:
- 扩展提供商。
addExtensionProvider
public static void addExtensionProvider(String elementName,
String namespace,
Object provider)添加具有指定元素名称和名称空间的扩展提供程序。提供程序将覆盖通过类路径加载的任何提供程序。提供者必须是PacketExtensionProvider实例或Javabean的Class对象。- 参数:
elementName- XML元素名称。namespace- XML命名空间。provider- 扩展提供商。
removeExtensionProvider
public static String removeExtensionProvider(String elementName,
String namespace)删除具有指定元素名称和命名空间的扩展提供程序。通常将此方法调用为使用该addExtensionProvider方法以编程方式添加的清理提供程序。- 参数:
elementName- XML元素名称。namespace- XML命名空间。- 返回:
- 已删除的节扩展提供程序的密钥
getExtensionProviders
public static List < ExtensionElementProvider < ExtensionElement >> getExtensionProviders()
返回所有PacketExtensionProvider实例的不可修改的集合。集合中的每个对象都可以是PacketExtensionProvider实例,也可以是实现PacketExtensionProvider接口的Class对象。- 返回:
- 所有PacketExtensionProvider实例。
getStreamFeatureProvider
public static ExtensionElementProvider < ExtensionElement > getStreamFeatureProvider(String elementName,
String namespace)
addStreamFeatureProvider
public static void addStreamFeatureProvider(String elementName,
String namespace,
ExtensionElementProvider < ExtensionElement > provider)
removeStreamFeatureProvider
public static void removeStreamFeatureProvider(String elementName,
String namespace)
ProviderManager的更多相关文章
- AuthenticationManager, ProviderManager 和 AuthenticationProvider
AuthenticationManager是一个接口: public interface AuthenticationManager { Authentication authenticate(Aut ...
- AuthenticationManager、ProviderManager
本篇主要讲述以下几点: 1.AuthenticationManager.ProviderManager和AuthenticationProvider三者之间的关系 2.以UsernamePasswor ...
- Spring Security怎样不让默认的ProviderManager清除密码等信息
<authentication-manager erase-credentials="false"> ... </authentication-manager&g ...
- Spring Security3中的-authentication-manager标签详解
讲解完http标签的解析过程,authentication-manager标签解析部分就很容易理解了 authentication-manager标签在spring的配置文件中的定义一般如下 < ...
- Spring Security 从配置入门 学习讲解。刽子手------------securityConfig.xml
不知道我的web.xml 大家都理解了没. 废话确实有点多,可能很多知识点,大家都知道,可是我学的时候,压根什么都不懂啊.... 这篇我们要讲刽子手 securityConfig. 为什么要说他是 ...
- 转:Acegi Security
Acegi Security -- Spring下最优秀的安全系统 http://www.springside.org.cn/docs/reference/Acegi.htm 1. Acegi 介绍 ...
- XMPP学习——2、用户登录
最近在学习XMPP的使用,打算完成一个完整较为完整地Demo示例,通过这个示例掌握xmpp的使用与开发.同时打算在这个示例中学习使用一下其他的开源类库,在此作为记录学习. 包括服务器端--Openfi ...
- easyui添加生成tab和子页面jsp
<!DOCTYPE html><html> <head> <meta charset="utf-8"> <title>& ...
- 扩展Smack Message
XMPP是一种基于标准通用标记语言的子集XML的协议,它继承了在XML环境中灵活的发展性. Smack是一个开源的用 java 写的XMPP(jabber)客户端代码库 因为XMPP是XML,所以进行 ...
随机推荐
- windows 桌面文件变成.link解决方案
在注册表中右键删除下面这个注册表项: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.ln ...
- Ajax请求设置csrf_token
方式1 通过获取隐藏的input标签中的csrfmiddlewaretoken值,放置在data中发送. $.ajax({ url: "/cookie_ajax/", type: ...
- 性能测试基础---jmeter webservice接口测试
·webservice接口测试实现.·SOA:面向服务的体系架构,主要为了应对大型系统的异构需求.典型的实现方式:webservice·微服务:为了对SOA这样的重服务架构进行解耦而存在的.一个or几 ...
- MySql日期格式化(format)取值范围
- 什么是amp?amp有什么用处?
AMP是移动页面加速器Accelerated Mobile Pages的简称,是Google带领开发的开源项目,目的是为提升移动设备对网站的访问速度.它的核心称作AMP HTML,是一种新型的HTML ...
- NOIP 2003 栈
洛谷 P1044 栈 洛谷传送门 JDOJ 1291: [NOIP2003]栈 T3 JDOJ传送门 题目描述 栈是计算机中经典的数据结构,简单的说,栈就是限制在一端进行插入删除操作的线性表. 栈有两 ...
- java注释代码规范
//收集了一小部分,忘记的时候过来查一下 java--hadoop部分 /** * 此类用来处理DNS原始日志:统计给定域名平均响应时延 * @param Input * @param Output ...
- bootstrap基础自我总结
*今天自学了一些封装的css,看起来官网很强大,但是因为源码备注都是英文的情况下,还是感觉想深入有点力不从心,发现度娘没有中文手册,无奈,不过还好代码无国界,基本都是能看懂的,备注也影响不大(安慰自己 ...
- Debian 安装docker
1 $ curl -fsSL get.docker.com -o get-docker.sh 2 $ sudo sh get-docker.sh --mirror Aliyun
- Visual Studio调试XSLT
Visual Studio是一个很大的工具.很容易遗漏一些有用的特性.希望XSLT调试器不会错过.在下面,您可以看到调试器正在运行,因为xslt转换正在应用于某些XML.(请原谅我在示例中使用的毫无意 ...