From 5bdbbdfcfb1e0200664e8a2ddcec644928a6d26d Mon Sep 17 00:00:00 2001 From: Brian Clozel Date: Thu, 6 Aug 2020 14:44:14 +0200 Subject: [PATCH] Require RSocket 1.0+ This commit removes the previously deprecated classes in Spring Framework 5.2.x. By doing so, Spring Framework now requires RSocket 1.0+. Closes gh-25548 --- .../ClientRSocketFactoryConfigurer.java | 38 --------------- .../DefaultRSocketRequesterBuilder.java | 21 +-------- .../messaging/rsocket/MetadataEncoder.java | 7 ++- .../messaging/rsocket/RSocketRequester.java | 23 --------- .../support/RSocketMessageHandler.java | 47 ++----------------- .../DefaultRSocketRequesterBuilderTests.java | 5 +- 6 files changed, 9 insertions(+), 132 deletions(-) delete mode 100644 spring-messaging/src/main/java/org/springframework/messaging/rsocket/ClientRSocketFactoryConfigurer.java diff --git a/spring-messaging/src/main/java/org/springframework/messaging/rsocket/ClientRSocketFactoryConfigurer.java b/spring-messaging/src/main/java/org/springframework/messaging/rsocket/ClientRSocketFactoryConfigurer.java deleted file mode 100644 index 0af20045082..00000000000 --- a/spring-messaging/src/main/java/org/springframework/messaging/rsocket/ClientRSocketFactoryConfigurer.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright 2002-2020 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 - * - * https://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, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.messaging.rsocket; - -/** - * Strategy to apply configuration to a client side {@code RSocketFactory}. - * that's being prepared by {@link RSocketRequester.Builder} to connect - * to a server. - * - * @author Rossen Stoyanchev - * @since 5.2 - * @deprecated as of 5.2.6 following the deprecation of - * {@link io.rsocket.RSocketFactory.ClientRSocketFactory RSocketFactory.ClientRSocketFactory} - * in RSocket 1.0 RC7. Please, use {@link RSocketConnectorConfigurer}. - */ -@FunctionalInterface -@Deprecated -public interface ClientRSocketFactoryConfigurer { - - /** - * Apply configuration to the given {@code ClientRSocketFactory}. - */ - void configure(io.rsocket.RSocketFactory.ClientRSocketFactory rsocketFactory); - -} diff --git a/spring-messaging/src/main/java/org/springframework/messaging/rsocket/DefaultRSocketRequesterBuilder.java b/spring-messaging/src/main/java/org/springframework/messaging/rsocket/DefaultRSocketRequesterBuilder.java index d4db41a588b..d1d60b4aac2 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/rsocket/DefaultRSocketRequesterBuilder.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/rsocket/DefaultRSocketRequesterBuilder.java @@ -89,9 +89,6 @@ final class DefaultRSocketRequesterBuilder implements RSocketRequester.Builder { private List rsocketConnectorConfigurers = new ArrayList<>(); - @SuppressWarnings("deprecation") - private List rsocketFactoryConfigurers = new ArrayList<>(); - @Override public RSocketRequester.Builder dataMimeType(@Nullable MimeType mimeType) { @@ -144,13 +141,6 @@ final class DefaultRSocketRequesterBuilder implements RSocketRequester.Builder { return this; } - @Override - @Deprecated - public RSocketRequester.Builder rsocketFactory(ClientRSocketFactoryConfigurer configurer) { - this.rsocketFactoryConfigurers.add(configurer); - return this; - } - @Override public RSocketRequester.Builder apply(Consumer configurer) { configurer.accept(this); @@ -180,7 +170,7 @@ final class DefaultRSocketRequesterBuilder implements RSocketRequester.Builder { Mono setupPayload = getSetupPayload(dataMimeType, metaMimeType, strategies); RSocketConnector connector = initConnector( - this.rsocketConnectorConfigurers, this.rsocketFactoryConfigurers, + this.rsocketConnectorConfigurers, metaMimeType, dataMimeType, setupPayload, strategies); return new DefaultRSocketRequester( @@ -214,7 +204,7 @@ final class DefaultRSocketRequesterBuilder implements RSocketRequester.Builder { Mono setupPayload = getSetupPayload(dataMimeType, metaMimeType, rsocketStrategies); RSocketConnector connector = initConnector( - this.rsocketConnectorConfigurers, this.rsocketFactoryConfigurers, + this.rsocketConnectorConfigurers, metaMimeType, dataMimeType, setupPayload, rsocketStrategies); return connector.connect(transport).map(rsocket -> @@ -304,19 +294,12 @@ final class DefaultRSocketRequesterBuilder implements RSocketRequester.Builder { @SuppressWarnings("deprecation") private RSocketConnector initConnector(List connectorConfigurers, - List factoryConfigurers, MimeType metaMimeType, MimeType dataMimeType, Mono setupPayloadMono, RSocketStrategies rsocketStrategies) { RSocketConnector connector = RSocketConnector.create(); connectorConfigurers.forEach(c -> c.configure(connector)); - if (!factoryConfigurers.isEmpty()) { - io.rsocket.RSocketFactory.ClientRSocketFactory factory = - new io.rsocket.RSocketFactory.ClientRSocketFactory(connector); - factoryConfigurers.forEach(c -> c.configure(factory)); - } - if (rsocketStrategies.dataBufferFactory() instanceof NettyDataBufferFactory) { connector.payloadDecoder(PayloadDecoder.ZERO_COPY); } diff --git a/spring-messaging/src/main/java/org/springframework/messaging/rsocket/MetadataEncoder.java b/spring-messaging/src/main/java/org/springframework/messaging/rsocket/MetadataEncoder.java index dc7455627eb..7e22c01882e 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/rsocket/MetadataEncoder.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/rsocket/MetadataEncoder.java @@ -184,12 +184,12 @@ final class MetadataEncoder { CompositeByteBuf composite = this.allocator.compositeBuffer(); try { if (this.route != null) { - io.rsocket.metadata.CompositeMetadataFlyweight.encodeAndAddMetadata(composite, this.allocator, + io.rsocket.metadata.CompositeMetadataCodec.encodeAndAddMetadata(composite, this.allocator, WellKnownMimeType.MESSAGE_RSOCKET_ROUTING, encodeRoute()); } entries.forEach(entry -> { Object value = entry.value(); - io.rsocket.metadata.CompositeMetadataFlyweight.encodeAndAddMetadata( + io.rsocket.metadata.CompositeMetadataCodec.encodeAndAddMetadata( composite, this.allocator, entry.mimeType().toString(), value instanceof ByteBuf ? (ByteBuf) value : PayloadUtils.asByteBuf(encodeEntry(entry))); }); @@ -219,9 +219,8 @@ final class MetadataEncoder { } } - @SuppressWarnings("deprecation") private ByteBuf encodeRoute() { - return io.rsocket.metadata.TaggingMetadataFlyweight.createRoutingMetadata( + return io.rsocket.metadata.TaggingMetadataCodec.createRoutingMetadata( this.allocator, Collections.singletonList(this.route)).getContent(); } diff --git a/spring-messaging/src/main/java/org/springframework/messaging/rsocket/RSocketRequester.java b/spring-messaging/src/main/java/org/springframework/messaging/rsocket/RSocketRequester.java index 4aa54121c4c..f491b53a5ee 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/rsocket/RSocketRequester.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/rsocket/RSocketRequester.java @@ -215,29 +215,6 @@ public interface RSocketRequester { */ RSocketRequester.Builder rsocketConnector(RSocketConnectorConfigurer configurer); - /** - * Callback to configure the {@code ClientRSocketFactory} directly. - *
    - *
  • The data and metadata mime types cannot be set directly - * on the {@code ClientRSocketFactory} and will be overridden. Use the - * shortcuts {@link #dataMimeType(MimeType)} and - * {@link #metadataMimeType(MimeType)} on this builder instead. - *
  • The frame decoder also cannot be set directly and instead is set - * to match the configured {@code DataBufferFactory}. - *
  • For the - * {@link io.rsocket.RSocketFactory.ClientRSocketFactory#setupPayload(Payload) - * setupPayload}, consider using methods on this builder to specify the - * route, other metadata, and data as Object values to be encoded. - *
  • To configure client side responding, see - * {@link RSocketMessageHandler#clientResponder(RSocketStrategies, Object...)}. - *
- * @deprecated as of 5.2.6 following the deprecation of - * {@link io.rsocket.RSocketFactory.ClientRSocketFactory RSocketFactory.ClientRSocketFactory} - * in RSocket 1.0 RC7. Please, use {@link #rsocketConnector(RSocketConnectorConfigurer)}. - */ - @Deprecated - RSocketRequester.Builder rsocketFactory(ClientRSocketFactoryConfigurer configurer); - /** * Configure this builder through a {@code Consumer}. This enables * libraries such as Spring Security to provide shortcuts for applying diff --git a/spring-messaging/src/main/java/org/springframework/messaging/rsocket/annotation/support/RSocketMessageHandler.java b/spring-messaging/src/main/java/org/springframework/messaging/rsocket/annotation/support/RSocketMessageHandler.java index 890bb3d99c6..27c6ee47e0b 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/rsocket/annotation/support/RSocketMessageHandler.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/rsocket/annotation/support/RSocketMessageHandler.java @@ -330,8 +330,8 @@ public class RSocketMessageHandler extends MessageMappingMessageHandler { List> conditions = composite.getMessageConditions(); Assert.isTrue(conditions.size() == 2 && - conditions.get(0) instanceof RSocketFrameTypeMessageCondition && - conditions.get(1) instanceof DestinationPatternsMessageCondition, + conditions.get(0) instanceof RSocketFrameTypeMessageCondition && + conditions.get(1) instanceof DestinationPatternsMessageCondition, "Unexpected message condition types"); if (conditions.get(0) != RSocketFrameTypeMessageCondition.EMPTY_CONDITION) { @@ -394,7 +394,7 @@ public class RSocketMessageHandler extends MessageMappingMessageHandler { * Return an RSocket {@link SocketAcceptor} backed by this * {@code RSocketMessageHandler} instance that can be plugged in as a * {@link io.rsocket.core.RSocketConnector#acceptor(SocketAcceptor) client} or - * {@link io.rsocket.core.RSocketServer#acceptor(SocketAcceptor) server} + * {@link io.rsocket.core.RSocketServer#acceptor(SocketAcceptor) server} * RSocket responder. *

The initial {@link ConnectionSetupPayload} is handled through * {@link ConnectMapping @ConnectionMapping} methods that can be asynchronous @@ -494,45 +494,4 @@ public class RSocketMessageHandler extends MessageMappingMessageHandler { return handler.responder(); } - /** - * Static factory method for a configurer of a client side responder with - * annotated handler methods. This is intended to be passed into - * {@link org.springframework.messaging.rsocket.RSocketRequester.Builder#rsocketFactory}. - *

In effect a shortcut to create and initialize - * {@code RSocketMessageHandler} with the given strategies and handlers. - * Use {@link #responder()} to obtain the responder and plug that into - * {@link io.rsocket.RSocketFactory.ClientRSocketFactory ClientRSocketFactory}. - * For more advanced scenarios, e.g. discovering handlers through a custom - * stereotype annotation, consider declaring {@code RSocketMessageHandler} - * as a bean, and then obtain the responder from it. - * @param strategies the strategies to set on the created - * {@code RSocketMessageHandler} - * @param candidateHandlers a list of Objects and/or Classes with annotated - * handler methods; used to call {@link #setHandlers(List)} on the created - * {@code RSocketMessageHandler} - * @return a configurer that may be passed into - * {@link org.springframework.messaging.rsocket.RSocketRequester.Builder#rsocketFactory} - * @deprecated as of 5.2.6 following the deprecation of - * {@link io.rsocket.RSocketFactory.ClientRSocketFactory RSocketFactory.ClientRSocketFactory} - * in RSocket 1.0 RC7 - */ - @Deprecated - @SuppressWarnings("deprecation") - public static org.springframework.messaging.rsocket.ClientRSocketFactoryConfigurer clientResponder( - RSocketStrategies strategies, Object... candidateHandlers) { - - Assert.notEmpty(candidateHandlers, "No handlers"); - List handlers = new ArrayList<>(candidateHandlers.length); - for (Object obj : candidateHandlers) { - handlers.add(obj instanceof Class ? BeanUtils.instantiateClass((Class) obj) : obj); - } - - return factory -> { - RSocketMessageHandler handler = new RSocketMessageHandler(); - handler.setHandlers(handlers); - handler.setRSocketStrategies(strategies); - handler.afterPropertiesSet(); - factory.acceptor(handler.responder()); - }; - } } diff --git a/spring-messaging/src/test/java/org/springframework/messaging/rsocket/DefaultRSocketRequesterBuilderTests.java b/spring-messaging/src/test/java/org/springframework/messaging/rsocket/DefaultRSocketRequesterBuilderTests.java index cedee19e87b..56c502b0fe0 100644 --- a/spring-messaging/src/test/java/org/springframework/messaging/rsocket/DefaultRSocketRequesterBuilderTests.java +++ b/spring-messaging/src/test/java/org/springframework/messaging/rsocket/DefaultRSocketRequesterBuilderTests.java @@ -79,20 +79,17 @@ public class DefaultRSocketRequesterBuilderTests { @Test - @SuppressWarnings({"unchecked", "deprecation"}) + @SuppressWarnings("unchecked") public void rsocketConnectorConfigurer() { - ClientRSocketFactoryConfigurer factoryConfigurer = mock(ClientRSocketFactoryConfigurer.class); Consumer strategiesConfigurer = mock(Consumer.class); RSocketRequester.builder() .rsocketConnector(this.connectorConfigurer) - .rsocketFactory(factoryConfigurer) .rsocketStrategies(strategiesConfigurer) .transport(this.transport); // RSocketStrategies and RSocketConnector configurers should have been called verify(strategiesConfigurer).accept(any(RSocketStrategies.Builder.class)); - verify(factoryConfigurer).configure(any(io.rsocket.RSocketFactory.ClientRSocketFactory.class)); assertThat(this.connectorConfigurer.connector()).isNotNull(); }