From 6fd8d1dba731e3119ee2aea433e67a32f01341ba Mon Sep 17 00:00:00 2001 From: Gary Russell Date: Tue, 26 Nov 2013 09:28:41 -0500 Subject: [PATCH] Update to Spring 4 Build Snapshot - IdGenerator package change - Generics added to CollectionUtils.arrayToList() --- build.gradle | 4 +- .../integration/MessageHeaders.java | 69 +------------------ .../config/IdGeneratorConfigurer.java | 2 +- .../integration/support/IdGenerators.java | 3 +- .../xml/IdGeneratorConfigurerTests.java | 3 +- .../core/MessageIdGenerationTests.java | 2 +- ...licationEventListeningMessageProducer.java | 6 +- ...nnectionEventListeningMessageProducer.java | 5 +- .../security/SecurityTestUtils.java | 7 +- .../XmlValidatingMessageSelector.java | 13 ++-- 10 files changed, 27 insertions(+), 87 deletions(-) diff --git a/build.gradle b/build.gradle index 4a22098623..1713e065f0 100644 --- a/build.gradle +++ b/build.gradle @@ -25,7 +25,7 @@ allprojects { group = 'org.springframework.integration' repositories { - maven { url 'http://repo.springsource.org/libs-milestone' } + maven { url 'http://repo.springsource.org/libs-snapshot' } maven { url 'http://repo.springsource.org/plugins-release' } mavenCentral() } @@ -59,7 +59,7 @@ subprojects { subproject -> ftpServerVersion = '1.0.6' - springVersionDefault = '4.0.0.RC1' + springVersionDefault = '4.0.0.BUILD-SNAPSHOT' springVersion = project.hasProperty('springVersion') ? getProperty('springVersion') : springVersionDefault springAmqpVersion = '1.2.0.RELEASE' diff --git a/spring-integration-core/src/main/java/org/springframework/integration/MessageHeaders.java b/spring-integration-core/src/main/java/org/springframework/integration/MessageHeaders.java index 823250c98a..4f9b4789e7 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/MessageHeaders.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/MessageHeaders.java @@ -20,22 +20,21 @@ import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; -import java.math.BigInteger; -import java.security.SecureRandom; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.Random; import java.util.Set; import java.util.UUID; -import java.util.concurrent.atomic.AtomicLong; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.springframework.util.AlternativeJdkIdGenerator; +import org.springframework.util.IdGenerator; + /** * The headers for a {@link Message}.
* IMPORTANT: MessageHeaders are immutable. Any mutating operation (e.g., put(..), putAll(..) etc.) @@ -271,66 +270,4 @@ public final class MessageHeaders implements Map, Serializable { in.defaultReadObject(); } - public static interface IdGenerator { - UUID generateId(); - } - - public static class JdkIdGenerator implements IdGenerator { - - @Override - public UUID generateId() { - return UUID.randomUUID(); - } - - } - - /** - * A variation of {@link UUID#randomUUID()} that uses {@link SecureRandom} only for - * the initial seed and {@link Random} thereafter, which provides better performance - * in exchange for less securely random id's. - */ - public static class AlternativeJdkIdGenerator implements IdGenerator { - - private final Random random; - - public AlternativeJdkIdGenerator() { - byte[] seed = new SecureRandom().generateSeed(8); - this.random = new Random(new BigInteger(seed).longValue()); - } - - public UUID generateId() { - - byte[] randomBytes = new byte[16]; - this.random.nextBytes(randomBytes); - - long mostSigBits = 0; - for (int i = 0; i < 8; i++) { - mostSigBits = (mostSigBits << 8) | (randomBytes[i] & 0xff); - } - long leastSigBits = 0; - for (int i = 8; i < 16; i++) { - leastSigBits = (leastSigBits << 8) | (randomBytes[i] & 0xff); - } - - return new UUID(mostSigBits, leastSigBits); - } - } - - public static class SimpleIncrementingIdGenerator implements IdGenerator { - - private final AtomicLong topBits = new AtomicLong(); - - private final AtomicLong bottomBits = new AtomicLong(); - - @Override - public UUID generateId() { - long bottomBits = this.bottomBits.incrementAndGet(); - if (bottomBits == 0) { - this.topBits.incrementAndGet(); - } - return new UUID(this.topBits.get(), bottomBits); - } - - } - } diff --git a/spring-integration-core/src/main/java/org/springframework/integration/config/IdGeneratorConfigurer.java b/spring-integration-core/src/main/java/org/springframework/integration/config/IdGeneratorConfigurer.java index f0186c8972..2df11d8036 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/config/IdGeneratorConfigurer.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/config/IdGeneratorConfigurer.java @@ -31,7 +31,7 @@ import org.springframework.context.event.ApplicationContextEvent; import org.springframework.context.event.ContextClosedEvent; import org.springframework.context.event.ContextRefreshedEvent; import org.springframework.messaging.MessageHeaders; -import org.springframework.messaging.MessageHeaders.IdGenerator; +import org.springframework.util.IdGenerator; import org.springframework.util.ReflectionUtils; /** diff --git a/spring-integration-core/src/main/java/org/springframework/integration/support/IdGenerators.java b/spring-integration-core/src/main/java/org/springframework/integration/support/IdGenerators.java index 8f51603f2d..0dd338f71d 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/support/IdGenerators.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/support/IdGenerators.java @@ -19,7 +19,8 @@ package org.springframework.integration.support; import java.util.UUID; import java.util.concurrent.atomic.AtomicLong; -import org.springframework.messaging.MessageHeaders.IdGenerator; +import org.springframework.util.IdGenerator; + // TODO Discuss and agree where these should go. In SI or in Spring 4? /** diff --git a/spring-integration-core/src/test/java/org/springframework/integration/config/xml/IdGeneratorConfigurerTests.java b/spring-integration-core/src/test/java/org/springframework/integration/config/xml/IdGeneratorConfigurerTests.java index 0bcb282c4a..5dc97e79fe 100644 --- a/spring-integration-core/src/test/java/org/springframework/integration/config/xml/IdGeneratorConfigurerTests.java +++ b/spring-integration-core/src/test/java/org/springframework/integration/config/xml/IdGeneratorConfigurerTests.java @@ -25,6 +25,7 @@ import java.util.UUID; import java.util.concurrent.atomic.AtomicLong; import org.junit.Test; + import org.springframework.beans.factory.BeanDefinitionStoreException; import org.springframework.beans.factory.support.RootBeanDefinition; import org.springframework.context.support.GenericApplicationContext; @@ -32,7 +33,7 @@ import org.springframework.integration.support.IdGenerators.JdkIdGenerator; import org.springframework.integration.support.IdGenerators.SimpleIncrementingIdGenerator; import org.springframework.integration.test.util.TestUtils; import org.springframework.messaging.MessageHeaders; -import org.springframework.messaging.MessageHeaders.IdGenerator; +import org.springframework.util.IdGenerator; /** * @author Gary Russell diff --git a/spring-integration-core/src/test/java/org/springframework/integration/core/MessageIdGenerationTests.java b/spring-integration-core/src/test/java/org/springframework/integration/core/MessageIdGenerationTests.java index fff47d908d..0eedc39f7d 100644 --- a/spring-integration-core/src/test/java/org/springframework/integration/core/MessageIdGenerationTests.java +++ b/spring-integration-core/src/test/java/org/springframework/integration/core/MessageIdGenerationTests.java @@ -31,8 +31,8 @@ import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.context.support.GenericXmlApplicationContext; import org.springframework.messaging.MessageChannel; import org.springframework.messaging.MessageHeaders; -import org.springframework.messaging.MessageHeaders.IdGenerator; import org.springframework.messaging.support.GenericMessage; +import org.springframework.util.IdGenerator; import org.springframework.util.ReflectionUtils; import org.springframework.util.StopWatch; diff --git a/spring-integration-event/src/main/java/org/springframework/integration/event/inbound/ApplicationEventListeningMessageProducer.java b/spring-integration-event/src/main/java/org/springframework/integration/event/inbound/ApplicationEventListeningMessageProducer.java index 77dbac0d28..9794637c67 100644 --- a/spring-integration-event/src/main/java/org/springframework/integration/event/inbound/ApplicationEventListeningMessageProducer.java +++ b/spring-integration-event/src/main/java/org/springframework/integration/event/inbound/ApplicationEventListeningMessageProducer.java @@ -27,9 +27,9 @@ import org.springframework.context.event.ContextStoppedEvent; import org.springframework.context.event.SmartApplicationListener; import org.springframework.context.support.AbstractApplicationContext; import org.springframework.core.Ordered; -import org.springframework.messaging.Message; import org.springframework.integration.endpoint.ExpressionMessageProducerSupport; import org.springframework.integration.support.MessageBuilder; +import org.springframework.messaging.Message; import org.springframework.util.Assert; import org.springframework.util.CollectionUtils; @@ -69,9 +69,9 @@ public class ApplicationEventListeningMessageProducer extends ExpressionMessageP * @see ApplicationEventMulticaster#addApplicationListener * @see #supportsEventType */ - @SuppressWarnings("unchecked") public void setEventTypes(Class... eventTypes) { - Set> eventSet = new HashSet>(CollectionUtils.arrayToList(eventTypes)); + Set> eventSet = new HashSet>( + CollectionUtils.> arrayToList(eventTypes)); eventSet.remove(null); this.eventTypes = (eventSet.size() > 0 ? eventSet : null); diff --git a/spring-integration-ip/src/main/java/org/springframework/integration/ip/tcp/connection/TcpConnectionEventListeningMessageProducer.java b/spring-integration-ip/src/main/java/org/springframework/integration/ip/tcp/connection/TcpConnectionEventListeningMessageProducer.java index 8ab90b2846..8450cff349 100644 --- a/spring-integration-ip/src/main/java/org/springframework/integration/ip/tcp/connection/TcpConnectionEventListeningMessageProducer.java +++ b/spring-integration-ip/src/main/java/org/springframework/integration/ip/tcp/connection/TcpConnectionEventListeningMessageProducer.java @@ -19,10 +19,10 @@ import java.util.HashSet; import java.util.Set; import org.springframework.context.ApplicationListener; -import org.springframework.messaging.Message; import org.springframework.integration.core.MessageProducer; import org.springframework.integration.endpoint.MessageProducerSupport; import org.springframework.integration.support.MessageBuilder; +import org.springframework.messaging.Message; import org.springframework.util.Assert; import org.springframework.util.CollectionUtils; @@ -44,11 +44,10 @@ public class TcpConnectionEventListeningMessageProducer extends MessageProducerS * this adapter should send to the message channel. By default, all event * types will be sent. */ - @SuppressWarnings("unchecked") public void setEventTypes(Class[] eventTypes) { Assert.notEmpty(eventTypes, "at least one event type is required"); Set> eventTypeSet = new HashSet>(); - eventTypeSet.addAll(CollectionUtils.arrayToList(eventTypes)); + eventTypeSet.addAll(CollectionUtils.> arrayToList(eventTypes)); this.eventTypes = eventTypeSet; } diff --git a/spring-integration-security/src/test/java/org/springframework/integration/security/SecurityTestUtils.java b/spring-integration-security/src/test/java/org/springframework/integration/security/SecurityTestUtils.java index b7bfd4fb78..5018ec11d0 100644 --- a/spring-integration-security/src/test/java/org/springframework/integration/security/SecurityTestUtils.java +++ b/spring-integration-security/src/test/java/org/springframework/integration/security/SecurityTestUtils.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2011 the original author or authors. + * Copyright 2002-2013 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. @@ -26,10 +26,10 @@ import org.springframework.util.CollectionUtils; /** * @author Jonas Partner * @author Oleg Zhurakousky + * @author Gary Russell */ public class SecurityTestUtils { - @SuppressWarnings("unchecked") public static SecurityContext createContext(String username, String password, String... roles) { SecurityContextImpl ctxImpl = new SecurityContextImpl(); UsernamePasswordAuthenticationToken authToken; @@ -38,7 +38,8 @@ public class SecurityTestUtils { for (int i = 0; i < roles.length; i++) { authorities[i] = new SimpleGrantedAuthority(roles[i]); } - authToken = new UsernamePasswordAuthenticationToken(username, password, CollectionUtils.arrayToList(authorities)); + authToken = new UsernamePasswordAuthenticationToken(username, password, + CollectionUtils. arrayToList(authorities)); } else { authToken = new UsernamePasswordAuthenticationToken(username, password); diff --git a/spring-integration-xml/src/main/java/org/springframework/integration/xml/selector/XmlValidatingMessageSelector.java b/spring-integration-xml/src/main/java/org/springframework/integration/xml/selector/XmlValidatingMessageSelector.java index 1a37e8ec87..1f84e121a1 100644 --- a/spring-integration-xml/src/main/java/org/springframework/integration/xml/selector/XmlValidatingMessageSelector.java +++ b/spring-integration-xml/src/main/java/org/springframework/integration/xml/selector/XmlValidatingMessageSelector.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2010 the original author or authors. + * Copyright 2002-2013 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. @@ -23,13 +23,13 @@ import org.apache.commons.logging.LogFactory; import org.xml.sax.SAXParseException; import org.springframework.core.io.Resource; -import org.springframework.messaging.Message; import org.springframework.integration.MessageHandlingException; import org.springframework.integration.MessageRejectedException; import org.springframework.integration.core.MessageSelector; import org.springframework.integration.xml.AggregatedXmlMessageValidationException; import org.springframework.integration.xml.DefaultXmlPayloadConverter; import org.springframework.integration.xml.XmlPayloadConverter; +import org.springframework.messaging.Message; import org.springframework.util.Assert; import org.springframework.util.CollectionUtils; import org.springframework.util.ObjectUtils; @@ -39,6 +39,7 @@ import org.springframework.xml.validation.XmlValidatorFactory; /** * @author Oleg Zhurakousky + * @author Gary Russell * @since 2.0 */ public class XmlValidatingMessageSelector implements MessageSelector { @@ -62,7 +63,7 @@ public class XmlValidatingMessageSelector implements MessageSelector { * the provided 'schema' location {@link Resource} and 'schemaType'. The valid options for schema * type are {@link XmlValidatorFactory#SCHEMA_W3C_XML} or {@link XmlValidatorFactory#SCHEMA_RELAX_NG}. * If no 'schemaType' is provided it will default to {@link XmlValidatorFactory#SCHEMA_W3C_XML}; - * + * * @throws IOException if the XmlValidatorFactory fails to create a validator */ public XmlValidatingMessageSelector(Resource schema, String schemaType) throws IOException { @@ -86,7 +87,6 @@ public class XmlValidatingMessageSelector implements MessageSelector { this.converter = converter; } - @SuppressWarnings("unchecked") public boolean accept(Message message) { SAXParseException[] validationExceptions = null; try { @@ -98,8 +98,9 @@ public class XmlValidatingMessageSelector implements MessageSelector { boolean validationSuccess = ObjectUtils.isEmpty(validationExceptions); if (!validationSuccess) { if (this.throwExceptionOnRejection) { - throw new MessageRejectedException(message, "Message was rejected due to XML Validation errors", - new AggregatedXmlMessageValidationException(CollectionUtils.arrayToList(validationExceptions))); + throw new MessageRejectedException(message, "Message was rejected due to XML Validation errors", + new AggregatedXmlMessageValidationException( + CollectionUtils. arrayToList(validationExceptions))); } if (logger.isDebugEnabled()) { logger.debug("Message was rejected due to XML Validation errors");