diff --git a/build.gradle b/build.gradle index 03cdb873..bbeca0e8 100644 --- a/build.gradle +++ b/build.gradle @@ -109,7 +109,7 @@ subprojects { subproject -> } -project('spring-amqp-core') { +project('spring-amqp') { description = 'Spring AMQP Core' dependencies { @@ -141,7 +141,7 @@ project('spring-rabbit') { description = 'Spring RabbitMQ Support' dependencies { - compile project(":spring-amqp-core") + compile project(":spring-amqp") testCompile project(":spring-erlang") compile "com.rabbitmq:amqp-client:$rabbitmqVersion" diff --git a/settings.gradle b/settings.gradle index 7913609d..f31f626f 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,6 +1,6 @@ -rootProject.name = 'spring-amqp' +rootProject.name = 'spring-amqp-dist' -include 'spring-amqp-core' +include 'spring-amqp' include 'spring-erlang' include 'spring-rabbit' diff --git a/spring-amqp-core/src/main/java/org/springframework/amqp/AmqpConnectException.java b/spring-amqp/src/main/java/org/springframework/amqp/AmqpConnectException.java similarity index 100% rename from spring-amqp-core/src/main/java/org/springframework/amqp/AmqpConnectException.java rename to spring-amqp/src/main/java/org/springframework/amqp/AmqpConnectException.java diff --git a/spring-amqp-core/src/main/java/org/springframework/amqp/AmqpException.java b/spring-amqp/src/main/java/org/springframework/amqp/AmqpException.java similarity index 100% rename from spring-amqp-core/src/main/java/org/springframework/amqp/AmqpException.java rename to spring-amqp/src/main/java/org/springframework/amqp/AmqpException.java diff --git a/spring-amqp-core/src/main/java/org/springframework/amqp/AmqpIOException.java b/spring-amqp/src/main/java/org/springframework/amqp/AmqpIOException.java similarity index 100% rename from spring-amqp-core/src/main/java/org/springframework/amqp/AmqpIOException.java rename to spring-amqp/src/main/java/org/springframework/amqp/AmqpIOException.java diff --git a/spring-amqp-core/src/main/java/org/springframework/amqp/AmqpIllegalStateException.java b/spring-amqp/src/main/java/org/springframework/amqp/AmqpIllegalStateException.java similarity index 100% rename from spring-amqp-core/src/main/java/org/springframework/amqp/AmqpIllegalStateException.java rename to spring-amqp/src/main/java/org/springframework/amqp/AmqpIllegalStateException.java diff --git a/spring-amqp-core/src/main/java/org/springframework/amqp/AmqpRejectAndDontRequeueException.java b/spring-amqp/src/main/java/org/springframework/amqp/AmqpRejectAndDontRequeueException.java similarity index 100% rename from spring-amqp-core/src/main/java/org/springframework/amqp/AmqpRejectAndDontRequeueException.java rename to spring-amqp/src/main/java/org/springframework/amqp/AmqpRejectAndDontRequeueException.java diff --git a/spring-amqp-core/src/main/java/org/springframework/amqp/AmqpUnsupportedEncodingException.java b/spring-amqp/src/main/java/org/springframework/amqp/AmqpUnsupportedEncodingException.java similarity index 100% rename from spring-amqp-core/src/main/java/org/springframework/amqp/AmqpUnsupportedEncodingException.java rename to spring-amqp/src/main/java/org/springframework/amqp/AmqpUnsupportedEncodingException.java diff --git a/spring-amqp-core/src/main/java/org/springframework/amqp/ImmediateAcknowledgeAmqpException.java b/spring-amqp/src/main/java/org/springframework/amqp/ImmediateAcknowledgeAmqpException.java similarity index 100% rename from spring-amqp-core/src/main/java/org/springframework/amqp/ImmediateAcknowledgeAmqpException.java rename to spring-amqp/src/main/java/org/springframework/amqp/ImmediateAcknowledgeAmqpException.java diff --git a/spring-amqp-core/src/main/java/org/springframework/amqp/UncategorizedAmqpException.java b/spring-amqp/src/main/java/org/springframework/amqp/UncategorizedAmqpException.java similarity index 100% rename from spring-amqp-core/src/main/java/org/springframework/amqp/UncategorizedAmqpException.java rename to spring-amqp/src/main/java/org/springframework/amqp/UncategorizedAmqpException.java diff --git a/spring-amqp-core/src/main/java/org/springframework/amqp/core/AbstractExchange.java b/spring-amqp/src/main/java/org/springframework/amqp/core/AbstractExchange.java similarity index 100% rename from spring-amqp-core/src/main/java/org/springframework/amqp/core/AbstractExchange.java rename to spring-amqp/src/main/java/org/springframework/amqp/core/AbstractExchange.java diff --git a/spring-amqp-core/src/main/java/org/springframework/amqp/core/AcknowledgeMode.java b/spring-amqp/src/main/java/org/springframework/amqp/core/AcknowledgeMode.java similarity index 100% rename from spring-amqp-core/src/main/java/org/springframework/amqp/core/AcknowledgeMode.java rename to spring-amqp/src/main/java/org/springframework/amqp/core/AcknowledgeMode.java diff --git a/spring-amqp-core/src/main/java/org/springframework/amqp/core/Address.java b/spring-amqp/src/main/java/org/springframework/amqp/core/Address.java similarity index 100% rename from spring-amqp-core/src/main/java/org/springframework/amqp/core/Address.java rename to spring-amqp/src/main/java/org/springframework/amqp/core/Address.java diff --git a/spring-amqp-core/src/main/java/org/springframework/amqp/core/AmqpAdmin.java b/spring-amqp/src/main/java/org/springframework/amqp/core/AmqpAdmin.java similarity index 100% rename from spring-amqp-core/src/main/java/org/springframework/amqp/core/AmqpAdmin.java rename to spring-amqp/src/main/java/org/springframework/amqp/core/AmqpAdmin.java diff --git a/spring-amqp-core/src/main/java/org/springframework/amqp/core/AmqpTemplate.java b/spring-amqp/src/main/java/org/springframework/amqp/core/AmqpTemplate.java similarity index 100% rename from spring-amqp-core/src/main/java/org/springframework/amqp/core/AmqpTemplate.java rename to spring-amqp/src/main/java/org/springframework/amqp/core/AmqpTemplate.java diff --git a/spring-amqp-core/src/main/java/org/springframework/amqp/core/AnonymousQueue.java b/spring-amqp/src/main/java/org/springframework/amqp/core/AnonymousQueue.java similarity index 100% rename from spring-amqp-core/src/main/java/org/springframework/amqp/core/AnonymousQueue.java rename to spring-amqp/src/main/java/org/springframework/amqp/core/AnonymousQueue.java diff --git a/spring-amqp-core/src/main/java/org/springframework/amqp/core/Binding.java b/spring-amqp/src/main/java/org/springframework/amqp/core/Binding.java similarity index 100% rename from spring-amqp-core/src/main/java/org/springframework/amqp/core/Binding.java rename to spring-amqp/src/main/java/org/springframework/amqp/core/Binding.java diff --git a/spring-amqp-core/src/main/java/org/springframework/amqp/core/BindingBuilder.java b/spring-amqp/src/main/java/org/springframework/amqp/core/BindingBuilder.java similarity index 100% rename from spring-amqp-core/src/main/java/org/springframework/amqp/core/BindingBuilder.java rename to spring-amqp/src/main/java/org/springframework/amqp/core/BindingBuilder.java diff --git a/spring-amqp-core/src/main/java/org/springframework/amqp/core/CustomExchange.java b/spring-amqp/src/main/java/org/springframework/amqp/core/CustomExchange.java similarity index 100% rename from spring-amqp-core/src/main/java/org/springframework/amqp/core/CustomExchange.java rename to spring-amqp/src/main/java/org/springframework/amqp/core/CustomExchange.java diff --git a/spring-amqp-core/src/main/java/org/springframework/amqp/core/DirectExchange.java b/spring-amqp/src/main/java/org/springframework/amqp/core/DirectExchange.java similarity index 100% rename from spring-amqp-core/src/main/java/org/springframework/amqp/core/DirectExchange.java rename to spring-amqp/src/main/java/org/springframework/amqp/core/DirectExchange.java diff --git a/spring-amqp-core/src/main/java/org/springframework/amqp/core/Exchange.java b/spring-amqp/src/main/java/org/springframework/amqp/core/Exchange.java similarity index 100% rename from spring-amqp-core/src/main/java/org/springframework/amqp/core/Exchange.java rename to spring-amqp/src/main/java/org/springframework/amqp/core/Exchange.java diff --git a/spring-amqp-core/src/main/java/org/springframework/amqp/core/ExchangeTypes.java b/spring-amqp/src/main/java/org/springframework/amqp/core/ExchangeTypes.java similarity index 100% rename from spring-amqp-core/src/main/java/org/springframework/amqp/core/ExchangeTypes.java rename to spring-amqp/src/main/java/org/springframework/amqp/core/ExchangeTypes.java diff --git a/spring-amqp-core/src/main/java/org/springframework/amqp/core/FanoutExchange.java b/spring-amqp/src/main/java/org/springframework/amqp/core/FanoutExchange.java similarity index 100% rename from spring-amqp-core/src/main/java/org/springframework/amqp/core/FanoutExchange.java rename to spring-amqp/src/main/java/org/springframework/amqp/core/FanoutExchange.java diff --git a/spring-amqp-core/src/main/java/org/springframework/amqp/core/FederatedExchange.java b/spring-amqp/src/main/java/org/springframework/amqp/core/FederatedExchange.java similarity index 100% rename from spring-amqp-core/src/main/java/org/springframework/amqp/core/FederatedExchange.java rename to spring-amqp/src/main/java/org/springframework/amqp/core/FederatedExchange.java diff --git a/spring-amqp-core/src/main/java/org/springframework/amqp/core/HeadersExchange.java b/spring-amqp/src/main/java/org/springframework/amqp/core/HeadersExchange.java similarity index 100% rename from spring-amqp-core/src/main/java/org/springframework/amqp/core/HeadersExchange.java rename to spring-amqp/src/main/java/org/springframework/amqp/core/HeadersExchange.java diff --git a/spring-amqp-core/src/main/java/org/springframework/amqp/core/Message.java b/spring-amqp/src/main/java/org/springframework/amqp/core/Message.java similarity index 100% rename from spring-amqp-core/src/main/java/org/springframework/amqp/core/Message.java rename to spring-amqp/src/main/java/org/springframework/amqp/core/Message.java diff --git a/spring-amqp-core/src/main/java/org/springframework/amqp/core/MessageDeliveryMode.java b/spring-amqp/src/main/java/org/springframework/amqp/core/MessageDeliveryMode.java similarity index 100% rename from spring-amqp-core/src/main/java/org/springframework/amqp/core/MessageDeliveryMode.java rename to spring-amqp/src/main/java/org/springframework/amqp/core/MessageDeliveryMode.java diff --git a/spring-amqp-core/src/main/java/org/springframework/amqp/core/MessageListener.java b/spring-amqp/src/main/java/org/springframework/amqp/core/MessageListener.java similarity index 100% rename from spring-amqp-core/src/main/java/org/springframework/amqp/core/MessageListener.java rename to spring-amqp/src/main/java/org/springframework/amqp/core/MessageListener.java diff --git a/spring-amqp-core/src/main/java/org/springframework/amqp/core/MessagePostProcessor.java b/spring-amqp/src/main/java/org/springframework/amqp/core/MessagePostProcessor.java similarity index 100% rename from spring-amqp-core/src/main/java/org/springframework/amqp/core/MessagePostProcessor.java rename to spring-amqp/src/main/java/org/springframework/amqp/core/MessagePostProcessor.java diff --git a/spring-amqp-core/src/main/java/org/springframework/amqp/core/MessageProperties.java b/spring-amqp/src/main/java/org/springframework/amqp/core/MessageProperties.java similarity index 100% rename from spring-amqp-core/src/main/java/org/springframework/amqp/core/MessageProperties.java rename to spring-amqp/src/main/java/org/springframework/amqp/core/MessageProperties.java diff --git a/spring-amqp-core/src/main/java/org/springframework/amqp/core/Queue.java b/spring-amqp/src/main/java/org/springframework/amqp/core/Queue.java similarity index 100% rename from spring-amqp-core/src/main/java/org/springframework/amqp/core/Queue.java rename to spring-amqp/src/main/java/org/springframework/amqp/core/Queue.java diff --git a/spring-amqp-core/src/main/java/org/springframework/amqp/core/TopicExchange.java b/spring-amqp/src/main/java/org/springframework/amqp/core/TopicExchange.java similarity index 100% rename from spring-amqp-core/src/main/java/org/springframework/amqp/core/TopicExchange.java rename to spring-amqp/src/main/java/org/springframework/amqp/core/TopicExchange.java diff --git a/spring-amqp-core/src/main/java/org/springframework/amqp/core/UniquelyNamedQueue.java b/spring-amqp/src/main/java/org/springframework/amqp/core/UniquelyNamedQueue.java similarity index 100% rename from spring-amqp-core/src/main/java/org/springframework/amqp/core/UniquelyNamedQueue.java rename to spring-amqp/src/main/java/org/springframework/amqp/core/UniquelyNamedQueue.java diff --git a/spring-amqp-core/src/main/java/org/springframework/amqp/support/converter/AbstractMessageConverter.java b/spring-amqp/src/main/java/org/springframework/amqp/support/converter/AbstractMessageConverter.java similarity index 100% rename from spring-amqp-core/src/main/java/org/springframework/amqp/support/converter/AbstractMessageConverter.java rename to spring-amqp/src/main/java/org/springframework/amqp/support/converter/AbstractMessageConverter.java diff --git a/spring-amqp-core/src/main/java/org/springframework/amqp/support/converter/ClassMapper.java b/spring-amqp/src/main/java/org/springframework/amqp/support/converter/ClassMapper.java similarity index 100% rename from spring-amqp-core/src/main/java/org/springframework/amqp/support/converter/ClassMapper.java rename to spring-amqp/src/main/java/org/springframework/amqp/support/converter/ClassMapper.java diff --git a/spring-amqp-core/src/main/java/org/springframework/amqp/support/converter/DefaultClassMapper.java b/spring-amqp/src/main/java/org/springframework/amqp/support/converter/DefaultClassMapper.java similarity index 71% rename from spring-amqp-core/src/main/java/org/springframework/amqp/support/converter/DefaultClassMapper.java rename to spring-amqp/src/main/java/org/springframework/amqp/support/converter/DefaultClassMapper.java index 70b3724a..d99216f7 100644 --- a/spring-amqp-core/src/main/java/org/springframework/amqp/support/converter/DefaultClassMapper.java +++ b/spring-amqp/src/main/java/org/springframework/amqp/support/converter/DefaultClassMapper.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2010 the original author or authors. + * Copyright 2002-2012 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at @@ -22,21 +22,37 @@ import org.springframework.beans.factory.InitializingBean; import org.springframework.util.ClassUtils; /** - * + * Maps to/from JSON using type information in the {@link MessageProperties}; + * the default name of the message property containing the type is '__TypeId__'. + * An optional property {@link #setDefaultType(Class)} + * is provided that allows mapping to a statically defined type, if no message property is + * found in the message properties. * @author Mark Pollack - * + * @author Gary Russell + * */ public class DefaultClassMapper implements ClassMapper, InitializingBean { public static final String DEFAULT_CLASSID_FIELD_NAME = "__TypeId__"; - private Map> idClassMapping = new HashMap>(); + private volatile Map> idClassMapping = new HashMap>(); - private Map, String> classIdMapping = new HashMap, String>(); + private volatile Map, String> classIdMapping = new HashMap, String>(); - private String defaultHashtableTypeId = "Hashtable"; + private final String defaultHashtableTypeId = "Hashtable"; - private Class defaultHashtableClass = Hashtable.class; + private volatile Class defaultHashtableClass = Hashtable.class; + + private volatile Class defaultType; + + /** + * The type returned by {@link #toClass(MessageProperties)} if no type information + * is found in the message properties. + * @param defaultType the defaultType to set + */ + public void setDefaultType(Class defaultType) { + this.defaultType = defaultType; + } public void setDefaultHashtableClass(Class defaultHashtableClass) { this.defaultHashtableClass = defaultHashtableClass; @@ -105,9 +121,15 @@ public class DefaultClassMapper implements ClassMapper, InitializingBean { classId = classIdFieldNameValue.toString(); } if (classId == null) { - throw new MessageConversionException( - "failed to convert Message content. Could not resolve " - + getClassIdFieldName() + " in header"); + if (this.defaultType != null) { + return this.defaultType; + } + else { + throw new MessageConversionException( + "failed to convert Message content. Could not resolve " + + getClassIdFieldName() + " in header " + + "and no defaultType provided"); + } } return toClass(classId); } diff --git a/spring-amqp-core/src/main/java/org/springframework/amqp/support/converter/DefaultJavaTypeMapper.java b/spring-amqp/src/main/java/org/springframework/amqp/support/converter/DefaultJavaTypeMapper.java similarity index 100% rename from spring-amqp-core/src/main/java/org/springframework/amqp/support/converter/DefaultJavaTypeMapper.java rename to spring-amqp/src/main/java/org/springframework/amqp/support/converter/DefaultJavaTypeMapper.java diff --git a/spring-amqp-core/src/main/java/org/springframework/amqp/support/converter/JavaTypeMapper.java b/spring-amqp/src/main/java/org/springframework/amqp/support/converter/JavaTypeMapper.java similarity index 100% rename from spring-amqp-core/src/main/java/org/springframework/amqp/support/converter/JavaTypeMapper.java rename to spring-amqp/src/main/java/org/springframework/amqp/support/converter/JavaTypeMapper.java diff --git a/spring-amqp-core/src/main/java/org/springframework/amqp/support/converter/JsonMessageConverter.java b/spring-amqp/src/main/java/org/springframework/amqp/support/converter/JsonMessageConverter.java similarity index 100% rename from spring-amqp-core/src/main/java/org/springframework/amqp/support/converter/JsonMessageConverter.java rename to spring-amqp/src/main/java/org/springframework/amqp/support/converter/JsonMessageConverter.java diff --git a/spring-amqp-core/src/main/java/org/springframework/amqp/support/converter/MarshallingMessageConverter.java b/spring-amqp/src/main/java/org/springframework/amqp/support/converter/MarshallingMessageConverter.java similarity index 100% rename from spring-amqp-core/src/main/java/org/springframework/amqp/support/converter/MarshallingMessageConverter.java rename to spring-amqp/src/main/java/org/springframework/amqp/support/converter/MarshallingMessageConverter.java diff --git a/spring-amqp-core/src/main/java/org/springframework/amqp/support/converter/MessageConversionException.java b/spring-amqp/src/main/java/org/springframework/amqp/support/converter/MessageConversionException.java similarity index 100% rename from spring-amqp-core/src/main/java/org/springframework/amqp/support/converter/MessageConversionException.java rename to spring-amqp/src/main/java/org/springframework/amqp/support/converter/MessageConversionException.java diff --git a/spring-amqp-core/src/main/java/org/springframework/amqp/support/converter/MessageConverter.java b/spring-amqp/src/main/java/org/springframework/amqp/support/converter/MessageConverter.java similarity index 100% rename from spring-amqp-core/src/main/java/org/springframework/amqp/support/converter/MessageConverter.java rename to spring-amqp/src/main/java/org/springframework/amqp/support/converter/MessageConverter.java diff --git a/spring-amqp-core/src/main/java/org/springframework/amqp/support/converter/SerializerMessageConverter.java b/spring-amqp/src/main/java/org/springframework/amqp/support/converter/SerializerMessageConverter.java similarity index 100% rename from spring-amqp-core/src/main/java/org/springframework/amqp/support/converter/SerializerMessageConverter.java rename to spring-amqp/src/main/java/org/springframework/amqp/support/converter/SerializerMessageConverter.java diff --git a/spring-amqp-core/src/main/java/org/springframework/amqp/support/converter/SimpleMessageConverter.java b/spring-amqp/src/main/java/org/springframework/amqp/support/converter/SimpleMessageConverter.java similarity index 100% rename from spring-amqp-core/src/main/java/org/springframework/amqp/support/converter/SimpleMessageConverter.java rename to spring-amqp/src/main/java/org/springframework/amqp/support/converter/SimpleMessageConverter.java diff --git a/spring-amqp-core/src/main/java/org/springframework/amqp/utils/SerializationUtils.java b/spring-amqp/src/main/java/org/springframework/amqp/utils/SerializationUtils.java similarity index 100% rename from spring-amqp-core/src/main/java/org/springframework/amqp/utils/SerializationUtils.java rename to spring-amqp/src/main/java/org/springframework/amqp/utils/SerializationUtils.java diff --git a/spring-amqp-core/src/test/java/org/springframework/amqp/core/AddressTests.java b/spring-amqp/src/test/java/org/springframework/amqp/core/AddressTests.java similarity index 100% rename from spring-amqp-core/src/test/java/org/springframework/amqp/core/AddressTests.java rename to spring-amqp/src/test/java/org/springframework/amqp/core/AddressTests.java diff --git a/spring-amqp-core/src/test/java/org/springframework/amqp/core/BindingBuilderTests.java b/spring-amqp/src/test/java/org/springframework/amqp/core/BindingBuilderTests.java similarity index 100% rename from spring-amqp-core/src/test/java/org/springframework/amqp/core/BindingBuilderTests.java rename to spring-amqp/src/test/java/org/springframework/amqp/core/BindingBuilderTests.java diff --git a/spring-amqp-core/src/test/java/org/springframework/amqp/core/MessagePropertiesTests.java b/spring-amqp/src/test/java/org/springframework/amqp/core/MessagePropertiesTests.java similarity index 100% rename from spring-amqp-core/src/test/java/org/springframework/amqp/core/MessagePropertiesTests.java rename to spring-amqp/src/test/java/org/springframework/amqp/core/MessagePropertiesTests.java diff --git a/spring-amqp-core/src/test/java/org/springframework/amqp/core/MessageTests.java b/spring-amqp/src/test/java/org/springframework/amqp/core/MessageTests.java similarity index 100% rename from spring-amqp-core/src/test/java/org/springframework/amqp/core/MessageTests.java rename to spring-amqp/src/test/java/org/springframework/amqp/core/MessageTests.java diff --git a/spring-amqp-core/src/test/java/org/springframework/amqp/support/converter/DefaultClassMapperTest.java b/spring-amqp/src/test/java/org/springframework/amqp/support/converter/DefaultClassMapperTest.java similarity index 88% rename from spring-amqp-core/src/test/java/org/springframework/amqp/support/converter/DefaultClassMapperTest.java rename to spring-amqp/src/test/java/org/springframework/amqp/support/converter/DefaultClassMapperTest.java index 8fbc2c13..0c5917b2 100644 --- a/spring-amqp-core/src/test/java/org/springframework/amqp/support/converter/DefaultClassMapperTest.java +++ b/spring-amqp/src/test/java/org/springframework/amqp/support/converter/DefaultClassMapperTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2011 the original author or authors. + * Copyright 2002-2012 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at @@ -14,6 +14,7 @@ package org.springframework.amqp.support.converter; import static org.hamcrest.CoreMatchers.equalTo; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertSame; import static org.junit.Assert.assertThat; import static org.junit.matchers.JUnitMatchers.containsString; import static org.mockito.BDDMockito.given; @@ -28,15 +29,18 @@ import org.junit.runner.RunWith; import org.mockito.Spy; import org.mockito.runners.MockitoJUnitRunner; import org.springframework.amqp.core.MessageProperties; +import org.springframework.amqp.support.converter.JsonMessageConverterTests.Foo; /** * @author James Carr - * + * @author Gary Russell + * */ @RunWith(MockitoJUnitRunner.class) public class DefaultClassMapperTest { @Spy DefaultClassMapper classMapper = new DefaultClassMapper(); + private final MessageProperties props = new MessageProperties(); @Test @@ -115,6 +119,17 @@ public class DefaultClassMapperTest { assertThat(className, equalTo("Hashtable")); } + @SuppressWarnings("unchecked") + @Test + public void shouldUseDefaultType() { + props.getHeaders().clear(); + classMapper.setDefaultType(Foo.class); + Class clazz = (Class) classMapper.toClass(props); + + assertSame(Foo.class, clazz); + classMapper.setDefaultType(null); + } + private Map> map(String string, Class class1) { Map> map = new HashMap>(); map.put(string, class1); diff --git a/spring-amqp-core/src/test/java/org/springframework/amqp/support/converter/DefaultJavaTypeMapperTest.java b/spring-amqp/src/test/java/org/springframework/amqp/support/converter/DefaultJavaTypeMapperTest.java similarity index 100% rename from spring-amqp-core/src/test/java/org/springframework/amqp/support/converter/DefaultJavaTypeMapperTest.java rename to spring-amqp/src/test/java/org/springframework/amqp/support/converter/DefaultJavaTypeMapperTest.java diff --git a/spring-amqp-core/src/test/java/org/springframework/amqp/support/converter/JsonMessageConverterTests.java b/spring-amqp/src/test/java/org/springframework/amqp/support/converter/JsonMessageConverterTests.java similarity index 78% rename from spring-amqp-core/src/test/java/org/springframework/amqp/support/converter/JsonMessageConverterTests.java rename to spring-amqp/src/test/java/org/springframework/amqp/support/converter/JsonMessageConverterTests.java index 585f841a..af26b9b8 100644 --- a/spring-amqp-core/src/test/java/org/springframework/amqp/support/converter/JsonMessageConverterTests.java +++ b/spring-amqp/src/test/java/org/springframework/amqp/support/converter/JsonMessageConverterTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2010 the original author or authors. Licensed under the Apache License, Version 2.0 (the "License"); + * Copyright 2002-2012 the original author or authors. Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, @@ -10,6 +10,7 @@ package org.springframework.amqp.support.converter; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; import java.math.BigDecimal; import java.util.Hashtable; @@ -18,19 +19,29 @@ import org.codehaus.jackson.map.ObjectMapper; import org.codehaus.jackson.map.ser.BeanSerializerFactory; import org.junit.Before; import org.junit.Test; +import org.junit.runner.RunWith; import org.springframework.amqp.core.Message; import org.springframework.amqp.core.MessageProperties; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; /** * @author Mark Pollack * @author Dave Syer * @author Sam Nelson + * @author Gary Russell */ +@ContextConfiguration +@RunWith(SpringJUnit4ClassRunner.class) public class JsonMessageConverterTests { private JsonMessageConverter converter; private SimpleTrade trade; + @Autowired + private JsonMessageConverter jsonConverterWithDefaultType; + @Before public void before(){ converter = new JsonMessageConverter(); @@ -43,7 +54,7 @@ public class JsonMessageConverterTests { trade.setRequestId("R123"); trade.setTicker("VMW"); trade.setUserName("Joe Trader"); - + } @Test public void simpleTrade() { @@ -58,7 +69,7 @@ public class JsonMessageConverterTests { ObjectMapper mapper = new ObjectMapper(); mapper.setSerializerFactory(BeanSerializerFactory.instance); converter.setJsonObjectMapper(mapper); - + Message message = converter.toMessage(trade, new MessageProperties()); SimpleTrade marshalledTrade = (SimpleTrade) converter.fromMessage(message); @@ -82,25 +93,49 @@ public class JsonMessageConverterTests { Hashtable hashtable = new Hashtable(); hashtable.put("TICKER", "VMW"); hashtable.put("PRICE", "103.2"); - + Message message = converter.toMessage(hashtable, new MessageProperties()); Hashtable marhsalledHashtable = (Hashtable) converter.fromMessage(message); - + assertEquals("VMW", marhsalledHashtable.get("TICKER")); assertEquals("103.2", marhsalledHashtable.get("PRICE")); } - + @Test public void shouldUseClassMapperWhenProvided() { Message message = converter.toMessage(trade, new MessageProperties()); - + converter.setClassMapper(new DefaultClassMapper()); converter.setJavaTypeMapper(null); - + SimpleTrade marshalledTrade = (SimpleTrade) converter.fromMessage(message); assertEquals(trade, marshalledTrade); } + @Test + public void testDefaultType() { + byte[] bytes = "{\"name\" : \"foo\" }".getBytes(); + MessageProperties messageProperties = new MessageProperties(); + messageProperties.setContentType("application/json"); + Message message = new Message(bytes, messageProperties); + JsonMessageConverter converter = new JsonMessageConverter(); + DefaultClassMapper classMapper = new DefaultClassMapper(); + classMapper.setDefaultType(Foo.class); + converter.setClassMapper(classMapper); + Object foo = converter.fromMessage(message); + assertTrue(foo instanceof Foo); + } + + @Test + public void testDefaultTypeConfig() { + byte[] bytes = "{\"name\" : \"foo\" }".getBytes(); + MessageProperties messageProperties = new MessageProperties(); + messageProperties.setContentType("application/json"); + Message message = new Message(bytes, messageProperties); + Object foo = jsonConverterWithDefaultType.fromMessage(message); + assertTrue(foo instanceof Foo); + } + public static class Foo { private String name = "foo"; diff --git a/spring-amqp-core/src/test/java/org/springframework/amqp/support/converter/MarshallingMessageConverterTests.java b/spring-amqp/src/test/java/org/springframework/amqp/support/converter/MarshallingMessageConverterTests.java similarity index 100% rename from spring-amqp-core/src/test/java/org/springframework/amqp/support/converter/MarshallingMessageConverterTests.java rename to spring-amqp/src/test/java/org/springframework/amqp/support/converter/MarshallingMessageConverterTests.java diff --git a/spring-amqp-core/src/test/java/org/springframework/amqp/support/converter/SerializerMessageConverterTests.java b/spring-amqp/src/test/java/org/springframework/amqp/support/converter/SerializerMessageConverterTests.java similarity index 100% rename from spring-amqp-core/src/test/java/org/springframework/amqp/support/converter/SerializerMessageConverterTests.java rename to spring-amqp/src/test/java/org/springframework/amqp/support/converter/SerializerMessageConverterTests.java diff --git a/spring-amqp-core/src/test/java/org/springframework/amqp/support/converter/SimpleMessageConverterTests.java b/spring-amqp/src/test/java/org/springframework/amqp/support/converter/SimpleMessageConverterTests.java similarity index 100% rename from spring-amqp-core/src/test/java/org/springframework/amqp/support/converter/SimpleMessageConverterTests.java rename to spring-amqp/src/test/java/org/springframework/amqp/support/converter/SimpleMessageConverterTests.java diff --git a/spring-amqp-core/src/test/java/org/springframework/amqp/support/converter/SimpleTrade.java b/spring-amqp/src/test/java/org/springframework/amqp/support/converter/SimpleTrade.java similarity index 100% rename from spring-amqp-core/src/test/java/org/springframework/amqp/support/converter/SimpleTrade.java rename to spring-amqp/src/test/java/org/springframework/amqp/support/converter/SimpleTrade.java diff --git a/spring-amqp-core/src/test/resources/log4j.properties b/spring-amqp/src/test/resources/log4j.properties similarity index 100% rename from spring-amqp-core/src/test/resources/log4j.properties rename to spring-amqp/src/test/resources/log4j.properties diff --git a/spring-amqp/src/test/resources/org/springframework/amqp/support/converter/JsonMessageConverterTests-context.xml b/spring-amqp/src/test/resources/org/springframework/amqp/support/converter/JsonMessageConverterTests-context.xml new file mode 100644 index 00000000..1c8c3263 --- /dev/null +++ b/spring-amqp/src/test/resources/org/springframework/amqp/support/converter/JsonMessageConverterTests-context.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + diff --git a/src/reference/docbook/amqp.xml b/src/reference/docbook/amqp.xml index 260efc01..9ae7622a 100644 --- a/src/reference/docbook/amqp.xml +++ b/src/reference/docbook/amqp.xml @@ -742,6 +742,22 @@ Object receiveAndConvert(String queueName) throws AmqpException;]]> ]]> + + As shown above, the JsonMessageConverter uses a + DefaultClassMapper by default. Type information is + added to (and retrieved from) the MessageProperties. + If an inbound message does not contain type information in the + MessageProperties, but you know the expected type, + you can configure a static type using the defaultType property + + + + + + + +]]>