Author: tabish Date: Thu Dec 28 11:36:57 2006 New Revision: 490775 URL: http://svn.apache.org/viewvc?view=rev&rev=490775 Log: http://issues.apache.org/activemq/browse/AMQCPP-37
Modified: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/ActiveMQBytesMessage.h incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/BytesMessageCommand.h incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/io/DataInputStream.cpp incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/io/DataInputStream.h incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/io/DataOutputStream.cpp incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/io/DataOutputStream.h incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/cms/BytesMessage.h incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/test/activemq/io/DataInputStreamTest.h Modified: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/ActiveMQBytesMessage.h URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/ActiveMQBytesMessage.h?view=diff&rev=490775&r1=490774&r2=490775 ============================================================================== --- incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/ActiveMQBytesMessage.h (original) +++ incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/commands/ActiveMQBytesMessage.h Thu Dec 28 11:36:57 2006 @@ -654,6 +654,20 @@ */ virtual void writeString( const std::string& value ) throw ( cms::CMSException ); + /** + * Reads an UTF String from the BytesMessage stream + * @returns String from stream + * @throws CMSException + */ + virtual std::string readUTF() throw ( cms::CMSException ); + + /** + * Writes an UTF String to the BytesMessage stream + * @param value - String to write to the stream + * @throws CMSException + */ + virtual void writeUTF( const std::string& value ) throw ( cms::CMSException ); + public: // ActiveMQMessage /** Modified: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/BytesMessageCommand.h URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/BytesMessageCommand.h?view=diff&rev=490775&r1=490774&r2=490775 ============================================================================== --- incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/BytesMessageCommand.h (original) +++ incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/stomp/commands/BytesMessageCommand.h Thu Dec 28 11:36:57 2006 @@ -457,6 +457,26 @@ checkWriteOnly(); dataOutputStream.writeBytes( value ); } + + /** + * Reads an UTF String from the BytesMessage stream + * @returns String from stream + * @throws CMSException + */ + virtual std::string readUTF() throw ( cms::CMSException ){ + checkReadOnly(); + return dataInputStream.readUTF(); + } + + /** + * Writes an UTF String to the BytesMessage stream + * @param value The string to be written to the stream. + * @throws CMSException + */ + virtual void writeUTF( const std::string& value ) throw ( cms::CMSException ){ + checkWriteOnly(); + dataOutputStream.writeUTF( value ); + } protected: Modified: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/io/DataInputStream.cpp URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/io/DataInputStream.cpp?view=diff&rev=490775&r1=490774&r2=490775 ============================================================================== --- incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/io/DataInputStream.cpp (original) +++ incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/io/DataInputStream.cpp Thu Dec 28 11:36:57 2006 @@ -237,7 +237,11 @@ std::string DataInputStream::readUTF() throw ( io::IOException, io::EOFException ) { try { - return ""; + std::string buffer; + unsigned short len = readUnsignedShort(); + buffer.resize(len); + readFully( (unsigned char*)buffer.c_str(), 0, len ); + return buffer; } AMQ_CATCH_RETHROW( IOException ) AMQ_CATCHALL_THROW( IOException ) Modified: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/io/DataInputStream.h URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/io/DataInputStream.h?view=diff&rev=490775&r1=490774&r2=490775 ============================================================================== --- incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/io/DataInputStream.h (original) +++ incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/io/DataInputStream.h Thu Dec 28 11:36:57 2006 @@ -252,7 +252,9 @@ throw ( io::IOException, io::EOFException ); /** - * + * Reads an null terminated ASCII string to the stream and returns the + * string to the caller. + * @returns string object containing the string read. * @throws IOException * @throws EOFException */ @@ -260,7 +262,10 @@ throw ( io::IOException, io::EOFException ); /** - * + * Reads a UTF8 encoded string in ASCII format and returns it, this is + * only useful if you know for sure that the string that is to be read + * was a string that contained all ascii values, and not uncide chars. + * @returns string read from stream. * @throws IOException * @throws EOFException */ Modified: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/io/DataOutputStream.cpp URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/io/DataOutputStream.cpp?view=diff&rev=490775&r1=490774&r2=490775 ============================================================================== --- incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/io/DataOutputStream.cpp (original) +++ incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/io/DataOutputStream.cpp Thu Dec 28 11:36:57 2006 @@ -180,3 +180,13 @@ AMQ_CATCH_RETHROW( IOException ) AMQ_CATCHALL_THROW( IOException ) } + +//////////////////////////////////////////////////////////////////////////////// +void DataOutputStream::writeUTF( const std::string& value ) throw ( IOException ) { + try { + this->writeUnsignedShort( value.length() ); + this->write( (const unsigned char*)value.c_str(), value.length() ); + } + AMQ_CATCH_RETHROW( IOException ) + AMQ_CATCHALL_THROW( IOException ) +} Modified: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/io/DataOutputStream.h URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/io/DataOutputStream.h?view=diff&rev=490775&r1=490774&r2=490775 ============================================================================== --- incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/io/DataOutputStream.h (original) +++ incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/io/DataOutputStream.h Thu Dec 28 11:36:57 2006 @@ -199,6 +199,14 @@ */ virtual void writeChars( const std::string& value ) throw ( IOException ) {}; + /** + * Writes out the string to the underlying output stream as a + * unsigned short indicating its length followed by the rest of + * the string. + * @param value the value to write. + * @throws IOException + */ + virtual void writeUTF( const std::string& value ) throw ( io::IOException ); }; }} Modified: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/cms/BytesMessage.h URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/cms/BytesMessage.h?view=diff&rev=490775&r1=490774&r2=490775 ============================================================================== --- incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/cms/BytesMessage.h (original) +++ incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/cms/BytesMessage.h Thu Dec 28 11:36:57 2006 @@ -273,6 +273,20 @@ */ virtual void writeString( const std::string& value ) throw ( cms::CMSException ) = 0; + /** + * Reads an UTF String from the BytesMessage stream + * @returns String from stream + * @throws CMSException + */ + virtual std::string readUTF() throw ( cms::CMSException ) = 0; + + /** + * Writes an UTF String to the BytesMessage stream + * @param value - String to write to the stream + * @throws CMSException + */ + virtual void writeUTF( const std::string& value ) throw ( cms::CMSException ) = 0; + virtual BytesMessage* clone() const = 0; }; } Modified: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/test/activemq/io/DataInputStreamTest.h URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/test/activemq/io/DataInputStreamTest.h?view=diff&rev=490775&r1=490774&r2=490775 ============================================================================== --- incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/test/activemq/io/DataInputStreamTest.h (original) +++ incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/test/activemq/io/DataInputStreamTest.h Thu Dec 28 11:36:57 2006 @@ -60,6 +60,8 @@ unsigned char arrayVal[3] = { 'a', 'b', 'c' }; + std::string stringVal1 = "ASCII_String"; + std::string stringVal2 = "UTF8_String"; int size = sizeof(char); memcpy( (char*)(buffer+ix), (char*)&byteVal, size ); @@ -93,6 +95,16 @@ size = 3; memcpy( (char*)(buffer+ix), (char*)&arrayVal, size ); ix += size; + + memcpy( (char*)(buffer+ix), stringVal1.c_str(), stringVal1.size() + 1 ); + ix += stringVal1.size() + 1; + + size = sizeof(uint16_t); + uint16_t tempShort2 = util::Endian::byteSwap((unsigned short)stringVal2.size()); + memcpy( (char*)(buffer+ix), (char*)&tempShort2, size ); + ix += size; + memcpy( (char*)(buffer+ix), stringVal2.c_str(), stringVal2.size() ); + ix += stringVal2.size(); // Create the stream with the buffer we just wrote to. ByteArrayInputStream myStream( buffer, 1000 ); @@ -120,6 +132,13 @@ CPPUNIT_ASSERT( arrayVal[0] == 'a' ); CPPUNIT_ASSERT( arrayVal[1] == 'b' ); CPPUNIT_ASSERT( arrayVal[2] == 'c' ); + + std::string resultStrVal1 = reader.readString(); + CPPUNIT_ASSERT( resultStrVal1 == stringVal1 ); + + std::string resultStrVal2 = reader.readUTF(); + CPPUNIT_ASSERT( resultStrVal2 == stringVal2 ); + } };