Hi Yury,

note that you have to configure XStream properly so it can use your class'
annotations, like

  <bean class="org.apache.activemq.util.XStreamFactoryBean" name="xstream">
          <property
name="annotatedClass"><value>org.apache.activemq.transport.stomp.SamplePojo</value></property>
  </bean>

used in StompTest.

Cheers
--
Dejan Bosanac

Open Source Integration - http://fusesource.com/
ActiveMQ in Action - http://www.manning.com/snyder/
Blog - http://www.nighttale.net


On Wed, Apr 1, 2009 at 5:47 PM, Yury Batrakov <batra...@gmail.com> wrote:

>
> Hi all!
>
> I'm trying to force Ruby and Java code to interoperate between each other
> by
> means of ActiveMQ's stomp. I already have a Java classes that send
> ObjectMessages to each other and want these messages to be delivered and be
> unmarshalled in Ruby code.  I read http://activemq.apache.org/stomp.htmland
> StompTest.java and written the code. The problem is that the Ruby script
> receives messages with empty body. I am sure that object messages  messages
> are properly marshalled to XML. I also ensured that TextMessages are
> delivered ok.
>
> Here is my code, I'll be very appreciated if  someone points me what is
> wrong with it:
> // StompSender.java
> package ru.my.test;
>
> import javax.jms.Connection;
> import javax.jms.MessageProducer;
> import javax.jms.ObjectMessage;
> import javax.jms.Session;
>
> import org.apache.activemq.ActiveMQConnectionFactory;
> import org.apache.activemq.transport.stomp.Stomp;
>
> public class StompSender
> {
>    public Connection connection = null;
>    public Session session = null;
>    public MessageProducer sender = null;
>
>    public StompSender() throws Exception
>    {
>        ActiveMQConnectionFactory cf = new
> ActiveMQConnectionFactory("tcp://localhost:61616");
>        connection = cf.createConnection();
>        session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
>        sender = session.createProducer(session.createTopic("stompcat"));
>        connection.start();
>    }
>
>    public static void main(String[] args) {
>        try {
>            StompSender snd = new StompSender();
>            ObjectMessage msg = snd.session.createObjectMessage(new
> SamplePojo("10", "20"));
>            msg.setStringProperty("transformation",
> Stomp.Transformations.JMS_OBJECT_XML.toString());
>            snd.sender.send(msg);
>            snd.connection.stop();
>        } catch (Exception e) {
>            e.printStackTrace();
>        }
>    }
> }
>
> // SamplePojo.class
> package ru.my.test;
>
> import java.io.Serializable;
>
> import com.thoughtworks.xstream.annotations.XStreamAlias;
> import com.thoughtworks.xstream.XStream;
>
> @XStreamAlias("pojo")
>    public class SamplePojo implements Serializable {
>        @XStreamAlias("name")
>            private String name;
>        @XStreamAlias("city")
>            private String city;
>
>        public SamplePojo() {
>        }
>
>        public SamplePojo(String name, String city) {
>            this.name = name;
>            this.city = city;
>        }
>
>
>        public String getCity() {
>            return city;
>        }
>
>        public void setCity(String city) {
>            this.city = city;
>        }
>
>        public String getName() {
>            return name;
>        }
>
>        public void setName(String name) {
>            this.name = name;
>        }
>
>        public static void main(String[] args) {
>            XStream stream = new XStream();
>            stream.processAnnotations(SamplePojo.class);
>            SamplePojo msg = new SamplePojo("10", "20");
>            System.out.println(stream.toXML(msg));
>        }
>    }
>
> // modified stompcat.rb
> require 'rubygems'
> require 'stomp'
>
> begin
>
>    @port = 61613
>    @host = "localhost"
>    @user = ENV["STOMP_USER"];
>    @password = ENV["STOMP_PASSWORD"]
>
>    @host = ENV["STOMP_HOST"] if ENV["STOMP_HOST"] != NIL
>    @port = ENV["STOMP_PORT"] if ENV["STOMP_PORT"] != NIL
>
>    @destination = "/topic/stompcat"
>    @destination = $*[0] if $*[0] != NIL
>
>    $stderr.print "Connecting to stomp://#...@host}:#...@port} as #...@user}\n"
>    @conn = Stomp::Connection.open @user, @password, @host, @port, true
>    $stderr.print "Getting output from #...@destination}\n"
>
> # None of two lines works
>    @conn.subscribe @destination, { :ack=>"client",
> :transformation=>"jms-object-xml" }
> #    @conn.subscribe @destination, {:ack=>"client"}
>    while true
>        @msg = @conn.receive
>        $stdout.print @msg
>        $stdout.flush
>        @conn.ack @msg.headers["message-id"]
>    end
>    @conn.disconnect
>
> rescue
> end
>
> Message that is delivered to topic is:
> <Stomp::Message headers={"timestamp"=>"1238598757167",
> "message-id"=>"ID:storm-38501-1238598756986-0:0:1:1:1", "expires"=>"0",
> "destination"=>"/topic/stompcat", "priority"=>"4",
> "transformation"=>"jms-object-xml"} body='' command='MESSAGE' >
> --
> View this message in context:
> http://www.nabble.com/Active-MQ-sends-empty-message-bodies-via-Stomp-tp22829522p22829522.html
> Sent from the ActiveMQ - User mailing list archive at Nabble.com.
>
>

Reply via email to