public StringBuilder appendTo(final StringBuilder builder) { ErrorResponseDecoder writer = new ErrorResponseDecoder(); writer.wrap(buffer, offset, BLOCK_LENGTH, SCHEMA_VERSION); return writer.appendTo(builder); } }
public StringBuilder appendTo(final StringBuilder builder) { ErrorResponseDecoder writer = new ErrorResponseDecoder(); writer.wrap(buffer, offset, BLOCK_LENGTH, SCHEMA_VERSION); return writer.appendTo(builder); } }
public void wrap(DirectBuffer body, int offset, int length, int version) { decoder.wrap(body, offset, length, version); final int errorDataLength = decoder.errorDataLength(); final byte[] errorData = new byte[errorDataLength]; decoder.getErrorData(errorData, 0, errorDataLength); this.errorMessage = BufferUtil.wrapArray(errorData); }
@Override public void wrap(DirectBuffer responseBuffer, int offset, int length) { messageHeaderDecoder.wrap(responseBuffer, 0); if (messageHeaderDecoder.templateId() != bodyDecoder.sbeTemplateId()) { throw new RuntimeException("Unexpected response from broker."); } bodyDecoder.wrap( responseBuffer, messageHeaderDecoder.encodedLength(), messageHeaderDecoder.blockLength(), messageHeaderDecoder.version()); final int errorDataLength = bodyDecoder.errorDataLength(); final int errorDataOffset = messageHeaderDecoder.encodedLength() + messageHeaderDecoder.blockLength() + ErrorResponseDecoder.errorDataHeaderLength(); errorData = responseBuffer.getStringWithoutLengthUtf8(errorDataOffset, errorDataLength); bodyDecoder.limit(errorDataOffset + errorDataLength); } }
@Test public void shouldWriteResponse() { responseWriter.errorCode(ErrorCode.PARTITION_LEADER_MISMATCH).errorMessage("error message"); final UnsafeBuffer buf = new UnsafeBuffer(new byte[responseWriter.getLength()]); // when responseWriter.write(buf, 0); // then int offset = 0; messageHeaderDecoder.wrap(buf, offset); assertThat(messageHeaderDecoder.schemaId()).isEqualTo(responseDecoder.sbeSchemaId()); assertThat(messageHeaderDecoder.version()).isEqualTo(responseDecoder.sbeSchemaVersion()); assertThat(messageHeaderDecoder.templateId()).isEqualTo(responseDecoder.sbeTemplateId()); assertThat(messageHeaderDecoder.blockLength()).isEqualTo(responseDecoder.sbeBlockLength()); offset += messageHeaderDecoder.encodedLength(); responseDecoder.wrap( buf, offset, responseDecoder.sbeBlockLength(), responseDecoder.sbeSchemaVersion()); assertThat(responseDecoder.errorCode()).isEqualTo(ErrorCode.PARTITION_LEADER_MISMATCH); assertThat(responseDecoder.errorData()).isEqualTo("error message"); } }
@Override public void wrap(DirectBuffer responseBuffer, int offset, int length) { messageHeaderDecoder.wrap(responseBuffer, 0); if (messageHeaderDecoder.templateId() != bodyDecoder.sbeTemplateId()) { throw new RuntimeException("Unexpected response from broker."); } bodyDecoder.wrap( responseBuffer, messageHeaderDecoder.encodedLength(), messageHeaderDecoder.blockLength(), messageHeaderDecoder.version()); final int errorDataLength = bodyDecoder.errorDataLength(); final int errorDataOffset = messageHeaderDecoder.encodedLength() + messageHeaderDecoder.blockLength() + ErrorResponseDecoder.errorDataHeaderLength(); errorData = responseBuffer.getStringWithoutLengthUtf8(errorDataOffset, errorDataLength); bodyDecoder.limit(errorDataOffset + errorDataLength); } }
@Test public void shouldWriteResponse() { responseWriter.errorCode(ErrorCode.PARTITION_LEADER_MISMATCH).errorMessage("error message"); final UnsafeBuffer buf = new UnsafeBuffer(new byte[responseWriter.getLength()]); // when responseWriter.write(buf, 0); // then int offset = 0; messageHeaderDecoder.wrap(buf, offset); assertThat(messageHeaderDecoder.schemaId()).isEqualTo(responseDecoder.sbeSchemaId()); assertThat(messageHeaderDecoder.version()).isEqualTo(responseDecoder.sbeSchemaVersion()); assertThat(messageHeaderDecoder.templateId()).isEqualTo(responseDecoder.sbeTemplateId()); assertThat(messageHeaderDecoder.blockLength()).isEqualTo(responseDecoder.sbeBlockLength()); offset += messageHeaderDecoder.encodedLength(); responseDecoder.wrap( buf, offset, responseDecoder.sbeBlockLength(), responseDecoder.sbeSchemaVersion()); assertThat(responseDecoder.errorCode()).isEqualTo(ErrorCode.PARTITION_LEADER_MISMATCH); assertThat(responseDecoder.errorData()).isEqualTo("error message"); } }
@Override public void wrap(DirectBuffer buffer, int offset, int length) { reset(); final int frameEnd = offset + length; headerDecoder.wrap(buffer, offset); offset += headerDecoder.encodedLength(); bodyDecoder.wrap(buffer, offset, headerDecoder.blockLength(), headerDecoder.version()); errorCode = bodyDecoder.errorCode(); offset += bodyDecoder.sbeBlockLength(); final int errorDataLength = bodyDecoder.errorDataLength(); offset += ErrorResponseDecoder.errorDataHeaderLength(); errorData.wrap(buffer, offset, errorDataLength); offset += errorDataLength; bodyDecoder.limit(offset); assert bodyDecoder.limit() == frameEnd : "Decoder read only to position " + bodyDecoder.limit() + " but expected " + frameEnd + " as final position"; }