结果格式为此。
<iq from='52@localhost' to='20@localhost/Gajim' id='253' type='result'>
<query xmlns='someName'>
<item subscription='both' jid='1@localhost'/>
</query>
</iq>
我正在尝试使用以下格式发送自定义iq查询。
<iq xmlns="Name" type="get" id="253">
<query xmlns="someName">
<auth type='token'>asd</auth>
</query>
</iq>
据我所知,我需要发送一个带有授权类型令牌(令牌ID)的查询。这是我的尝试。
final IQ iq = new IQ() {
@Override
public String getChildElementXML() {
return "<query xmlns='someName'auth type="+t_id"+"asd<................'</query>"; // I am confused on how to write here
}
};
iq.setType(IQ.Type.get);
connection.sendPacket(iq); // connection is an XMPPTCPConnection object.
我对如何完成这个getChildElementXML()感到困惑,而且当我尝试实例化一个新的IQ时我得到一个错误,因为我需要实现一些构建器方法。我应该创建一个用于发送自定义IQ查询的新类吗?有人可以展示如何进行查询吗?
注意:赞赏建设性反馈,如果有人指出歧义,我可以让问题更清晰。
答案 0 :(得分:1)
这将回答您的问题,但在下一步中请记住,您需要这样的内容:Mapping Openfire Custom plugin with aSmack Client
一般来说,它是由smack API创建的ID,您不应该手动分配它。
一般来说,xmnls但要分配给自定义标签而不是IQ本身。
我们的目标:
<iq from="me@domain" to="domain" type="get" id="253">
<query xmlns="someName">
<auth type='token'>asd</auth>
</query>
</iq>
package ....;
import org.jivesoftware.smack.packet.IQ;
public class IQCustomAuth extends IQ
{
public final static String childElementName = "query";
public final static String childElementNamespace = "com:prethia:query#auth";
private final String auth;
private final String typeAuth;
public IQCustomAuth(String userFrom, String server, String typeAuth, String auth)
{
super( childElementName, childElementNamespace );
this.setType( IQ.Type.get );
this.auth = auth;
this.typeAuth = typeAuth;
setTo( server );
setFrom( userFrom );
}
@Override
protected IQChildElementXmlStringBuilder getIQChildElementBuilder( IQChildElementXmlStringBuilder xml )
{
xml.rightAngleBracket();
xml.halfOpenElement( "auth ");
xml.attribute( "type", this.typeAuth );
xml.rightAngleBracket();
xml.append(auth);
xml.closeElement("auth");
return xml;
}
}
IQCustomAuth iq = new IQCustomAuth( "me@domain", "domain", "token", "asd" );
System.out.println(iq.toString());
connection.sendPacket(new IQCustomAuth( "me@domain", "domain", "token", "asd" ));