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 void
addExtensionProvider(String elementName, String namespace, Object provider)
添加具有指定元素名称和名称空间的扩展提供程序。static void
addIQProvider(String elementName, String namespace, Object provider)
添加具有指定元素名称和名称空间的IQ提供程序(必须是IQProvider的实例或IQ的Class对象)。static void
addLoader(ProviderLoader loader)
static void
addStreamFeatureProvider(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 String
removeExtensionProvider(String elementName, String namespace)
删除具有指定元素名称和命名空间的扩展提供程序。static String
removeIQProvider(String elementName, String namespace)
删除具有指定元素名称和命名空间的IQ提供程序。static void
removeStreamFeatureProvider(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,所以进行 ...
随机推荐
- tf.Variable()、tf.get_variable()和tf.placeholder()
1.tf.Variable() tf.Variable(initializer,name) 功能:tf.Variable()创建变量时,name属性值允许重复,检查到相同名字的变量时,由自动别名机制创 ...
- Django Model的外键自关联‘self'和设置'unique_together'
在django的model定义中,有时需要某个Field引用当前定义的Model,比如一个部门(Department)的Model,它有一个字段是上级部门(super_department),上级部门 ...
- Vue 生成PDF并下载
实现原理 该功能原理是将页面转化伟canvas在把canvas转化为base64数据 最后将数据通过pdf.js生成下载,故需要和html2canvas一起使用 友情提醒这个pdf下载不能在app里直 ...
- JQuery校验时间大小
常用于按时间条件(起始日-截止日)查询时,进行校验 function checkDate(){ var startTime = $('#startTime').val(); var endTime = ...
- [RN] Android 设备adb连接后unauthorized解决方法
Android 设备adb连接后unauthorized解决方法 安卓设备usb或者adbwireless连接后输入adb device后都是未授权状态 相信很多同学都会遇到这种情况,除了一直重复开关 ...
- 剑指offer 6:链表(从头到尾打印链表)
链表的数据结构 struct ListNode { int value; ListNode* next; }; 那么在链表的末尾添加一个节点的代码如下: void insert(ListNode** ...
- js 将图片转换为 base64
var img = document.getElementById('s_lg_img'); function getBase64Image(img) { var canvas = document. ...
- VQA视觉问答基础知识
本文记录简单了解VQA的过程,目的是以此学习图像和文本的特征预处理.嵌入以及如何设计分类loss等等. 参考资料: https://zhuanlan.zhihu.com/p/40704719 http ...
- 深入理解 JavaScript 中的 class
在 ES6 规范中,引入了 class 的概念.使得 JS 开发者终于告别了,直接使用原型对象模仿面向对象中的类和类继承时代. 但是JS 中并没有一个真正的 class 原始类型, class 仅仅只 ...
- 20165230田坤烨网络对抗免考报告_基于WIN10的渗透攻击
目录 简单信息收集 主机发现 ping nmap 端口扫描 nmap OS及服务版本探测 nmap -sV 绕过防火墙尝试 诱饵 随机数据长度 随机顺序扫描目标 MAC地址欺骗 实现win10的渗透攻 ...