diff options
| -rwxr-xr-x | qpid/cpp/bindings/qpid/examples/perl/drain.pl | 2 | ||||
| -rwxr-xr-x | qpid/cpp/bindings/qpid/examples/perl/map_receiver.pl | 4 | ||||
| -rwxr-xr-x | qpid/cpp/bindings/qpid/examples/perl/map_sender.pl | 2 | ||||
| -rwxr-xr-x | qpid/cpp/bindings/qpid/examples/perl/spout.pl | 10 | ||||
| -rw-r--r-- | qpid/cpp/bindings/qpid/perl/lib/qpid/messaging/Message.pm | 12 | ||||
| -rw-r--r-- | qpid/cpp/bindings/qpid/perl/lib/qpid/messaging/codec.pm | 25 | ||||
| -rw-r--r-- | qpid/cpp/bindings/qpid/perl/t/Message.t | 13 |
7 files changed, 52 insertions, 16 deletions
diff --git a/qpid/cpp/bindings/qpid/examples/perl/drain.pl b/qpid/cpp/bindings/qpid/examples/perl/drain.pl index e66184a160..773a398442 100755 --- a/qpid/cpp/bindings/qpid/examples/perl/drain.pl +++ b/qpid/cpp/bindings/qpid/examples/perl/drain.pl @@ -78,7 +78,7 @@ eval { my $redelivered = ($message->get_redelivered) ? "redelivered=True, " : ""; print "Message(" . $redelivered . "properties=" . printProperties($message->get_properties()) . ", content='"; if ($message->get_content_type() eq "amqp/map") { - my $content = qpid::messaging::decode_map($message); + my $content = $message->get_content(); map{ print "\n$_ => $content->{$_}"; } keys %{$content}; } else { diff --git a/qpid/cpp/bindings/qpid/examples/perl/map_receiver.pl b/qpid/cpp/bindings/qpid/examples/perl/map_receiver.pl index 048209fe75..8ac868eb89 100755 --- a/qpid/cpp/bindings/qpid/examples/perl/map_receiver.pl +++ b/qpid/cpp/bindings/qpid/examples/perl/map_receiver.pl @@ -33,8 +33,8 @@ eval { $connection->open(); my $session = $connection->create_session(); my $receiver = $session->create_receiver($address); - - my $content = qpid::messaging::decode_map($receiver->fetch()); + my $message = $receiver->fetch(); + my $content = $message->get_content(); print Dumper($content); diff --git a/qpid/cpp/bindings/qpid/examples/perl/map_sender.pl b/qpid/cpp/bindings/qpid/examples/perl/map_sender.pl index 4aae7b6b0e..3982259669 100755 --- a/qpid/cpp/bindings/qpid/examples/perl/map_sender.pl +++ b/qpid/cpp/bindings/qpid/examples/perl/map_sender.pl @@ -41,7 +41,7 @@ eval { percent => sprintf("%.2f", 0.99), colours => [ qw (red green white) ], }; - qpid::messaging::encode($content, $message); + $message->set_content($content); $sender->send($message, 1); $connection->close(); diff --git a/qpid/cpp/bindings/qpid/examples/perl/spout.pl b/qpid/cpp/bindings/qpid/examples/perl/spout.pl index af87b0a348..f86f058f31 100755 --- a/qpid/cpp/bindings/qpid/examples/perl/spout.pl +++ b/qpid/cpp/bindings/qpid/examples/perl/spout.pl @@ -87,17 +87,17 @@ eval { if (@entries) { my $content = {}; setEntries($content); - qpid::messaging::encode($content, $message); + $message->set_content($content); } elsif ($content) { - $message->setContent($content); - $message->setContentType("text/plain"); + $message->set_content($content); + $message->set_content_type("text/plain"); } my $receiver; if ($replyto) { my $responseQueue = new qpid::messaging::Address($replyto); - $receiver = $session->createReceiver($responseQueue); + $receiver = $session->create_receiver($responseQueue); $message->setReplyTo($responseQueue); } @@ -115,7 +115,7 @@ eval { if ($receiver) { my $response = $receiver->fetch(); - print "$i -> " . $response->getContent() . "\n"; + print "$i -> " . $response->get_content() . "\n"; } my $now = localtime; diff --git a/qpid/cpp/bindings/qpid/perl/lib/qpid/messaging/Message.pm b/qpid/cpp/bindings/qpid/perl/lib/qpid/messaging/Message.pm index a66b3ce07a..6437290244 100644 --- a/qpid/cpp/bindings/qpid/perl/lib/qpid/messaging/Message.pm +++ b/qpid/cpp/bindings/qpid/perl/lib/qpid/messaging/Message.pm @@ -556,14 +556,22 @@ sub set_content { die "Content must be provided" if !defined($content); - $impl->setContent($content); + $self->{_content} = $content; + + qpid::messaging::encode($content, $self); } sub get_content { my ($self) = @_; my $impl = $self->{_impl}; + $content = $self->{_content} || undef; + + if(!defined($content)) { + $content = qpid::messaging::decode($self); + $self->{_content} = $content; + } - return $impl->getContent(); + return $content; } sub get_content_size { diff --git a/qpid/cpp/bindings/qpid/perl/lib/qpid/messaging/codec.pm b/qpid/cpp/bindings/qpid/perl/lib/qpid/messaging/codec.pm index 566d7a4bbe..c9d6845eb9 100644 --- a/qpid/cpp/bindings/qpid/perl/lib/qpid/messaging/codec.pm +++ b/qpid/cpp/bindings/qpid/perl/lib/qpid/messaging/codec.pm @@ -22,14 +22,31 @@ package qpid::messaging; sub encode { my $content = $_[0]; my $message = $_[1]; + my $impl = $message->get_implementation(); - cqpid_perl::encode($content, $message->get_implementation()); + if(UNIVERSAL::isa($content, "HASH")) { + cqpid_perl::encode($content, $impl, "amqp/map"); + } elsif(UNIVERSAL::isa($content, "ARRAY")) { + cqpid_perl::encode($content, $impl, "amqp/list"); + } else { + $message->get_implementation()->setContent($content); + } } -sub decode_map { - my $message = $_[0]; +sub decode { + my $message = $_[0]; + my $impl = $message->get_implementation(); + my $content_type = $impl->getContentType(); - return cqpid_perl::decodeMap($message->get_implementation()); + if($content_type eq "amqp/map") { + $result = cqpid_perl::decodeMap($impl); + } elsif($content_type eq "amqp/list") { + $result = cqpid_perl::decodeList($impl); + } else { + $result = $impl->getContent(); + } + + return $result; } 1; diff --git a/qpid/cpp/bindings/qpid/perl/t/Message.t b/qpid/cpp/bindings/qpid/perl/t/Message.t index c191eaad5a..15baafb446 100644 --- a/qpid/cpp/bindings/qpid/perl/t/Message.t +++ b/qpid/cpp/bindings/qpid/perl/t/Message.t @@ -255,7 +255,6 @@ ok ($message->get_content() eq $content, $content = { id => 1234, name => "With\x00null" }; qpid::messaging::encode($content, $message); my $map = qpid::messaging::decode_map($message); - ok ($map->{name} eq "With\x00null", "Nulls embedded in map values work."); @@ -266,6 +265,18 @@ $map = qpid::messaging::decode_map($message); ok ($map->{name} eq "Euro=\x{20AC}", "Unicode strings encoded correctly."); +# Setting the content as a hash automatically encodes it +($content) = {"id" => "1234", "name" => "qpid"}; +$message->set_content($content); +ok ($message->get_content_type() eq "amqp/map", + "Hashes are automatically encoded correctly"); + +# Setting the content as a list automatically encodes it +my @acontent = (1, 2, 3, 4); +$message->set_content(\@acontent); +ok ($message->get_content_type() eq "amqp/list", + "Lists are automatically encoded correctly"); + # content size # content size is correct my $content_size = int(rand(256)); |
