Details
-
Bug
-
Status: Open
-
Major
-
Resolution: Unresolved
-
0.12
-
None
-
None
-
Perl
Description
There have been some interoperability issues reported between Java/C+/Perl whereby there is sometimes a mismatch between C+ qpid::messaging client defaults of binary strings and expected UTF8 Strings - especially noticeable with headers exchange matching.
One of the most significant issues is with the qpid::messaging AddressParser which is resolved here:
https://issues.apache.org/jira/browse/QPID-3492
However with qpid::messaging producers one must also be careful to call setEncoding("utf8") when setting string properties.
This is OK with C++ qpid::messaging as long as one is aware of the potential issue however there's a more significant issue with the Perl binding, which is a SWIG wrapper around qpid::messaging. This "transparently" maps Perl strings into binary strings and there doesn't appear to be any way to explicitly set the encoding as the Variant type implementation is abstracted away in Perl.
The following trivial snippet allows a UTF8 property to be set on a Message:
/*
This method properly encodes the value parameter as a UTF8 Variant type then sets the Property
on the Message passed in as a parameter.
*/
void setUtf8Property(Message& message, const char* key, const char* value) {
Variant utf8Value(value);
utf8Value.setEncoding("utf8");
message.setProperty(key, utf8Value);
}
Obviously to be of any use in the Perl binding it would need to be added to the SWIG interface.
Perhaps there's another way to set Message properties as UTF8 from the Perl binding?