Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,7 @@
import com.fasterxml.jackson.core.*;
import com.fasterxml.jackson.core.io.IOContext;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.*;
import java.util.Arrays;

public class MessagePackFactory extends JsonFactory {
Expand All @@ -33,6 +31,16 @@ public JsonGenerator createGenerator(OutputStream out, JsonEncoding enc) throws
return new MessagePackGenerator(messagePackGeneratorFeature, _objectCodec, out);
}

@Override
public JsonGenerator createGenerator(File f, JsonEncoding enc) throws IOException {
return createGenerator(new FileOutputStream(f), enc);
}

@Override
public JsonGenerator createGenerator(Writer w) throws IOException {
throw new UnsupportedOperationException();
}

@Override
public JsonParser createParser(byte[] data) throws IOException, JsonParseException {
IOContext ioContext = _createContext(data, false);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -327,6 +327,7 @@ else if (rootStackItem instanceof StackItemForArray) {
else {
throw new IllegalStateException("Unexpected rootStackItem: " + rootStackItem);
}
rootStackItem = null;
MessagePacker messagePacker = getMessagePacker();
messagePacker.flush();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,17 +15,23 @@
//
package org.msgpack.jackson.dataformat;

import com.fasterxml.jackson.core.JsonEncoding;
import com.fasterxml.jackson.core.JsonGenerator;
import org.junit.Test;
import org.msgpack.core.MessagePack;
import org.msgpack.core.MessageUnpacker;
import org.msgpack.core.buffer.ArrayBufferInput;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

public class MessagePackGeneratorTest extends MessagePackDataformatTestBase {
Expand Down Expand Up @@ -189,4 +195,30 @@ else if (key.equals("num")) {
// #7
assertEquals(false, messageUnpacker.unpackBoolean());
}

@Test
public void testMessagePackGeneratorDirectly() throws IOException {
MessagePackFactory messagePackFactory = new MessagePackFactory();
File tempFile = File.createTempFile("msgpackTest", "msgpack");
tempFile.deleteOnExit();

JsonGenerator generator = messagePackFactory.createGenerator(tempFile, JsonEncoding.UTF8);
assertTrue(generator instanceof MessagePackGenerator);
generator.writeStartArray();
generator.writeNumber(0);
generator.writeString("one");
generator.writeNumber(2.0f);
generator.writeEndArray();
generator.flush();
generator.flush(); // intentional
generator.close();

FileInputStream fileInputStream = new FileInputStream(tempFile);
MessageUnpacker unpacker = MessagePack.newDefaultUnpacker(fileInputStream);
assertEquals(3, unpacker.unpackArrayHeader());
assertEquals(0, unpacker.unpackInt());
assertEquals("one", unpacker.unpackString());
assertEquals(2.0f, unpacker.unpackFloat(), 0.001f);
assertFalse(unpacker.hasNext());
}
}
Original file line number Diff line number Diff line change
@@ -1,18 +1,21 @@
package org.msgpack.jackson.dataformat;

import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonToken;
import com.fasterxml.jackson.core.type.TypeReference;
import org.junit.Test;
import org.msgpack.core.MessagePack;
import org.msgpack.core.MessagePacker;
import org.msgpack.core.buffer.OutputStreamBufferOutput;

import java.io.IOException;
import java.io.Serializable;
import java.io.*;
import java.math.BigInteger;
import java.util.Arrays;
import java.util.List;
import java.util.Map;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;

public class MessagePackParserTest extends MessagePackDataformatTestBase {
@Test
Expand Down Expand Up @@ -224,4 +227,55 @@ else if (k.equals("child_map_age")) {
// #10
assertEquals(true, array.get(i++));
}

@Test
public void testMessagePackParserDirectly() throws IOException {
MessagePackFactory messagePackFactory = new MessagePackFactory();
File tempFile = File.createTempFile("msgpackTest", "msgpack");
tempFile.deleteOnExit();

FileOutputStream fileOutputStream = new FileOutputStream(tempFile);
MessagePacker packer = MessagePack.newDefaultPacker(fileOutputStream);
packer.packMapHeader(2);
packer.packString("zero");
packer.packInt(0);
packer.packString("one");
packer.packFloat(1.0f);
packer.close();

JsonParser parser = messagePackFactory.createParser(tempFile);
assertTrue(parser instanceof MessagePackParser);

JsonToken jsonToken = parser.nextToken();
assertEquals(JsonToken.START_OBJECT, jsonToken);

jsonToken = parser.nextToken();
assertEquals(JsonToken.FIELD_NAME, jsonToken);
assertEquals("zero", parser.getCurrentName());

jsonToken = parser.nextToken();
assertEquals(JsonToken.VALUE_NUMBER_INT, jsonToken);
assertEquals(0, parser.getIntValue());

jsonToken = parser.nextToken();
assertEquals(JsonToken.FIELD_NAME, jsonToken);
assertEquals("one", parser.getCurrentName());

jsonToken = parser.nextToken();
assertEquals(JsonToken.VALUE_NUMBER_FLOAT, jsonToken);
assertEquals(1.0f, parser.getIntValue(), 0.001f);

jsonToken = parser.nextToken();
assertEquals(JsonToken.END_OBJECT, jsonToken);

try {
parser.nextToken();
assertTrue(false);
}
catch (EOFException e) {
// Expected
}
parser.close();
parser.close(); // Intentional
}
}