dataCodec.encode(new ByteBufOutputStream(dataBuffer), message.data()); } catch (Throwable ex) { ReferenceCountUtil.safestRelease(dataBuffer); LOGGER.error("Failed to encode data on: {}, cause: {}", message, ex); throw new MessageCodecException( headersCodec.encode(new ByteBufOutputStream(headersBuffer), message.headers()); } catch (Throwable ex) { ReferenceCountUtil.safestRelease(headersBuffer); ReferenceCountUtil.safestRelease(dataBuffer); // release data buf as well LOGGER.error("Failed to encode headers on: {}, cause: {}", message, ex); throw new MessageCodecException(
/** * Decode buffers. * * @param dataBuffer the buffer of the data (payload) * @param headersBuffer the buffer of the headers * @return a new Service message with {@link ByteBuf} data and with parsed headers. * @throws MessageCodecException when decode fails */ public ServiceMessage decode(ByteBuf dataBuffer, ByteBuf headersBuffer) throws MessageCodecException { ServiceMessage.Builder builder = ServiceMessage.builder(); if (dataBuffer.isReadable()) { builder.data(dataBuffer); } if (headersBuffer.isReadable()) { try (ByteBufInputStream stream = new ByteBufInputStream(headersBuffer, true)) { builder.headers(headersCodec.decode(stream)); } catch (Throwable ex) { ReferenceCountUtil.safestRelease(dataBuffer); // release data buf as well throw new MessageCodecException("Failed to decode message headers", ex); } } return builder.build(); }