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. > >