1
1
package io .scalecube .services .transport .rsocket ;
2
2
3
+ import static io .scalecube .services .transport .rsocket .ReferenceCountUtil .safestRelease ;
3
4
import static java .util .function .Function .identity ;
4
5
import static java .util .stream .Collectors .collectingAndThen ;
5
6
import static java .util .stream .Collectors .toMap ;
@@ -102,7 +103,7 @@ public <T> T encodeAndTransform(
102
103
DataCodec dataCodec = getDataCodec (message .dataFormatOrDefault ());
103
104
dataCodec .encode (new ByteBufOutputStream (dataBuffer ), message .data ());
104
105
} catch (Throwable ex ) {
105
- ReferenceCountUtil . safestRelease (dataBuffer );
106
+ safestRelease (dataBuffer );
106
107
LOGGER .error (
107
108
"Failed to encode service message data on: {}, cause: {}" , message , ex .toString ());
108
109
throw new MessageCodecException ("Failed to encode service message data" , ex );
@@ -114,8 +115,8 @@ public <T> T encodeAndTransform(
114
115
try {
115
116
headersCodec .encode (new ByteBufOutputStream (headersBuffer ), message .headers ());
116
117
} catch (Throwable ex ) {
117
- ReferenceCountUtil . safestRelease (headersBuffer );
118
- ReferenceCountUtil . safestRelease (dataBuffer ); // release data buf as well
118
+ safestRelease (headersBuffer );
119
+ safestRelease (dataBuffer ); // release data buf as well
119
120
LOGGER .error (
120
121
"Failed to encode service message headers on: {}, cause: {}" , message , ex .toString ());
121
122
throw new MessageCodecException ("Failed to encode service message headers" , ex );
@@ -144,7 +145,7 @@ public ServiceMessage decode(ByteBuf dataBuffer, ByteBuf headersBuffer)
144
145
try (ByteBufInputStream stream = new ByteBufInputStream (headersBuffer , true )) {
145
146
builder .headers (headersCodec .decode (stream ));
146
147
} catch (Throwable ex ) {
147
- ReferenceCountUtil . safestRelease (dataBuffer ); // release data buf as well
148
+ safestRelease (dataBuffer ); // release data buf as well
148
149
throw new MessageCodecException ("Failed to decode service message headers" , ex );
149
150
}
150
151
}
@@ -163,12 +164,15 @@ public ServiceMessage decode(ByteBuf dataBuffer, ByteBuf headersBuffer)
163
164
*/
164
165
public static ServiceMessage decodeData (ServiceMessage message , Type dataType )
165
166
throws MessageCodecException {
166
- if (dataType == null || !message .hasData (ByteBuf .class )) {
167
+ if (dataType == null
168
+ || dataType == ByteBuf .class
169
+ || message .data () == null
170
+ || !(message .data () instanceof ByteBuf )) {
167
171
return message ;
168
172
}
169
173
170
174
final ByteBuf dataBuffer = message .data ();
171
- if (dataBuffer .readableBytes () == 0 || dataType == ByteBuf . class ) {
175
+ if (dataBuffer .readableBytes () == 0 ) {
172
176
return message ;
173
177
}
174
178
if (dataType == byte [].class ) {
@@ -177,17 +181,14 @@ public static ServiceMessage decodeData(ServiceMessage message, Type dataType)
177
181
return ServiceMessage .from (message ).data (bytes ).build ();
178
182
}
179
183
180
- Object data ;
181
- Type targetType = message .isError () ? ErrorData .class : dataType ;
182
-
183
184
try (ByteBufInputStream inputStream = new ByteBufInputStream (dataBuffer , true )) {
184
- DataCodec dataCodec = DataCodec .getInstance (message .dataFormatOrDefault ());
185
- data = dataCodec .decode (inputStream , targetType );
185
+ final var targetType = message .isError () ? ErrorData .class : dataType ;
186
+ final var dataCodec = DataCodec .getInstance (message .dataFormatOrDefault ());
187
+ final var decodedData = dataCodec .decode (inputStream , targetType );
188
+ return ServiceMessage .from (message ).data (decodedData ).build ();
186
189
} catch (Throwable ex ) {
187
190
throw new MessageCodecException ("Failed to decode service message data" , ex );
188
191
}
189
-
190
- return ServiceMessage .from (message ).data (data ).build ();
191
192
}
192
193
193
194
private DataCodec getDataCodec (String contentType ) {
0 commit comments