Skip to content

Commit 92fee71

Browse files
committed
Make MessagePackParser#getEmbeddedObject return MessagePackExtendedType
1 parent 5eb36e1 commit 92fee71

File tree

4 files changed

+101
-7
lines changed

4 files changed

+101
-7
lines changed
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package org.msgpack.jackson.dataformat;
2+
3+
import java.nio.ByteBuffer;
4+
5+
/**
6+
* Created by komamitsu on 3/7/15.
7+
*/
8+
public class MessagePackExtendedType {
9+
private final int extType;
10+
private final ByteBuffer byteBuffer;
11+
12+
public MessagePackExtendedType(int extType, ByteBuffer byteBuffer) {
13+
this.extType = extType;
14+
this.byteBuffer = byteBuffer.isReadOnly() ?
15+
byteBuffer : byteBuffer.asReadOnlyBuffer();
16+
}
17+
18+
public int extType() {
19+
return extType;
20+
}
21+
22+
public ByteBuffer byteBuffer() {
23+
return byteBuffer;
24+
}
25+
}

msgpack-jackson/src/main/java/org/msgpack/jackson/dataformat/MessagePackParser.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import org.msgpack.core.buffer.ArrayBufferInput;
1111
import org.msgpack.core.buffer.InputStreamBufferInput;
1212
import org.msgpack.core.buffer.MessageBufferInput;
13+
import org.msgpack.value.ExtendedValue;
1314
import org.msgpack.value.ValueRef;
1415
import org.msgpack.value.NumberValue;
1516
import org.msgpack.value.ValueType;
@@ -272,11 +273,14 @@ public Object getEmbeddedObject() throws IOException, JsonParseException {
272273
ValueRef ref = valueHolder.getRef();
273274

274275
if (ref.isBinary()) {
275-
return ref.asBinary().toByteArray();
276+
return ref.asBinary().toByteArray();
276277
} else if (ref.isExtended()) {
277-
return ref.asExtended().toValue();
278+
ExtendedValue extendedValue = ref.asExtended().toValue();
279+
MessagePackExtendedType extendedType =
280+
new MessagePackExtendedType(extendedValue.getExtType(), extendedValue.toByteBuffer());
281+
return extendedType;
278282
} else {
279-
throw new UnsupportedOperationException();
283+
throw new UnsupportedOperationException();
280284
}
281285
}
282286

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package org.msgpack.jackson.dataformat;
2+
3+
import org.junit.Test;
4+
5+
import java.nio.ByteBuffer;
6+
7+
import static org.junit.Assert.*;
8+
9+
public class MessagePackExtendedTypeTest {
10+
private void assertExtendedType(MessagePackExtendedType x,
11+
int expectedExtType, ByteBuffer expectedByteBuffer) {
12+
assertEquals(expectedExtType, x.extType());
13+
assertEquals(expectedByteBuffer, x.byteBuffer());
14+
assertTrue(x.byteBuffer().isReadOnly());
15+
}
16+
17+
@Test
18+
public void testMessagePackExtendedType() {
19+
byte[] bs = new byte[] {0x00, (byte) 0xCC, (byte) 0xFF};
20+
ByteBuffer expectedByteBuffer = ByteBuffer.wrap(bs);
21+
22+
int extType = 1;
23+
MessagePackExtendedType extendedType =
24+
new MessagePackExtendedType(extType, ByteBuffer.wrap(bs));
25+
assertExtendedType(extendedType, extType, expectedByteBuffer);
26+
27+
extType = 2;
28+
ByteBuffer bb = ByteBuffer.allocate(3);
29+
bb.put(bs);
30+
bb.position(0);
31+
extendedType = new MessagePackExtendedType(extType, bb);
32+
assertExtendedType(extendedType, extType, expectedByteBuffer);
33+
34+
extType = 3;
35+
bb = ByteBuffer.allocateDirect(3);
36+
bb.put(bs);
37+
bb.position(0);
38+
extendedType = new MessagePackExtendedType(extType, bb);
39+
assertExtendedType(extendedType, extType, expectedByteBuffer);
40+
41+
extType = -1;
42+
extendedType =
43+
new MessagePackExtendedType(extType, ByteBuffer.wrap(bs).asReadOnlyBuffer());
44+
assertExtendedType(extendedType, extType, expectedByteBuffer);
45+
46+
extType = -2;
47+
bb = ByteBuffer.allocate(3);
48+
bb.put(bs);
49+
bb.position(0);
50+
extendedType = new MessagePackExtendedType(extType, bb.asReadOnlyBuffer());
51+
assertExtendedType(extendedType, extType, expectedByteBuffer);
52+
53+
extType = -3;
54+
bb = ByteBuffer.allocateDirect(3);
55+
bb.put(bs);
56+
bb.position(0);
57+
extendedType = new MessagePackExtendedType(extType, bb.asReadOnlyBuffer());
58+
assertExtendedType(extendedType, extType, expectedByteBuffer);
59+
}
60+
}

msgpack-jackson/src/test/java/org/msgpack/jackson/dataformat/MessagePackParserTest.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
import java.io.*;
1313
import java.math.BigInteger;
14+
import java.nio.ByteBuffer;
1415
import java.util.Arrays;
1516
import java.util.List;
1617
import java.util.Map;
@@ -63,7 +64,7 @@ public void testParserShouldReadObject() throws IOException {
6364
// #9
6465
byte[] extPayload = {-80, -50, -25, -114, -25, 16, 60, 68};
6566
packer.packString("ext");
66-
packer.packExtendedTypeHeader(2, extPayload.length);
67+
packer.packExtendedTypeHeader(0, extPayload.length);
6768
packer.writePayload(extPayload);
6869

6970
packer.flush();
@@ -138,7 +139,9 @@ else if (k.equals("bool")) {
138139
else if (k.equals("ext")) {
139140
// #9
140141
bitmap |= 1 << 10;
141-
assertArrayEquals(extPayload, ((ExtendedValue) v).toByteArray());
142+
MessagePackExtendedType extendedType = (MessagePackExtendedType) v;
143+
assertEquals(0, extendedType.extType());
144+
assertEquals(ByteBuffer.wrap(extPayload), extendedType.byteBuffer());
142145
}
143146
}
144147
assertEquals(0x7FF, bitmap);
@@ -185,7 +188,7 @@ public void testParserShouldReadArray() throws IOException {
185188
packer.packBoolean(true);
186189
// #11
187190
byte[] extPayload = {-80, -50, -25, -114, -25, 16, 60, 68};
188-
packer.packExtendedTypeHeader(2, extPayload.length);
191+
packer.packExtendedTypeHeader(-1, extPayload.length);
189192
packer.writePayload(extPayload);
190193

191194
packer.flush();
@@ -243,7 +246,9 @@ else if (k.equals("child_map_age")) {
243246
// #10
244247
assertEquals(true, array.get(i++));
245248
// #11
246-
assertArrayEquals(extPayload, ((ExtendedValue) array.get(i++)).toByteArray());
249+
MessagePackExtendedType extendedType = (MessagePackExtendedType) array.get(i++);
250+
assertEquals(-1, extendedType.extType());
251+
assertEquals(ByteBuffer.wrap(extPayload), extendedType.byteBuffer());
247252
}
248253

249254
@Test

0 commit comments

Comments
 (0)