I resolved this issue by extending IQ and IQProvider classes:
ServerTime_IQProvider.java
public class ServerTime_IQProvider implements IQProvider
{
public static final String NAMESPACE = "urn:xmpp:mrpresence";
public static final String ELEMENT_NAME = "servertime";
public static final String UTC = "utc";
public static final String LOCAL = "local";
private Map<String, String> list = new HashMap<String, String>();
@Override
public IQ parseIQ(XmlPullParser parser) throws Exception
{
boolean stop = false;
String name = parser.getName();
while(false == stop)
{
switch (parser.getEventType())
{
case XmlPullParser.START_TAG:
{
if(ELEMENT_NAME.equals(name))
{
list.put(UTC, parser.getAttributeValue("", UTC));
list.put(LOCAL, parser.getAttributeValue("", LOCAL));
}
break;
}
case XmlPullParser.END_TAG:
{
stop = ELEMENT_NAME.equals(name);
break;
}
}
}
name = null;
return new ServerTime_IQ(list);
}
}
ServerTime_IQ.java
public class ServerTime_IQ extends IQ
{
public static final String ID = "servertime";
private Map<String, String> list;
public ServerTime_IQ(Map<String, String> l)
{
list = l;
}
@Override
public String getChildElementXML()
{
return null;
}
public String getServerTime_UTC()
{
return list.get(ServerTime_IQProvider.UTC);
}
public String getServerTime_Local()
{
return list.get(ServerTime_IQProvider.LOCAL);
}
}
Then I added the ServerTime provider to the IQProvider's list:
ProviderManager.getInstance().addIQProvider(ServerTime_IQProvider.ELEMENT_NAME, ServerTime_IQProvider.NAMESPACE, new ServerTime_IQProvider());
this will make sure that the xml response from server will be parsed with my custom parser (ServerTime_IQProvider) which is aware of the custom tags, and not with asmack's default parser.