*/
public final String writeObject(MsgQosData msgQosData, String extraOffset, Properties props) {
final boolean forceReadable = (props!=null) && props.containsKey(Constants.TOXML_FORCEREADABLE) ?
(Boolean.valueOf(props.getProperty(Constants.TOXML_FORCEREADABLE)).booleanValue()) : false; // "forceReadable"
XmlBuffer sb = new XmlBuffer(1024);
if (extraOffset == null) extraOffset = "";
String offset = Constants.OFFSET + extraOffset;
// WARNING: This dump must be valid, as it is used by the
// persistent store
sb.append(offset).append("<qos>");
if (!msgQosData.isOk() || msgQosData.getStateInfo() != null && msgQosData.getStateInfo().length() > 0) {
sb.append(offset).append(" <state id='").append(msgQosData.getState());
if (msgQosData.getStateInfo() != null)
sb.append("' info='").appendEscaped(msgQosData.getStateInfo());
sb.append("'/>");
}
if (msgQosData.getSubscribableProp().isModified()) {
if (msgQosData.isSubscribable())
sb.append(offset).append(" <subscribable/>");
else
sb.append(offset).append(" <subscribable>false</subscribable>");
}
ArrayList list = msgQosData.getDestinations();
if (list == null) {
//sb.append(offset + " <Pub_Sub_style />");
}
else {
for (int ii=0; ii<list.size(); ii++) {
Destination destination = (Destination)list.get(ii);
sb.append(destination.toXml(extraOffset+Constants.INDENT));
}
}
if (msgQosData.getSender() != null) {
sb.append(offset).append(" <sender>").append(msgQosData.getSender().getAbsoluteName()).append("</sender>");
}
if (PriorityEnum.NORM_PRIORITY != msgQosData.getPriority()) {
if (PriorityEnum.NORM_PRIORITY.toString().equals(msgQosData.getPriority().toString())) {
int hash1 = PriorityEnum.NORM_PRIORITY.hashCode();
int hash2 = msgQosData.getPriority().hashCode();
log.severe("The strings should not equal: PriorityEnum.NORM_PRIORITY=" + PriorityEnum.NORM_PRIORITY + " hash1=" + hash1 +
" msgQosData.getPriority()=" + msgQosData.getPriority() + " hash2=" + hash2);
}
sb.append(offset).append(" <priority>").getRawBuffer().append(msgQosData.getPriority()).append("</priority>");
}
if (msgQosData.getSubscriptionId() != null) {
sb.append(offset).append(" <").append(MethodName.SUBSCRIBE.getMethodName()).append(" id='");
sb.appendAttributeEscaped(msgQosData.getSubscriptionId()).append("'/>"); // Can contain XPath with ' or "
}
if (msgQosData.getLifeTimeProp().isModified() || msgQosData.getForceDestroyProp().isModified()) {
sb.append(offset).append(" <expiration");
if (msgQosData.getLifeTimeProp().isModified())
sb.append(" lifeTime='").append(msgQosData.getLifeTime()).append("'");
if (sendRemainingLife()) {
long remainCached = msgQosData.getRemainingLife();
if (remainCached > 0)
sb.append(" remainingLife='").append(remainCached).append("'");
else if (msgQosData.getRemainingLifeStatic() >= 0)
sb.append(" remainingLife='").append(msgQosData.getRemainingLifeStatic()).append("'");
}
if (msgQosData.getForceDestroyProp().isModified())
sb.append(" forceDestroy='").append(msgQosData.isForceDestroy()).append("'");
sb.append("/>");
}
if (msgQosData.getRcvTimestamp() != null)
sb.append(msgQosData.getRcvTimestamp().toXml(extraOffset+Constants.INDENT, forceReadable));
if(msgQosData.getQueueSize() > 0)
sb.append(offset).append(" <queue index='").append(msgQosData.getQueueIndex()).append("' size='").append(msgQosData.getQueueSize()).append("'/>");
//if (!msgQosData.isVolatileDefault())
// sb.append(offset).append(" <isVolatile>").append(msgQosData.isVolatile()).append("</isVolatile>");
if (msgQosData.getAdministrativeProp().isModified()) {
if (msgQosData.isAdministrative())
sb.append(offset).append(" <administrative/>");
else
sb.append(offset).append(" <administrative>false</administrative>");
}
if (msgQosData.getPersistentProp().isModified()) {
if (msgQosData.isPersistent())
sb.append(offset).append(" <persistent/>");
else
sb.append(offset).append(" <persistent>false</persistent>");
}
if (msgQosData.getForceUpdateProp().isModified()) {
if (msgQosData.isForceUpdate())
sb.append(offset).append(" <forceUpdate/>");
else
sb.append(offset).append(" <forceUpdate>false</forceUpdate>");
}
//if (msgQosData.isReadonly()) -> see topic attribute
// sb.append(offset).append(" <readonly/>");
if(msgQosData.getRedeliver() > 0) {
sb.append(offset).append(" <redeliver>").append(msgQosData.getRedeliver()).append("</redeliver>");
}
RouteInfo[] routeInfoArr = msgQosData.getRouteNodes();
if (routeInfoArr.length > 0) {
sb.append(offset).append(" <route>");
for (int ii=0; ii<routeInfoArr.length; ii++) {
sb.append(routeInfoArr[ii].toXml(extraOffset+Constants.INDENT));
}
sb.append(offset).append(" </route>");
}
if (msgQosData.getMethod() == MethodName.PUBLISH) {
sb.append(offset).append(" <isPublish/>");
}
else if (msgQosData.getMethod() == MethodName.UPDATE) {
sb.append(offset).append(" <isUpdate/>");
}
else if (msgQosData.getMethod() == MethodName.GET) {
sb.append(offset).append(" <isGet/>");
}
if (msgQosData.hasTopicProperty()) {
sb.append(msgQosData.getTopicProperty().toXml(extraOffset+Constants.INDENT));
}
sb.append(msgQosData.writePropertiesXml(extraOffset+Constants.INDENT, forceReadable));
sb.append(offset).append("</qos>");
if (sb.length() < 16)
return "<qos/>"; // minimal footprint
return sb.toString();
}