使用"功能未实现"来回应4.1响应向自定义IQ的错误消息,其类型为'设置'

时间:2016-06-02 21:10:12

标签: java smack

如果我发送带有类型='结果'的XMPP示例消息一切都很好。但是,如果我将类型更改为'设置'或者'得到'应用程序回复错误消息"功能未实现"。 这很奇怪,因为我遵循了制作人的教程。

详细说明:

我试过这页http://www.igniterealtime.org/builds/smack/docs/latest/documentation/providers.html 示例自定义IQProvider示例

我使用Gradle 2.9以及以下依赖项:

dependencies {
    //xjc 'com.github.jaxb-xew-plugin:jaxb-xew-plugin:1.1'
    compile 'org.codehaus.groovy:groovy-all:2.3.11'
    compile "org.igniterealtime.smack:smack-java7:4.1.0"
    // Optional for XMPPTCPConnection
    compile "org.igniterealtime.smack:smack-tcp:4.1.0"
    // Optional for XMPP-IM (RFC 6121) support (Roster, Threaded Chats, …)
    compile "org.igniterealtime.smack:smack-im:4.1.0"
    // Optional for XMPP extensions support
    compile "org.igniterealtime.smack:smack-extensions:4.1.0"
    testCompile group: 'junit', name: 'junit', version: '4.11'
}

我根据描述实现了MyIQProvider和MyIQ类,并向提供者注册:

ProviderManager.addIQProvider("myiq", "example:iq:foo", new MyIQProvider());

如果我将以下消息(键入='设置')发送到Smack Java应用程序:

<iq type='set' from='apfel_vie@jabber.de/colibriVtn' to='birne_vie@jabber.de/colibriVen'>
  <myiq xmlns='example:iq:foo' token='secret'>
    <user age='42'>John Doe</user>
    <location>New York</location>
  </myiq>
</iq>

然后应用程序回复

<iq id='time_1' type='error' to='apfel_vie@jabber.de/colibriVtn' from='birne_vie@jabber.de/colibriVen'>
    <error type='cancel'>
        <feature-not-implemented xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/>
    </error>
</iq>

类型=&#39; get&#39;导致相同的行为。

但如果我只将类型更改为&#39;结果&#39;

<iq type='result' from='apfel_vie@jabber.de/colibriVtn' to='birne_vie@jabber.de/colibriVen' id='time_1'>
  <myiq xmlns='example:iq:foo' token='secret'>
    <user age='42'>John Doe</user>
    <location>New York</location>
  </myiq>
</iq>

Java Smack应用程序未回复此类错误消息

在类型等于set的情况下,我有什么必须添加/更改应用程序不回复此错误消息?