gpt4 book ai didi

java - Smack XMPP 自定义扩展未完全到达

转载 作者:行者123 更新时间:2023-12-04 04:47:20 25 4
gpt4 key购买 nike

我让 Smack 与 OpenFire 一起运行。消息传输工作正常,但自定义扩展永远不会完全到达。

这是 get 发送的内容(由一个非 smack 库):

<message type="normal" id="42444f16-761f-471d-a37c-c9204cf14cfc" to="timmy@openfireserver.eu">
<operation xmlns="http://www.openfireserver.eu/ns/xmpp-rest" ack="false">PUT</operation>
<part xmlns="http://www.openfireserver.eu/ns/xmpp-rest" RIDDL-TYPE="simple" content-disposition="riddl-data; name=&quot;value&quot;">stopped</part>
<part xmlns="http://www.openfireserver.eu/ns/xmpp-rest" RIDDL-TYPE="simple" content-disposition="riddl-data; name=&quot;tims&quot;">world</part>
<part xmlns="http://www.openfireserver.eu/ns/xmpp-rest" RIDDL-TYPE="complex" content-disposition="riddl-data; name=&quot;excellent&quot;" content-transfer-encoding="binary" content-type="text/plain">party time</part>
</message>

这是什么到达:
<message id="42444f16-761f-471d-a37c-c9204cf14cfc" to="timmy@openfireserver.eu" from="jürgen@openfireserver.eu/f8c64ccb">
<operation xmlns="http://www.openfireserver.eu/ns/xmpp-rest"></operation>
<part xmlns="http://www.openfireserver.eu/ns/xmpp-rest"></part>
<part xmlns="http://www.openfireserver.eu/ns/xmpp-rest"></part>
<part xmlns="http://www.openfireserver.eu/ns/xmpp-rest"></part>
</message>

我尝试创建一个 OperationExtension 并在创建连接之前进行设置,如下所示:
OperationProvider o = new OperationProvider();
ProviderManager.getInstance().addExtensionProvider(o.getExtension().getElementName(),o.getExtension().getNamespace(), o);

OperationProvider 看起来像这样用于测试,但我的断点从未被击中 :-(
public class OperationProvider implements PacketExtensionProvider {

private OperationExtension extension = new OperationExtension();

@Override
public PacketExtension parseExtension(XmlPullParser xmlparser) throws Exception {
OperationExtension o = new OperationExtension();
System.out.println("YAAAA + " + xmlparser.getText());
String text = xmlparser.nextText();
while (text != null)
{
System.out.println("YAAAA + " + text);
text = xmlparser.nextText();
}
return o;
}

public OperationExtension getExtension() {
return extension;
}

public void setExtension(OperationExtension extension) {
this.extension = extension;
}

}

OperationExtension 本身是非常基本的(在这里设置断点,希望它们有时会命中,但不起作用):
public class OperationExtension implements PacketExtension {

public static final String NAMESPACE = "http://www.openfireserver.eu/ns/xmpp-rest";

public String getElementName()
{
return "Operation"; // <-- here was my error, it should say (lower-case) "operation"
}

public String getNamespace()
{
return NAMESPACE;
}

@Override
public String toXML() {
return "<Operation>GET</Operation>"; // this is also just mockup with a breakpoint ;-)
}

}

,但 toXml() 方法也不会被调用。正如一些可用的文档所建议的那样,我将一个 smack.properties 文件放在项目的/src 路径内的 META-INF 文件夹中,并使其看起来像这样:
<?xml version="1.0"?>
<extensionProvider>
<elementName>operation</elementName>
<namespace>http://www.openfireserver.eu/ns/xmpp-rest</namespace>
<className>adventure.messagerouting.XmppExtensions.OperationExtension</className>
</extensionProvider>
<extensionProvider>
<elementName>part</elementName>
<namespace>http://www.openfireserver.eu/ns/xmpp-rest</namespace>
<className>adventure.messagerouting.XmppExtensions.PartExtension</className>
</extensionProvider>

我可以知道我的提供商已在 ProviderManager.getInstance().getExtensionProviders(); 中注册但我不能说为什么它的代码从未被调用。
  • 我在这里做错了吗?为什么我的属性和标签内容没有到达?
  • OpenFire 有可能过滤掉一些东西吗?
  • 最佳答案

    我想你也可以使用 PacketExtension扩展您的自定义消息包。

    Message message = new Message();
    DefaultPacketExtension yourExt = new DefaultPacketExtension("your_ext", "com:your:ext:namespace");
    yourExt.setValue("<XML element name>", <XML element value>);
    messgae.addExtension(yourExt);

    关于java - Smack XMPP 自定义扩展未完全到达,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17988548/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com