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,所以进行 ...
随机推荐
- Python 模拟伯努利试验和二项分布
1.模拟 27 次投掷硬币的伯努利试验 代码: from scipy import stats import numpy as np p = 0.5 # 生成冻结分布函数 bernoulliDist ...
- java String 常用方法
String方法 class CeShi{ public static void main(String[] args) { //toCharArray char chararraryone[]=&q ...
- ajax 简单例子
Html 代码: <html> <body> <div id="myDiv"><h3>Let AJAX change this te ...
- mysql的基本数据类型里几个int如下:TINYINT SMALLINT MEDIUMINT INT或INTEGER BIGINT
mysql的基本数据类型里几个int如下:类型 大小 范围(有符号) 范围(无符号) 用途 TINYINT 1字节 (-128,127) (0,255) 小整数值 SM ...
- Escape character is ‘^]’什么意思?怎么使用telnet
在linux/unix下使用telnet(telnet ip 端口号)连接主机时提示“Escape character is '^]'.”,这是什么意思?“^”是Ctrl键的意思!1.这个提示的意思是 ...
- python接口自动化框架
接口测框架 安装教程 需要3.5及以上版本的python pip install -r requirements.txt 使用说明 运行manage.py创建项目 创建的项目在projects目录下 ...
- ESA2GJK1DH1K基础篇: 测试APP使用SmartConfig绑定Wi-Fi 设备并控制设备
前言 实现功能概要 STM32控制WI-Fi模块以AT指令TCP透传方式连接MQTT服务器, 实现MQTT通信控制. 测试准备工作(详细下载步骤请参考 硬件使用说明 ) 一,下载单片机程序 二,安装A ...
- TCP/IP协议总结
TCP/IP网络协议栈分为四层, 从下至上依次是: 链路层 其实在链路层下面还有物理层, 指的是电信号的传输方式, 比如常见的双绞线网线, 光纤, 以及早期的同轴电缆等, 物理层的设计决定了电信号传输 ...
- html规范思维导图(仅限于自己)
- vue动态添加路由,跳转页面时,页面报错路由重复:vue-router.esm.js?8c4f:16 [vue-router] Duplicate named routes definition: { name: "Login", path: "/login" }
之前用了一个vue-element-admin做了一个小项目,里面用到了动态添加路由,动态展示侧边栏, 当我切换页面时,控制台总是警告提示路由重复,连续跳转几次页面后,控制台就被这些警告占满了, 于是 ...