powered by Jive Software

Receiving custom message

Hello,

I’m developping an android application which use smack.

I receive a complex packet, and i need to interpret it…

I tried to use packet.toXML() but this function truncate my packet.

So i saw that i must implement my own provider and packetextension, i tried this but it doesn’t work;

The packet i received is :

<message>
   <commande xmlns="urn:xmpp:crisalid:commande:update" id="1" recap="False" modified="2014-01-02T17:59:00.894" version="434" etat="2" uid="178F76C702424A8F919B495625A90B59" reserve="False">
      <ticket type="TAB" version="2" imprime="N" caisse="0" attente="N" annule="N" numero="0" uid="{178F76C7-0242-4A8F-919B-495625A90B59}" memo="N" devise="EURO">
         <entete>
            <creation iso="2014-01-02T17:59:00.847">
               <date>02/01/2014</date>
               <heure>17:59:00</heure>
            </creation>
            <modification iso="2014-01-02T17:59:00.894">
               <date>02/01/2014</date>
               <heure>17:59:00</heure>
            </modification>
          </entete>
     </ticket>
    </commande>
</message>

I already did that :

public class CommandePacketExtension implements PacketExtension {
    public static final String NAMESPACE = "urn:xmpp:crisalid:commande:update";
    private String id,recap,modified,version,etat,uid,reserve;     public CommandePacketExtension(String id,String recap,String modified,String version,String etat,String uid,String reserve)
    {
        this.id = id;
        this.recap=recap;
        this.modified=modified;
        this.version=version;
        this.etat=etat;
        this.uid=uid;
        this.reserve=reserve;
    }     public String getId()
    {
        return id;
    }     public String getRecap()
    {
        return recap;
    }     public String getModified()
    {
        return modified;
    }     public String getVersion()
    {
        return version;
    }     public String getEtat() {
        return etat;
    }     public String getUid()
    {
        return uid;
    }     public String getReserve()
    {
        return reserve;
    }     @Override
    public String getElementName() {
        return "commande";
    }     @Override
    public String getNamespace() {
        return null;
    }     @Override
    public String toXML() {
        return "<commande xmlns='" + NAMESPACE +
               " id=" + id +
               " modified=" + modified +
               " version=" + version +
               " etat=" + etat +
               " uid=" + uid +
               " reserve=" + reserve +
               "/>" +
               "</commande>";
    }
}

and

public class CommandePacketProvider extends EmbeddedExtensionProvider {
    @Override
    protected PacketExtension createReturnExtension(String s, String s2, Map<String, String> attributeMap, List<? extends PacketExtension> packetExtensions) {
        return new CommandePacketExtension(attributeMap.get("id"),attributeMap.get("recap"),attributeMap.get("modified")
        ,attributeMap.get("version"),attributeMap.get("etat"),attributeMap.get("uid"),attributeMap.get("reserve"));
    }
}

and

pm.addExtensionProvider("commande", CommandePacketExtension.NAMESPACE,new CommandePacketProvider());

So with that i can see : in my logcat but if i do the same think for ticket, entete, it doesn’t work;

I need to do a class for each one, or a parser or…