/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.activemq.artemis.cli.commands.tools.xml; import com.google.common.base.Preconditions; import org.apache.activemq.artemis.api.core.ActiveMQBuffer; import org.apache.activemq.artemis.api.core.Message; import org.apache.activemq.artemis.api.core.SimpleString; import org.apache.activemq.artemis.utils.Base64; /** * Common utility methods to help with XML message conversion */ public class XmlDataExporterUtil { static String convertProperty(final Object value) { if (value instanceof byte[]) { return encode((byte[]) value); } else { return value == null ? XmlDataConstants.NULL : value.toString(); } } static String getPropertyType(final Object value) { String stringValue = null; // if the value is null then we can't really know what it is so just set // the type to the most generic thing if (value == null) { stringValue = XmlDataConstants.PROPERTY_TYPE_BYTES; } else if (value instanceof Boolean) { stringValue = XmlDataConstants.PROPERTY_TYPE_BOOLEAN; } else if (value instanceof Byte) { stringValue = XmlDataConstants.PROPERTY_TYPE_BYTE; } else if (value instanceof Short) { stringValue = XmlDataConstants.PROPERTY_TYPE_SHORT; } else if (value instanceof Integer) { stringValue = XmlDataConstants.PROPERTY_TYPE_INTEGER; } else if (value instanceof Long) { stringValue = XmlDataConstants.PROPERTY_TYPE_LONG; } else if (value instanceof Float) { stringValue = XmlDataConstants.PROPERTY_TYPE_FLOAT; } else if (value instanceof Double) { stringValue = XmlDataConstants.PROPERTY_TYPE_DOUBLE; } else if (value instanceof String) { stringValue = XmlDataConstants.PROPERTY_TYPE_STRING; } else if (value instanceof SimpleString) { stringValue = XmlDataConstants.PROPERTY_TYPE_SIMPLE_STRING; } else if (value instanceof byte[]) { stringValue = XmlDataConstants.PROPERTY_TYPE_BYTES; } return stringValue; } public static String getMessagePrettyType(byte rawType) { String prettyType = XmlDataConstants.DEFAULT_TYPE_PRETTY; if (rawType == Message.BYTES_TYPE) { prettyType = XmlDataConstants.BYTES_TYPE_PRETTY; } else if (rawType == Message.MAP_TYPE) { prettyType = XmlDataConstants.MAP_TYPE_PRETTY; } else if (rawType == Message.OBJECT_TYPE) { prettyType = XmlDataConstants.OBJECT_TYPE_PRETTY; } else if (rawType == Message.STREAM_TYPE) { prettyType = XmlDataConstants.STREAM_TYPE_PRETTY; } else if (rawType == Message.TEXT_TYPE) { prettyType = XmlDataConstants.TEXT_TYPE_PRETTY; } return prettyType; } /** * Base64 encode a ServerMessage body into the proper XML format */ static String encodeMessageBody(final Message message) throws Exception { Preconditions.checkNotNull(message, "ServerMessage can not be null"); ActiveMQBuffer byteBuffer = message.toCore().getReadOnlyBodyBuffer(); byte[] buffer = new byte[byteBuffer.writerIndex()]; byteBuffer.readBytes(buffer); return XmlDataExporterUtil.encode(buffer); } protected static String encode(final byte[] data) { return Base64.encodeBytes(data, 0, data.length, Base64.DONT_BREAK_LINES | Base64.URL_SAFE); } }