📄 msgqossaxfactory.java
字号:
character.setLength(0); return; } if(name.equalsIgnoreCase("expiration")) {// this.inExpiration = false; character.setLength(0); return; } if(name.equalsIgnoreCase("topic")) { inTopic = false; character.setLength(0); return; } if(name.equalsIgnoreCase("queue")) {// this.inQueue = false; character.setLength(0); return; } if(name.equalsIgnoreCase("persistence")) {// this.inPersistence = false; character.setLength(0); return; } if(name.equalsIgnoreCase("rcvTimestamp")) {// this.inRcvTimestamp = false; character.setLength(0); return; } if (name.equalsIgnoreCase(MethodName.SUBSCRIBE.getMethodName())) { // "subscribe"// this.inSubscribe = false; character.setLength(0); return; } if(name.equalsIgnoreCase("isVolatile")) { // deprecated// this.inIsVolatile = false; String tmp = character.toString().trim(); if (tmp.length() > 0) { msgQosData.setVolatile(new Boolean(tmp).booleanValue()); if (msgQosData.isVolatile()) { log.warning("Found 'isVolatile=" + msgQosData.isVolatile() + "' which is deprecated, use lifeTime==0&&forceDestroy==false instead"); } } character.setLength(0); return; } if(name.equalsIgnoreCase("administrative")) {// this.inAdministrative = false; String tmp = character.toString().trim(); if (tmp.length() > 0) msgQosData.setAdministrative(new Boolean(tmp).booleanValue()); // if (log.isLoggable(Level.FINE)) log.trace(ME, "Found administrative = " + msgQosData.isAdministrative()); character.setLength(0); return; } if(name.equalsIgnoreCase("persistent")) {// this.inIsPersistent = false; String tmp = character.toString().trim(); if (tmp.length() > 0) msgQosData.setPersistent(new Boolean(tmp).booleanValue()); // if (log.isLoggable(Level.FINE)) log.trace(ME, "Found persistent = " + msgQosData.isPersistent()); character.setLength(0); return; } if(name.equalsIgnoreCase("forceUpdate")) {// this.inForceUpdate = false; String tmp = character.toString().trim(); if (tmp.length() > 0) msgQosData.setForceUpdate(new Boolean(tmp).booleanValue()); // if (log.isLoggable(Level.FINE)) log.trace(ME, "Found forceUpdate = " + msgQosData.getForceUpdate()); character.setLength(0); return; } if(name.equalsIgnoreCase("readonly")) {// this.inReadonly = false; String tmp = character.toString().trim(); if (tmp.length() > 0) msgQosData.setReadonly(new Boolean(tmp).booleanValue()); // if (log.isLoggable(Level.FINE)) log.trace(ME, "Found readonly = " + msgQosData.readonly()); character.setLength(0); return; } if(name.equalsIgnoreCase("redeliver")) {// this.inRedeliver = false; String tmp = character.toString().trim(); try { msgQosData.setRedeliver(Integer.parseInt(tmp)); } catch(NumberFormatException e) { log.severe("Invalid redeliver =" + tmp); }; character.setLength(0); return; } if (name.equalsIgnoreCase("node")) { msgQosData.addRouteInfo(routeInfo); character.setLength(0); return; } if (name.equalsIgnoreCase("route")) { inRoute = false; character.setLength(0); return; } if (name.equalsIgnoreCase("isPublish")) { this.character.setLength(0); return; } if (name.equalsIgnoreCase("isUpdate")) { this.character.setLength(0); return; } if (name.equalsIgnoreCase("isGet")) { this.character.setLength(0); return; } character.setLength(0); // reset data from unknown tags } /** * Dump state of this object into a XML ASCII string. * <br> * @param extraOffset indenting of tags for nice output * @param forceReadable If true, any base64 is decoded to be more human readable and timestamps are human readable * @return internal state of the RequestBroker as a XML ASCII string */ 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" StringBuffer sb = new StringBuffer(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='").append(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>").append(msgQosData.getPriority()).append("</priority>"); } if (msgQosData.getSubscriptionId() != null) sb.append(offset).append(" <").append(MethodName.SUBSCRIBE.getMethodName()).append(" id='").append(msgQosData.getSubscriptionId()).append("'/>"); 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(); } /** * A human readable name of this factory * @return "MsgQosSaxFactory" */ public String getName() { return "MsgQosSaxFactory"; } /** Configure if remaingLife is sent in Qos (redesign approach to work with all QoS attributes */ public void sendRemainingLife(boolean sendRemainingLife) { this.sendRemainingLife = sendRemainingLife; } public boolean sendRemainingLife() { return this.sendRemainingLife; } // java org.xmlBlaster.util.qos.MsgQosSaxFactory xmlBlaster/testsuite/data/xml/Qos_UTF-8_With_CP1252.xml public static void main(String[] args) { String fn = args[0]; Global glob = Global.instance(); MsgQosSaxFactory f = new MsgQosSaxFactory(glob); String xml; try { xml = FileLocator.readAsciiFile(fn); //xml = new String(FileLocator.readFile(fn), "windows-1252"); MsgQosData data = f.readObject(xml); String newXml = data.toXml("",null); System.out.println("CP1252=" + data.getClientProperty("CP1252")); System.out.println("CP1252-BASE64=" + data.getClientProperty("CP1252-BASE64")); System.out.println(newXml); FileOutputStream to = new FileOutputStream(fn+".xml", false); String enc = "UTF-8"; //"UTF-16"; // "cp1252"; newXml = "<?xml version='1.0' encoding='"+enc+"' standalone='yes'?>"+newXml; to.write(newXml.getBytes(enc)); to.close(); } catch (Exception e) { e.printStackTrace(); } try { System.out.println("\nReading as bytes:"); byte[] bb = FileLocator.readFile(fn); String str = new String(bb, "windows-1252"); // transforms nicely cp1252 charset to UTF-8! //String str = new String(bb); // Linux: file.encoding is UTF-8 System.out.println("windows-1252 file.encoding="+ System.getProperty("file.encoding") + " '" + str + "'"); } catch (Exception e) { e.printStackTrace(); } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -