类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对象中存储子数据包的所有顶级元素,然后将其附加到数据包。

    • 方法细节

      • getIQProvider

        public static  IQProvider < IQgetIQProviderString  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  addIQProviderString  elementName,
        String  namespace,
        Object  provider)
        添加具有指定元素名称和名称空间的IQ提供程序(必须是IQProvider的实例或IQ的Class对象)。提供程序将覆盖通过类路径加载的任何提供程序。
        参数:
        elementName - XML元素名称。
        namespace - XML命名空间。
        provider - IQ提供商。
      • removeIQProvider

        public static  String removeIQProviderString  elementName,
        String  namespace)
        删除具有指定元素名称和命名空间的IQ提供程序。通常将此方法调用为使用该addIQProvider方法以编程方式添加的清理提供程序。
        参数:
        elementName - XML元素名称。
        namespace - XML命名空间。
        返回:
        删除IQ提供程序的密钥
      • getExtensionProvider

        public static  ExtensionElementProvider < ExtensionElementgetExtensionProviderString  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  addExtensionProviderString  elementName,
        String  namespace,
        Object  provider)
        添加具有指定元素名称和名称空间的扩展提供程序。提供程序将覆盖通过类路径加载的任何提供程序。提供者必须是PacketExtensionProvider实例或Javabean的Class对象。
        参数:
        elementName - XML元素名称。
        namespace - XML命名空间。
        provider - 扩展提供商。
      • removeExtensionProvider

        public static  String removeExtensionProviderString  elementName,
        String  namespace)
        删除具有指定元素名称和命名空间的扩展提供程序。通常将此方法调用为使用该addExtensionProvider方法以编程方式添加的清理提供程序。
        参数:
        elementName - XML元素名称。
        namespace - XML命名空间。
        返回:
        已删除的节扩展提供程序的密钥
      • getExtensionProviders

        public static  List < ExtensionElementProvider < ExtensionElement >>  getExtensionProviders()
        返回所有PacketExtensionProvider实例的不可修改的集合。集合中的每个对象都可以是PacketExtensionProvider实例,也可以是实现PacketExtensionProvider接口的Class对象。
        返回:
        所有PacketExtensionProvider实例。

ProviderManager的更多相关文章

  1. AuthenticationManager, ProviderManager 和 AuthenticationProvider

    AuthenticationManager是一个接口: public interface AuthenticationManager { Authentication authenticate(Aut ...

  2. AuthenticationManager、ProviderManager

    本篇主要讲述以下几点: 1.AuthenticationManager.ProviderManager和AuthenticationProvider三者之间的关系 2.以UsernamePasswor ...

  3. Spring Security怎样不让默认的ProviderManager清除密码等信息

    <authentication-manager erase-credentials="false"> ... </authentication-manager&g ...

  4. Spring Security3中的-authentication-manager标签详解

    讲解完http标签的解析过程,authentication-manager标签解析部分就很容易理解了 authentication-manager标签在spring的配置文件中的定义一般如下 < ...

  5. Spring Security 从配置入门 学习讲解。刽子手------------securityConfig.xml

    不知道我的web.xml 大家都理解了没.  废话确实有点多,可能很多知识点,大家都知道,可是我学的时候,压根什么都不懂啊.... 这篇我们要讲刽子手  securityConfig. 为什么要说他是 ...

  6. 转:Acegi Security

    Acegi Security -- Spring下最优秀的安全系统 http://www.springside.org.cn/docs/reference/Acegi.htm 1. Acegi 介绍 ...

  7. XMPP学习——2、用户登录

    最近在学习XMPP的使用,打算完成一个完整较为完整地Demo示例,通过这个示例掌握xmpp的使用与开发.同时打算在这个示例中学习使用一下其他的开源类库,在此作为记录学习. 包括服务器端--Openfi ...

  8. easyui添加生成tab和子页面jsp

    <!DOCTYPE html><html> <head> <meta charset="utf-8"> <title>& ...

  9. 扩展Smack Message

    XMPP是一种基于标准通用标记语言的子集XML的协议,它继承了在XML环境中灵活的发展性. Smack是一个开源的用 java 写的XMPP(jabber)客户端代码库 因为XMPP是XML,所以进行 ...

随机推荐

  1. pyecharts的使用

    折线图1 import pyecharts.options as opts from pyecharts.charts import Line ​ x_data = ["Mon", ...

  2. pycharm与github的使用

    1.clone代码: 输入github的存储库地址,输入本地存储目录,点击clone即可: 2.上传代码: 输入存储库名字,点击share即可:github上就会有你分享的代码啦

  3. 08-cmake语法-set()

    CMake的基本数据类型是字符串,一组字符串在一起称为列表(list) 用于设置变量. set(VAR a b c) # 输出 VAR = a;b;c VAR 就是一个list 参考: https:/ ...

  4. Hibernate框架学习2

    集合映射 public class User { // 一个用户,对应的多个地址 private Set<String> address; private List<String&g ...

  5. Arduino读取ph试剂浓度

    https://detail.tmall.com/item.htm?id=600904840315&spm=a1z09.2.0.0.31cd2e8d1sb06V&_u=e1qf7bf5 ...

  6. uniform

    float timeValue = glfwGetTime(); float greenValue = (sin(timeValue) / 2.0f) + 0.5f; int vertexColorL ...

  7. Spring Boot 知识笔记(创建maven项目、HTTP接口)

    一.使用Maven手工创建SpringBoot应用(IDEA) 1.  点击File——New——Project——Maven——Next,填写相关信息,创建项目. 2.  在pom.xml中添加相关 ...

  8. 模型区分度衡量指标-KS值

    1.KS值--学习器将正例和反例分开的能力,确定最好的“截断点” KS曲线和ROC曲线都用到了TPR,FPR.KS曲线是把TPR和FPR都作为纵坐标,而样本数作为横坐标.但是AUC只评价了模型的整体训 ...

  9. 《Linux就该这么学》自学笔记_ch22_使用openstack部署云计算服务环境

    <Linux就该这么学>自学笔记_ch22_使用openstackb部署云计算服务环境 文章主要内容: 了解云计算 Openstack项目 服务模块组件详解 安装Openstack软件 使 ...

  10. Python 的 Pandas 对矩阵的行进行求和

    Python 的 Pandas 对矩阵的行进行求和: 若使用 df.apply(sum) 方法的话,只能对矩阵的列进行求和,要对矩阵的行求和,可以先将矩阵转置,然后应用 df.apply(sum) 即 ...