blob: 598509c6907f9e4204cc01d19b6812dd38d24053 [file] [log] [blame]
/*
* 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.
*/
#ifndef _ACTIVENQ_UTIL_MARSHALLINGSUPPORT_H_
#define _ACTIVENQ_UTIL_MARSHALLINGSUPPORT_H_
#include <activemq/util/Config.h>
#include <decaf/io/IOException.h>
#include <decaf/io/UTFDataFormatException.h>
#include <decaf/io/DataOutputStream.h>
#include <decaf/io/DataInputStream.h>
#include <string>
namespace activemq {
namespace util {
class AMQCPP_API MarshallingSupport {
public:
MarshallingSupport();
virtual ~MarshallingSupport();
public: // Openwire Type Marshalling methods
/**
* Write the string object to the given DataOutputStream as Raw bytes, no string
* encoding is done on this char values in the string. User must encode to Modified
* UTF-8 as needed.
*
* @param dataOut
* The DataOutputStream to write the String data to.
* @param value
* Thre String value to write in Openwire form.
*
* @throws IOException if an I/O error occurs while writing the string.
*/
static void writeString(decaf::io::DataOutputStream& dataOut, const std::string& value);
/**
* Write the string object to the given DataOutputStream as Raw bytes, no string
* encoding is done on this char values in the string. User must encode to Modified
* UTF-8 as needed. This method write out only the size as a short and the string data
* no Openwire Type tag is appended.
*
* @param dataOut
* The DataOutputStream to write the String data to.
* @param value
* Thre String value to write in Openwire form.
*
* @throws IOException if an I/O error occurs while writing the string.
*/
static void writeString16(decaf::io::DataOutputStream& dataOut, const std::string& value);
/**
* Write the string object to the given DataOutputStream as Raw bytes, no string
* encoding is done on this char values in the string. User must encode to Modified
* UTF-8 as needed. This method write out only the size as a int and the string data
* no Openwire Type tag is appended.
*
* @param dataOut
* The DataOutputStream to write the String data to.
* @param value
* Thre String value to write in Openwire form.
*
* @throws IOException if an I/O error occurs while writing the string.
*/
static void writeString32(decaf::io::DataOutputStream& dataOut, const std::string& value);
/**
* Reads an Openwire encoded string from the provided DataInputStream. No string
* processing is performed by this method, clients that know the data contains UTF-8
* encoded content must use one of the utility methods of this class to decode the UTF-8
* data.
*
* This version assumes a size prefix of 16bits.
*
* @param dataIn
* The DataInputStream to read the String data from.
*
* @return the String value.
*
* @throws IOException if an I/O error occurs while writing the string.
*/
static std::string readString16(decaf::io::DataInputStream& dataIn);
/**
* Reads an Openwire encoded string from the provided DataInputStream. No string
* processing is performed by this method, clients that know the data contains UTF-8
* encoded content must use one of the utility methods of this class to decode the UTF-8
* data.
*
* This version assumes a size prefix of 32bits.
*
* @param dataIn
* The DataInputStream to read the String data from.
*
* @return the String value.
*
* @throws IOException if an I/O error occurs while writing the string.
*/
static std::string readString32(decaf::io::DataInputStream& dataIn);
public:
// Static Utility Methods.
/**
* Given an ASCII String with byte values [0..255] convert the string to a
* string containing the modified UTF-8 form of that same string. This allows
* an ASCII string containing values greater than 127 as well as embedded NULLs
* to be sent to a Java client.
*
* @param asciiString
* The ASCII string to encode as Modified UTF-8
*
* @return a string containing the Modified UTF-8 encoded form of the provided string.
*
* @throws UTFDataFormatException if the length of the encoded string would exceed the
* size of an signed integer.
*/
static std::string asciiToModifiedUtf8(const std::string& asciiString);
/**
* Given a string that contains bytes in the Java Modified UTF-8 format convert
* that string back into ASCII values from [0..255]. This will handle any string
* sent from a Java client which contains values within the [0..255] range or has
* embedded Nulls. Strings that have encoded values greater than 255 will cause
* an exception to be thrown.
*
* @param modifiedUtf8String
* The string to convert from Modified UTF-8 to ASCII.
*
* @return the ASCII encoded version of the provided string.
*
* @throws UTFDataFormatException if the provided string contains invalid data or the
* character values encoded in the string exceed ASCII value 255.
*/
static std::string modifiedUtf8ToAscii(const std::string modifiedUtf8String);
};
}}
#endif /* _ACTIVENQ_UTIL_MARSHALLINGSUPPORT_H_ */