From 22903cb542d16cb12bb848dfa6eabee26f0d1eb1 Mon Sep 17 00:00:00 2001 From: Bryan Duxbury Date: Thu, 2 Dec 2010 21:29:20 +0000 Subject: [PATCH] THRIFT-1015. java: TUnion does not handle ByteBuffer in toString This patch adds a test case and fixes the toString method of TBaseHelper for ByteBuffers. Patch: Takashi Yonebayashi git-svn-id: https://svn.apache.org/repos/asf/thrift/trunk@1041590 13f79535-47bb-0310-9956-ffa450edef68 --- lib/java/src/org/apache/thrift/TUnion.java | 37 ++++++------------- .../test/org/apache/thrift/TestTUnion.java | 8 ++++ 2 files changed, 20 insertions(+), 25 deletions(-) diff --git a/lib/java/src/org/apache/thrift/TUnion.java b/lib/java/src/org/apache/thrift/TUnion.java index e33c7f21..cfe910b1 100644 --- a/lib/java/src/org/apache/thrift/TUnion.java +++ b/lib/java/src/org/apache/thrift/TUnion.java @@ -104,7 +104,7 @@ public abstract class TUnion implement if (fieldId != setField_) { throw new IllegalArgumentException("Cannot get the value of field " + fieldId + " because union's set field is " + setField_); } - + return getFieldValue(); } @@ -115,7 +115,7 @@ public abstract class TUnion implement public boolean isSet() { return setField_ != null; } - + public boolean isSet(F fieldId) { return setField_ == fieldId; } @@ -193,35 +193,22 @@ public abstract class TUnion implement @Override public String toString() { - String result = "<" + this.getClass().getSimpleName() + " "; + StringBuilder sb = new StringBuilder(); + sb.append("<"); + sb.append(this.getClass().getSimpleName()); + sb.append(" "); if (getSetField() != null) { Object v = getFieldValue(); - String vStr = null; - if (v instanceof byte[]) { - vStr = bytesToStr((byte[])v); + sb.append(getFieldDesc(getSetField()).name); + sb.append(":"); + if(v instanceof ByteBuffer) { + TBaseHelper.toString((ByteBuffer)v, sb); } else { - vStr = v.toString(); - } - result += getFieldDesc(getSetField()).name + ":" + vStr; - } - - return result + ">"; - } - - private static String bytesToStr(byte[] bytes) { - StringBuilder sb = new StringBuilder(); - int size = Math.min(bytes.length, 128); - for (int i = 0; i < size; i++) { - if (i != 0) { - sb.append(" "); + sb.append(v.toString()); } - String digit = Integer.toHexString(bytes[i] & 0xFF); - sb.append(digit.length() > 1 ? digit : "0" + digit); - } - if (bytes.length > 128) { - sb.append(" ..."); } + sb.append(">"); return sb.toString(); } diff --git a/lib/java/test/org/apache/thrift/TestTUnion.java b/lib/java/test/org/apache/thrift/TestTUnion.java index a9cb9c56..775db521 100644 --- a/lib/java/test/org/apache/thrift/TestTUnion.java +++ b/lib/java/test/org/apache/thrift/TestTUnion.java @@ -192,4 +192,12 @@ public class TestTUnion extends TestCase { assertEquals(cu, copy); assertNotSame(cu.bufferForBinary_field().array(), copy.bufferForBinary_field().array()); } + + public void testToString() throws Exception { + byte[] bytes = {1, 2, 3}; + ByteBuffer value = ByteBuffer.wrap(bytes); + ComparableUnion cu = ComparableUnion.binary_field(value); + String expectedString = ""; + assertEquals(expectedString, cu.toString()); + } } -- 2.17.1