[ https://issues.apache.org/activemq/browse/AMQ-866?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_37873 ]
steve cook commented on AMQ-866: -------------------------------- Same problem with doubles. This is just a byte order problem - here is a patch for doubles. floats can be fixed in the same way: > > I've found a byte-order problem sending a double from Java ActiveMQ to a > NMS/CSharp receiver: > > (NMS) ActiveMQ.OpenWire.OpenWireBinaryReader has no definition for > ReadDouble(), and by default calls the MS .NET BinaryReader.ReadDouble() > which reads the bytes in the wrong order. Here is the fix: > > add a new method to OpenWireBinaryReader.cs: > > public override double ReadDouble() > { > return EndianSupport.SwitchEndian(base.ReadBytes(8)); > } > > add a new method to EndianSupport.cs: > > public static double SwitchEndian(byte[] bytes) > { > //Reverse byte array > byte[] reverse = new byte[8]; > reverse[0] = bytes[7]; > reverse[1] = bytes[6]; > reverse[2] = bytes[5]; > reverse[3] = bytes[4]; > reverse[4] = bytes[3]; > reverse[5] = bytes[2]; > reverse[6] = bytes[1]; > reverse[7] = bytes[0]; > BinaryReader br = new BinaryReader(new MemoryStream(reverse)); > return br.ReadDouble(); > } > > If anyone knows a cleaner way of doing this, please let me know. > > thx > /Steve > Problem from open wire dotnet send float properties message to java > ------------------------------------------------------------------- > > Key: AMQ-866 > URL: https://issues.apache.org/activemq/browse/AMQ-866 > Project: ActiveMQ > Issue Type: Bug > Components: NMS (C# client) > Reporter: Denis Abramov > > Am also interested in this issue (from Discussion forum): > I found a problem while i using open wire dotnet api to send float property > message to java platform, the value i recieved that is deffrent with the > value setting in dotnet platform. > here is send value(dotnet) is: float floatvalue = 2.1F > recieved value(java) is value is: 1.757237E-26 > is this a bug or i make some mistake in my test? > follow is my test code: > dotnet: > float value= 2.12F; > Uri uri = new Uri("tcp://" + ip + > ":61616?jms.useAsyncSend=true"); > factory = new ConnectionFactory(uri); > using (IConnection connection = factory.CreateConnection()) > { > ISession session = > connection.CreateSession(acknowledgementMode); > IDestination destination = session.GetQueue(queueName); > IMessageProducer producer = > session.CreateProducer(destination); > producer.Persistent = true; > // lets send a message > String text = "text"; > ITextMessage request = session.CreateTextMessage(text); > request.NMSPersistent = true; > request.NMSCorrelationID = "abc"; > > request.Properties["custom8"] = custom8; > producer.Send(request); > } > java: > public void onMessage(Message message) { > System.out.println(message.getFloatProperty("custom8")); > } > could someone do me a favor? > Thx! > Matt -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: https://issues.apache.org/activemq/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira