diff options
author | Rajith Muditha Attapattu <rajith@apache.org> | 2012-06-10 23:38:39 +0000 |
---|---|---|
committer | Rajith Muditha Attapattu <rajith@apache.org> | 2012-06-10 23:38:39 +0000 |
commit | 7cdce1d68b1a796ba7abe93ae27b9683d301d266 (patch) | |
tree | c577b3f99ce6b07545f9c8766fb0946a2d63b8fe | |
parent | 2012533afb67397403142cd165ecded7e5a0f8bb (diff) | |
download | qpid-python-7cdce1d68b1a796ba7abe93ae27b9683d301d266.tar.gz |
QPID-4027 Added a toString method to the Message class by using the swig
"%extend" directive. Used the same for moving the methods I introduced in
Mesage.h to java.i interface file. The BYTE_BUFFER struct is also moved
into the swig file. The only extra methods we need to add to Message.h
is to get/set the message headers as raw bytes.
git-svn-id: https://svn.apache.org/repos/asf/qpid/branches/address-refactor2@1348683 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r-- | qpid/cpp/bindings/qpid/java/java.i | 44 | ||||
-rw-r--r-- | qpid/cpp/bindings/swig_java_typemaps.i | 17 | ||||
-rw-r--r-- | qpid/cpp/include/qpid/messaging/Message.h | 33 | ||||
-rw-r--r-- | qpid/cpp/src/qpid/messaging/Message.cpp | 10 | ||||
-rw-r--r-- | qpid/java/client-api/src/main/java/org/apache/qpid/messaging/cpp/CppTest.java | 2 | ||||
-rw-r--r-- | qpid/java/client-api/src/main/java/org/apache/qpid/messaging/cpp/TextMessage.java | 7 | ||||
-rw-r--r-- | qpid/java/lib/qpid_cpp_jni.jar | bin | 25666 -> 25073 bytes |
7 files changed, 65 insertions, 48 deletions
diff --git a/qpid/cpp/bindings/qpid/java/java.i b/qpid/cpp/bindings/qpid/java/java.i index fb5bc6cde7..be7b51ee8b 100644 --- a/qpid/cpp/bindings/qpid/java/java.i +++ b/qpid/cpp/bindings/qpid/java/java.i @@ -21,5 +21,49 @@ %include "std_string.i" %include "../../swig_java_typemaps.i" +%begin %{ +struct BYTE_BUFFER +{ + public : + BYTE_BUFFER(): start(0), size(0) {} + BYTE_BUFFER(void* p, long s) : start(p), size(s) {} + void* getStart() const { return start; } + long getSize() const { return size; } + private: + void* start; + long size; +}; +%} + +%extend qpid::messaging::Message { + +void setContentAsByteBuffer(const BYTE_BUFFER buf) +{ + self->setContent(reinterpret_cast<char*>(buf.getStart()), buf.getSize()); +} + +const BYTE_BUFFER getContentAsByteBuffer() const +{ + return BYTE_BUFFER(static_cast<void*>(const_cast<char*>(self->getContentPtr())),self->getContentSize()); +} + +std::string toString() +{ + std::ostringstream toStr; + toStr << "{" << std::endl; + toStr << " Message-ID=" << self->getMessageId() << std::endl; + toStr << " Correlation-ID=" << self->getCorrelationId() << std::endl; + toStr << " Subject=" << self->getSubject() << std::endl; + toStr << " Durability=" << (self->getDurable()? "true" : "false" ) << std::endl; + toStr << " TTL=" << self->getTtl().getMilliseconds() << std::endl; + toStr << " Redelivered=" << (self->getRedelivered()? "true" : "false" ) << std::endl; + toStr << " Application-Properties=" << self->getProperties() << std::endl; + toStr << "}" << std::endl; + + return toStr.str(); +} + +} + %include "../qpid.i" diff --git a/qpid/cpp/bindings/swig_java_typemaps.i b/qpid/cpp/bindings/swig_java_typemaps.i index 139b8399a8..785f5ed73d 100644 --- a/qpid/cpp/bindings/swig_java_typemaps.i +++ b/qpid/cpp/bindings/swig_java_typemaps.i @@ -22,6 +22,7 @@ #include "qpid/types/Variant.h" #include "jni.h" #include <iostream> +#include <sstream> %} /* =================================================================== */ @@ -47,9 +48,9 @@ * The "jstype" specifies the types exposed in the proxy classes. * -------------------------------------------------------------------VaraintMapWrapper.h~ */ -%typemap(jni) qpid::messaging::Message::BYTE_BUFFER "jobject" -%typemap(jtype) qpid::messaging::Message::BYTE_BUFFER "java.nio.ByteBuffer" -%typemap(jstype) qpid::messaging::Message::BYTE_BUFFER "java.nio.ByteBuffer" +%typemap(jni) BYTE_BUFFER "jobject" +%typemap(jtype) BYTE_BUFFER "java.nio.ByteBuffer" +%typemap(jstype) BYTE_BUFFER "java.nio.ByteBuffer" %typemap(jni) qpid::types::Variant::Map& "jlong" %typemap(jtype) qpid::types::Variant::Map& "long" @@ -72,19 +73,19 @@ %typemap(jstype) uint64_t "long" /* -- qpid::messaging::Message::BYTE_BUFFER -- */ -%typemap(in) (qpid::messaging::Message::BYTE_BUFFER) { +%typemap(in) (BYTE_BUFFER) { void* start = jenv->GetDirectBufferAddress($input); long size = (long)(jenv->GetDirectBufferCapacity($input)); - $1 = qpid::messaging::Message::BYTE_BUFFER(start,size); + $1 = BYTE_BUFFER(start,size); } -%typemap(javain) (qpid::messaging::Message::BYTE_BUFFER) "$module.isBufferDirect($javainput)" +%typemap(javain) (BYTE_BUFFER) "$module.isBufferDirect($javainput)" -%typemap(out) qpid::messaging::Message::BYTE_BUFFER { +%typemap(out) BYTE_BUFFER { jresult = jenv->NewDirectByteBuffer($1.getStart(), $1.getSize()); } -%typemap(javaout) qpid::messaging::Message::BYTE_BUFFER { +%typemap(javaout) BYTE_BUFFER { return $jnicall; } diff --git a/qpid/cpp/include/qpid/messaging/Message.h b/qpid/cpp/include/qpid/messaging/Message.h index 4a69321c01..778610ec84 100644 --- a/qpid/cpp/include/qpid/messaging/Message.h +++ b/qpid/cpp/include/qpid/messaging/Message.h @@ -42,17 +42,6 @@ struct MessageImpl; class QPID_MESSAGING_CLASS_EXTERN Message { public: - struct QPID_MESSAGING_CLASS_EXTERN BYTE_BUFFER - { - public : - QPID_MESSAGING_EXTERN BYTE_BUFFER(): start(0), size(0) {} - QPID_MESSAGING_EXTERN BYTE_BUFFER(void* p, long s) : start(p), size(s) {} - QPID_MESSAGING_EXTERN void* getStart() const { return start; } - QPID_MESSAGING_EXTERN long getSize() const { return size; } - private: - void* start; - long size; - }; QPID_MESSAGING_EXTERN Message(const std::string& bytes = std::string()); QPID_MESSAGING_EXTERN Message(const char*, size_t); QPID_MESSAGING_EXTERN Message(const Message&); @@ -189,34 +178,18 @@ class QPID_MESSAGING_CLASS_EXTERN Message /** * Aimed at devlopers creating bindings over the c++ client. - * Copy count bytes from the region pointed - * to by BYTE_BUFFER.start and BYTE_BUFFER.size - */ - QPID_MESSAGING_EXTERN void setContentAsByteBuffer(const BYTE_BUFFER buf); - - /** - * Aimed at devlopers creating bindings over the c++ client. - * BYTE_BUFFER.start points to the start of the content data. - * BYTE_BUFFER.size indicates how much data there is. - */ - QPID_MESSAGING_EXTERN const BYTE_BUFFER getContentAsByteBuffer() const; - - /** - * Aimed at devlopers creating bindings over the c++ client. * The data contains the encoded message properties. * The method copy count bytes from the region pointed - * to by BYTE_BUFFER.start and BYTE_BUFFER.size + * to by chars. */ - QPID_MESSAGING_EXTERN void setPropertiesAsByteBuffer(const BYTE_BUFFER buf); + QPID_MESSAGING_EXTERN void setPropertiesAsRawBytes(const char* chars, size_t count); /** * Aimed at devlopers creating bindings over the c++ client. * The data contains raw message properties. * The calling application needs to decode the headers. - * BYTE_BUFFER.start points to the start of the content data. - * BYTE_BUFFER.size indicates how much data there is. */ - QPID_MESSAGING_EXTERN const BYTE_BUFFER getPropertiesAsByteBuffer() const; + QPID_MESSAGING_EXTERN void getPropertiesAsRawBytes(char*& chars, size_t count) const; private: MessageImpl* impl; diff --git a/qpid/cpp/src/qpid/messaging/Message.cpp b/qpid/cpp/src/qpid/messaging/Message.cpp index 507d534830..ef70c103e9 100644 --- a/qpid/cpp/src/qpid/messaging/Message.cpp +++ b/qpid/cpp/src/qpid/messaging/Message.cpp @@ -85,16 +85,6 @@ size_t Message::getContentSize() const return impl->getBytes().size(); } -void Message::setContentAsByteBuffer(const Message::BYTE_BUFFER buf) -{ - impl->setBytes(reinterpret_cast<char*>(buf.getStart()), buf.getSize()); -} - -const Message::BYTE_BUFFER Message::getContentAsByteBuffer() const -{ - return Message::BYTE_BUFFER(static_cast<void*>(const_cast<char*>(impl->getBytes().data())),impl->getBytes().size()); -} - EncodingException::EncodingException(const std::string& msg) : qpid::types::Exception(msg) {} const std::string BAD_ENCODING("Unsupported encoding: %1% (only %2% is supported at present)."); diff --git a/qpid/java/client-api/src/main/java/org/apache/qpid/messaging/cpp/CppTest.java b/qpid/java/client-api/src/main/java/org/apache/qpid/messaging/cpp/CppTest.java index 9e28f7bcc5..61678eda47 100644 --- a/qpid/java/client-api/src/main/java/org/apache/qpid/messaging/cpp/CppTest.java +++ b/qpid/java/client-api/src/main/java/org/apache/qpid/messaging/cpp/CppTest.java @@ -61,6 +61,8 @@ public class CppTest System.out.println("Unspecified property : " + props.get("Unspecified-Prop")); + System.out.println("Msg toString() : " + m); + ssn.close(); con.close(); } diff --git a/qpid/java/client-api/src/main/java/org/apache/qpid/messaging/cpp/TextMessage.java b/qpid/java/client-api/src/main/java/org/apache/qpid/messaging/cpp/TextMessage.java index 1602a486b3..e9a311c606 100644 --- a/qpid/java/client-api/src/main/java/org/apache/qpid/messaging/cpp/TextMessage.java +++ b/qpid/java/client-api/src/main/java/org/apache/qpid/messaging/cpp/TextMessage.java @@ -28,6 +28,7 @@ public class TextMessage implements org.apache.qpid.messaging.Message { _cppMessage = new org.apache.qpid.messaging.cpp.jni.Message(text); _cppMessage.setContentType("text/plain"); + _cppMessage.setPriority((byte)5); } public TextMessage(org.apache.qpid.messaging.cpp.jni.Message msg) @@ -209,4 +210,10 @@ public class TextMessage implements org.apache.qpid.messaging.Message return _cppMessage; } + @Override + public String toString() + { + return _cppMessage.toString(); + } + } diff --git a/qpid/java/lib/qpid_cpp_jni.jar b/qpid/java/lib/qpid_cpp_jni.jar Binary files differindex 369796db9d..142ce1c77c 100644 --- a/qpid/java/lib/qpid_cpp_jni.jar +++ b/qpid/java/lib/qpid_cpp_jni.jar |