2

OpenFire で Smack を実行しています。メッセージ転送は正常に機能しますが、カスタム拡張機能が完全に到着することはありません。

これは get が送信したものです (平凡なライブラリによって):

<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() メソッドも呼び出されません。利用可能ないくつかのドキュメントが示唆するように、プロジェクトの /src パス内の META-INF フォルダーに smack.properties ファイルを配置し、次のようにしました。

<?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();できますが、コードが呼び出されない理由はわかりません。

  1. ここで何か間違ったことをしますか?属性とタグのコンテンツがすぐに届かないのはなぜですか?
  2. OpenFire が何かをフィルタリングする可能性はありますか?
4

2 に答える 2