Author: bryanduxbury
Date: Thu Dec 2 21:29:20 2010
New Revision: 1041590
URL: http://svn.apache.org/viewvc?rev=1041590&view=rev
Log:
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
Modified:
thrift/trunk/lib/java/src/org/apache/thrift/TUnion.java
thrift/trunk/lib/java/test/org/apache/thrift/TestTUnion.java
Modified: thrift/trunk/lib/java/src/org/apache/thrift/TUnion.java
URL:
http://svn.apache.org/viewvc/thrift/trunk/lib/java/src/org/apache/thrift/TUnion.java?rev=1041590&r1=1041589&r2=1041590&view=diff
==============================================================================
--- thrift/trunk/lib/java/src/org/apache/thrift/TUnion.java (original)
+++ thrift/trunk/lib/java/src/org/apache/thrift/TUnion.java Thu Dec 2 21:29:20
2010
@@ -104,7 +104,7 @@ public abstract class TUnion<T extends T
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<T extends T
public boolean isSet() {
return setField_ != null;
}
-
+
public boolean isSet(F fieldId) {
return setField_ == fieldId;
}
@@ -193,35 +193,22 @@ public abstract class TUnion<T extends T
@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();
}
Modified: thrift/trunk/lib/java/test/org/apache/thrift/TestTUnion.java
URL:
http://svn.apache.org/viewvc/thrift/trunk/lib/java/test/org/apache/thrift/TestTUnion.java?rev=1041590&r1=1041589&r2=1041590&view=diff
==============================================================================
--- thrift/trunk/lib/java/test/org/apache/thrift/TestTUnion.java (original)
+++ thrift/trunk/lib/java/test/org/apache/thrift/TestTUnion.java Thu Dec 2
21:29:20 2010
@@ -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 = "<ComparableUnion binary_field:01 02 03>";
+ assertEquals(expectedString, cu.toString());
+ }
}