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

Java Smack XMPP自定义扩展未完全到达,java,xmpp,openfire,smack,Java,Xmpp,Openfire,Smack,我被枪杀了。消息传输工作正常,但自定义扩展永远不会完全到达 这是get发送的内容(由非smack库发送): OperationProvider在测试中看起来像这样,但我的断点从未被击中:-( OperationExtension本身非常基本(在此处设置断点,希望有时能命中它们,但不起作用): public类OperationExtension实现PacketExtension{ 公共静态最终字符串命名空间=”http://www.openfireserver.eu/ns/xmpp-rest";

我被枪杀了。消息传输工作正常,但自定义扩展永远不会完全到达

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

OperationProvider在测试中看起来像这样,但我的断点从未被击中:-(

OperationExtension本身非常基本(在此处设置断点,希望有时能命中它们,但不起作用):

public类OperationExtension实现PacketExtension{
公共静态最终字符串命名空间=”http://www.openfireserver.eu/ns/xmpp-rest";
公共字符串getElementName()
{

return“Operation”//简而言之,这是一个字符串中的大小写错误,Robin通过在注释中询问详细信息帮助我找到了它,上面的代码可以工作。谢谢Robin!

我想你也可以用它来扩展你的自定义消息包

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);
Message Message=新消息();
DefaultPacketExtension yourExt=新的DefaultPacketExtension(“your_ext”,“com:your:ext:namespace”);
yourExt.setValue(“,”);
附加扩展信息(yourExt);

您不需要属性文件,因为您正在调用addExtensionProvider()直接。您的配置看起来正确,但我们不知道元素名和名称空间设置为什么。我怀疑它们是错误的,因为这是解析期间映射提供程序的内容。好的,Robin,您的评论是正确的。在发布问题中的OperationExtension类以向您展示时,我完全弄明白了坦白地说,我看到类返回的标记名是大写而不是小写。改变了它,一切都正常了。如果你把它作为答案,我会马上接受它。谢谢!不,默认的数据包扩展缺少我需要的一些重要内容,我想它是属性……所以我在上面的问题中所做的是完全正常的,我指出了OperationExtension源代码中注释中的小写字符串问题。
<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>
OperationProvider o = new OperationProvider();
ProviderManager.getInstance().addExtensionProvider(o.getExtension().getElementName(),o.getExtension().getNamespace(), o);
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;
    }

}
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 ;-)
    }

}
<?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>
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);