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
diff --git a/lib/java/src/org/apache/thrift/TUnion.java b/lib/java/src/org/apache/thrift/TUnion.java
index e33c7f2..cfe910b 100644
--- a/lib/java/src/org/apache/thrift/TUnion.java
+++ b/lib/java/src/org/apache/thrift/TUnion.java
@@ -104,7 +104,7 @@
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 boolean isSet() {
return setField_ != null;
}
-
+
public boolean isSet(F fieldId) {
return setField_ == fieldId;
}
@@ -193,35 +193,22 @@
@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();
+ sb.append(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(" ");
- }
- 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 a9cb9c5..775db52 100644
--- a/lib/java/test/org/apache/thrift/TestTUnion.java
+++ b/lib/java/test/org/apache/thrift/TestTUnion.java
@@ -192,4 +192,12 @@
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 = "<ComparableUnion binary_field:01 02 03>";
+ assertEquals(expectedString, cu.toString());
+ }
}