/** * Specify the MessageConverter to use for turning request messages into * {@link org.springframework.remoting.support.RemoteInvocation} objects, * as well as {@link org.springframework.remoting.support.RemoteInvocationResult} * objects into response messages. * <p>Default is a {@link org.springframework.jms.support.converter.SimpleMessageConverter}, * using a standard JMS {@link javax.jms.ObjectMessage} for each invocation / * invocation result object. * <p>Custom implementations may generally adapt Serializables into * special kinds of messages, or might be specifically tailored for * translating RemoteInvocation(Result)s into specific kinds of messages. */ public void setMessageConverter(@Nullable MessageConverter messageConverter) { this.messageConverter = (messageConverter != null ? messageConverter : new SimpleMessageConverter()); }
@Test public void testStringConversion() throws JMSException { Session session = mock(Session.class); TextMessage message = mock(TextMessage.class); String content = "test"; given(session.createTextMessage(content)).willReturn(message); given(message.getText()).willReturn(content); SimpleMessageConverter converter = new SimpleMessageConverter(); Message msg = converter.toMessage(content, session); assertEquals(content, converter.fromMessage(msg)); }
return createMessageForString((String) object, session); return createMessageForByteArray((byte[]) object, session); return createMessageForMap((Map<? ,?>) object, session); return createMessageForSerializable(((Serializable) object), session);
/** * This implementation converts a TextMessage back to a String, a * ByteMessage back to a byte array, a MapMessage back to a Map, * and an ObjectMessage back to a Serializable object. Returns * the plain Message object in case of an unknown message type. * @see #extractStringFromMessage * @see #extractByteArrayFromMessage * @see #extractMapFromMessage * @see #extractSerializableFromMessage */ @Override public Object fromMessage(Message message) throws JMSException, MessageConversionException { if (message instanceof TextMessage) { return extractStringFromMessage((TextMessage) message); } else if (message instanceof BytesMessage) { return extractByteArrayFromMessage((BytesMessage) message); } else if (message instanceof MapMessage) { return extractMapFromMessage((MapMessage) message); } else if (message instanceof ObjectMessage) { return extractSerializableFromMessage((ObjectMessage) message); } else { return message; } }
@Test(expected = MessageConversionException.class) public void testToMessageThrowsExceptionIfGivenNullObjectToConvert() throws Exception { new SimpleMessageConverter().toMessage(null, null); }
@Test public void testFromMessageSimplyReturnsMessageAsIsIfSuppliedWithMessage() throws JMSException { Message message = mock(Message.class); SimpleMessageConverter converter = new SimpleMessageConverter(); Object msg = converter.fromMessage(message); assertSame(message, msg); }
private Object extractPayload(Message jmsMessage) { try { return converter.fromMessage(jmsMessage); } catch (Exception e) { e.printStackTrace(); fail(); } return null; } }
@Test(expected = MessageConversionException.class) public void testToMessageThrowsExceptionIfGivenIncompatibleObjectToConvert() throws Exception { new SimpleMessageConverter().toMessage(new Object(), null); }
/** * This implementation converts a TextMessage back to a String, a * ByteMessage back to a byte array, a MapMessage back to a Map, * and an ObjectMessage back to a Serializable object. Returns * the plain Message object in case of an unknown message type. * @see #extractStringFromMessage * @see #extractByteArrayFromMessage * @see #extractMapFromMessage * @see #extractSerializableFromMessage */ public Object fromMessage(Message message) throws JMSException, MessageConversionException { if (message instanceof TextMessage) { return extractStringFromMessage((TextMessage) message); } else if (message instanceof BytesMessage) { return extractByteArrayFromMessage((BytesMessage) message); } else if (message instanceof MapMessage) { return extractMapFromMessage((MapMessage) message); } else if (message instanceof ObjectMessage) { return extractSerializableFromMessage((ObjectMessage) message); } else { return message; } }
private Object extractPayload(Message jmsMessage) { try { return converter.fromMessage(jmsMessage); } catch (Exception e) { e.printStackTrace(); fail(); } return null; } }
/** * Specify the {@link MessageConverter} to use for turning * {@link org.springframework.remoting.support.RemoteInvocation} * objects into request messages, as well as response messages into * {@link org.springframework.remoting.support.RemoteInvocationResult} objects. * <p>Default is a {@link SimpleMessageConverter}, using a standard JMS * {@link javax.jms.ObjectMessage} for each invocation / invocation result * object. * <p>Custom implementations may generally adapt {@link java.io.Serializable} * objects into special kinds of messages, or might be specifically tailored for * translating {@code RemoteInvocation(Result)s} into specific kinds of messages. */ public void setMessageConverter(@Nullable MessageConverter messageConverter) { this.messageConverter = (messageConverter != null ? messageConverter : new SimpleMessageConverter()); }
@Test public void testSerializableConversion() throws JMSException { Session session = mock(Session.class); ObjectMessage message = mock(ObjectMessage.class); Integer content = new Integer(5); given(session.createObjectMessage(content)).willReturn(message); given(message.getObject()).willReturn(content); SimpleMessageConverter converter = new SimpleMessageConverter(); Message msg = converter.toMessage(content, session); assertEquals(content, converter.fromMessage(msg)); }
@Test public void testToMessageSimplyReturnsMessageAsIsIfSuppliedWithMessage() throws JMSException { Session session = mock(Session.class); ObjectMessage message = mock(ObjectMessage.class); SimpleMessageConverter converter = new SimpleMessageConverter(); Message msg = converter.toMessage(message, session); assertSame(message, msg); }
/** * This implementation converts a TextMessage back to a String, a * ByteMessage back to a byte array, a MapMessage back to a Map, * and an ObjectMessage back to a Serializable object. Returns * the plain Message object in case of an unknown message type. * @see #extractStringFromMessage * @see #extractByteArrayFromMessage * @see #extractMapFromMessage * @see #extractSerializableFromMessage */ @Override public Object fromMessage(Message message) throws JMSException, MessageConversionException { if (message instanceof TextMessage) { return extractStringFromMessage((TextMessage) message); } else if (message instanceof BytesMessage) { return extractByteArrayFromMessage((BytesMessage) message); } else if (message instanceof MapMessage) { return extractMapFromMessage((MapMessage) message); } else if (message instanceof ObjectMessage) { return extractSerializableFromMessage((ObjectMessage) message); } else { return message; } }
return createMessageForString((String) object, session); return createMessageForByteArray((byte[]) object, session); return createMessageForMap((Map<? ,?>) object, session); return createMessageForSerializable(((Serializable) object), session);
@Override public List<MeasurementSet> receiveMeasurementSets(String nrtCollectionTaskId) { List<MeasurementSet> result = new ArrayList<MeasurementSet>(); m_jmsTemplate.setReceiveTimeout(125); Message message = m_jmsTemplate.receive(nrtCollectionTaskId); while (message != null) { MeasurementSet measurementSet; try { measurementSet = (MeasurementSet) simpleMessageConverter.fromMessage(message); result.add(measurementSet); } catch (JMSException ex) { logger.error("Error receiving messages", ex); return result; } catch (MessageConversionException ex) { logger.error("Error converting messages", ex); return result; } message = m_jmsTemplate.receive(nrtCollectionTaskId); } return result; }
/** * Initialize the default implementations for the template's strategies: * DynamicDestinationResolver and SimpleMessageConverter. * @see #setDestinationResolver * @see #setMessageConverter * @see org.springframework.jms.support.destination.DynamicDestinationResolver * @see org.springframework.jms.support.converter.SimpleMessageConverter */ protected void initDefaultStrategies() { setMessageConverter(new SimpleMessageConverter()); }
@Test public void testMapConversion() throws JMSException { Session session = mock(Session.class); MapMessage message = mock(MapMessage.class); Map<String, String> content = new HashMap<>(2); content.put("key1", "value1"); content.put("key2", "value2"); given(session.createMapMessage()).willReturn(message); given(message.getMapNames()).willReturn(Collections.enumeration(content.keySet())); given(message.getObject("key1")).willReturn("value1"); given(message.getObject("key2")).willReturn("value2"); SimpleMessageConverter converter = new SimpleMessageConverter(); Message msg = converter.toMessage(content, session); assertEquals(content, converter.fromMessage(msg)); verify(message).setObject("key1", "value1"); verify(message).setObject("key2", "value2"); }
@Test public void testMapConversionWhereMapHasNNullForKey() throws JMSException { MapMessage message = mock(MapMessage.class); Session session = mock(Session.class); given(session.createMapMessage()).willReturn(message); Map<Object, String> content = new HashMap<>(1); content.put(null, "value1"); SimpleMessageConverter converter = new SimpleMessageConverter(); try { converter.toMessage(content, session); fail("expected MessageConversionException"); } catch (MessageConversionException ex) { /* expected */ } }
/** * This implementation converts a TextMessage back to a String, a * ByteMessage back to a byte array, a MapMessage back to a Map, * and an ObjectMessage back to a Serializable object. Returns * the plain Message object in case of an unknown message type. * @see #extractStringFromMessage * @see #extractByteArrayFromMessage * @see #extractMapFromMessage * @see #extractSerializableFromMessage */ @Override public Object fromMessage(Message message) throws JMSException, MessageConversionException { if (message instanceof TextMessage) { return extractStringFromMessage((TextMessage) message); } else if (message instanceof BytesMessage) { return extractByteArrayFromMessage((BytesMessage) message); } else if (message instanceof MapMessage) { return extractMapFromMessage((MapMessage) message); } else if (message instanceof ObjectMessage) { return extractSerializableFromMessage((ObjectMessage) message); } else { return message; } }