当前位置: 首页 > 面试题库 >

使用aSmack Client映射Openfire自定义插件

房子昂
2023-03-14
问题内容

我是XMPP的新手,如果这个问题听起来很傻,请原谅我。我想创建一个自定义插件,并将其与Android上的aSmack客户端进行映射。我正在尝试运用我对Web服务的知识,但没有成功。因此,请引导我思考最佳方法,一个示例将非常有帮助。提前感谢。


问题答案:

有很多类型的插件,让我们大致来讲一下。
Igniterealtime插件指南

您想定义一个全新的IQ Stanza来管理UserCustomParam。比方说:

<iq from="user1@myserver" to="myserver" type="get">
 <usercustomparam xmls:"com.records.iq" retrive="favouritecolor">
</iq>

您必须:

步骤1: 定义一个添加新处理程序的插件(实现插件的类)

MyCustomHandler colorshandler;
IQRouter iqRouter = XMPPServer.getInstance().getIQRouter();
iqRouter.addHandler(colorshandler);

步骤2: 根据需要实现MyCustomHandler(在数据库上读取,在数据库上写入,读取服务器端等等)。

public class MyCustomHandler extends IQHandler {
    public static final String NAMESPACE_TICKET_IQ = "com.records.iq";
    public static final String TAG_TICKET_IQ = "usercustomparam ";

现在,您的服务器已准备就绪,可以管理您的自定义IQ请求。

是时候去客户端了:

第三步: 向您的ProviderManager注册一个IQProvider

ProviderManager.addIQProvider("usercustomparam ","com.records.iq", new IQUserCustomParamProvider());

步骤4: 根据需要实现IQUserCustomParamProvider

public class IQUserCustomParamProvider extends IQProvider<IQUserCustomParam>

到Provider中,您将解析来自服务器的传入IQ,并创建一个IQUserCustomParam,其实例参数如下

String favouriteColor

步骤5: 您需要实现IQUserCustomParam

public class IQUserCustomParam extends IQ
    private final static String childElementName = "usercustomparam";
    private final static String childElementNamespace = "com.records.iq";

public IQUserCustomParam (String color)
    {
        this(childElementName , childElementNamespace );

        this.setType(IQ.Type.result);
        this.setFavouriteColor(color);
    }

步骤6 :现在完成设置,但是您还没有定义何时从服务器接收IQUserCustomParam。所以你需要一个StanzaFilter

public class IQUserCustomParamFilter implements StanzaFilter

步骤7 :您还没有定义IQUserCustomParam来自服务器时的处理方法。所以你需要一个StanzaListner

public class IQUserCustomParamListner implements StanzaListener

步骤8: 最后,您必须在连接上注册组合过滤器/侦听器:

AbstractXMPPConnection connection = ...;
connection.addAsyncStanzaListener(new PersonalConfigListner(this), new IQMUCConfigTicketFIlter();

如果有帮助,请不要忘记接受答案!



 类似资料:
  • 我有两个对象,除了date成员外,其他成员都相同。在obj1中,date是java.sql.date,obj2.date是long(纪元)。 我需要编写一个映射器来将obj1映射到obj2。这就是我试图做的: 但是mapperImpl只有自己的日期转换实现: 我得到了: 这种转换的正确方式是什么?

  • 我有一个自定义的Request estMappingHandlerMap类,它将特殊注释解释为其映射条件的一部分。因此它被实例化为bean: 但是当我创建一个MockMvc对象进行测试时(使用Standard aloneSetup),没有使用这个映射处理程序。如果不考虑额外的注释,映射会失败,因为我有多个具有相同@Request estMap的控制器方法。注释是区分它们的原因。 如何配置MockM

  • 以下是我的上下文:我使用byteBuddy动态生成一个类,该类根据外部配置将一个对象转换为另一个对象。我遇到了一些问题,我想找到一个替代方案,这就是我发现MapStruct的方式。 因此,我试图构建简单的映射器,我想知道是否有可能自定义注释以添加转换函数。例如,我想要: 在mapper实现中,我会有如下内容: 如果有人能帮我做到这一点,我将不胜感激,这将节省我很多时间。 提前谢谢。

  • 我想在从AbstractEndPoint派生的endpoint上使用不同的jackson ObjectMapper实例(而不是在其他映射URL上使用的实例)。 为了澄清这个问题,我不想更改或自定义对象映射器,它由不同的URL使用,不同的URL来自AbstractEndpoints(如HealtEndpoint、MetricsEndpoint)。我想专门将新的对象映射器注入到管理endpoint中。

  • 我有一个映射定义为 其中定义如下: 反向映射是使用处理的。如何为反向映射指定自定义映射?

  • 例如,我有以下接口映射器: 在代码中,您可以看到映射和一些默认方法,其中包含其他映射。如何在Mapstruct映射中使用这些方法,以便Mapstruct使用这些方法在字段中填充值?