gpt4 book ai didi

android - 发送自定义 IQ 时来自服务器的服务不可用响应

转载 作者:太空狗 更新时间:2023-10-29 13:22:37 25 4
gpt4 key购买 nike

我正尝试在 asmack 中从 android 发送带有 IQ 的自定义信息。

所以我使用下面的代码发送自定义 IQ 消息。

public void onClick(View arg0) {

CustomIQ req = new CustomIQ();
req.myData="Hello world";
req.setType(IQ.Type.GET);
req.setTo(Activity_title+Constants.DOMAIN);
MainActivity.connection.sendPacket(req);
Log.d(Constants.TAG, "xml value :"+req.toXML());
Log.d(Constants.TAG, "child element value :"+req.getChildElementXML());
Log.d(Constants.TAG, " custom IQ req sent");

下面是我的自定义 IQ 类实现:

import org.jivesoftware.smack.packet.IQ;

public class CustomIQ extends IQ {

String myData;

@Override
public String getChildElementXML() {

String request = "<query xmlns='myxmlns'>"
+ "<myData>"+ myData + "</myData>"
+ "</query>";

return request;
}

}


}

但是在发送自定义 IQ 之后,我在 IQ 监听器中收到的服务不可用错误代码为 503。

以下是对服务器的请求:

xml value :<iq id="BTn30-5" to="swathi@btp121374" type="get"><query xmlns='myxmlns'><myData>Hello world</myData></query></iq>
child element value :<query xmlns='myxmlns'><myData>Hello world</myData></query>

服务器响应如下:

xml value :<iq id="BTn30-5" to="ganesh@btp121374/Smack" from="swathi@btp121374" type="error"><query xmlns='myxmlns'><myData>Hello world</myData></query><error code="503" type="CANCEL"><service-unavailable xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/></error></iq>

那么是什么原因导致我从服务器收到服务不可用的响应。

编辑:

我按如下方式实现了 IQProvider

public class customIQProvider implements IQProvider{

@Override
public IQ parseIQ(XmlPullParser parser) throws Exception {

Log.d(Constants.TAG, "In custom IQ provider");
CustomIQ myIQ_ref = new CustomIQ();


int eventType = parser.next();

while(eventType == XmlPullParser.START_TAG){

switch(parser.getEventType()){
case XmlPullParser.START_TAG:
{
if(parser.getName().equals("myData")){
myIQ_ref.myData=(parser.nextText());
}
}
return myIQ_ref;
}
}

return null;
}

}

最佳答案

我认为您违反了 XMPP 中的 iq 路由规则。如果你发送一个 iq 节到“swathi@btp121374”,你不是在要求它被路由到客户端,你是在要求 btp121374 服务器代表 swathi@btp121374 处理它。

鉴于发送 JID 的资源,我想你想发送到“swathi@btp121374/Smack”或类似的。将它发送到完整的 JID(JID 包括资源)告诉服务器将它路由到客户端而不是自己处理它。

(注意presence、message和iq的路由规则是不同的——上面只适用于iq)

关于android - 发送自定义 IQ 时来自服务器的服务不可用响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26548564/

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