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,所以进行 ...
随机推荐
- D. Maxim and Array
https://www.cnblogs.com/qscqesze/p/5925893.html 原博客 http://codeforces.com/group/1EzrFFyOc0/contest/ ...
- VUE的element-ui的使用
我们在自己的网站当中有的时候会用到element-ui的组建 1.如何安装element-ui的组件 在命令行工具当中输入cnpm i element-ui -S, 等待安装 2.如何在vue当中使用 ...
- helm搭建本地chart仓库及基本操作
这个步骤,是配合公司的竞赛. 因为公司这次的环境,我们只有namespace权限,而没有整个集群的管理, 而且,公司没有提供统一的helm chart repo, 所以只能自建. 参考URL: htt ...
- JavaScript-前言
目录 前言 前言 这是针对纯小白的Javascript教程. 有人问我,网页中流行的脚本语言是什么?这个时候我会简单粗暴的说:只有Javascript!对,只有Javascript.Javascrip ...
- PHP实例:获取操作系统、IP、地理位置、浏览器、等信息
获取访客操作系统以及浏览器语言 <?php function GetBrowser(){ if(!empty($_SERVER['HTTP_USER_AGENT'])){ $br = $_SER ...
- Linux中的会话与作业
- 【Tomcat】系统找不到指定的路径
确认一下端口防火墙是否开放 没开放就开一下:firewall-cmd --zone=public --add-port=9080/tcp --permanent 然后重启: firewall-cmd ...
- 原题链接在这里:980. Unique Paths III
原题链接在这里:https://leetcode.com/problems/unique-paths-iii/ 题目: On a 2-dimensional grid, there are 4 typ ...
- Python——IO多路复用之select模块select方法
Python——IO多路复用之select模块select方法 使用select模块的select方法实现Python——IO多路复用 实现同时将终端输入的文本以及客户端传输的文本写入文本文件中: w ...
- vue 实现模块上移下移 实现排序
效果图 上移 下移 首先想到的是 数组的相互替换嘛 <template> <div> <div class="box" v-for="(it ...