blob: 18bb87faa97d6594ee94f20f434d2a7ab1d6d7aa [file] [log] [blame]
package org.codehaus.jackson.map.deser;
import org.codehaus.jackson.map.BaseMapTest;
import java.io.IOException;
import java.util.*;
import org.codehaus.jackson.annotate.JsonAnySetter;
import org.codehaus.jackson.annotate.JsonCreator;
import org.codehaus.jackson.annotate.JsonProperty;
import org.codehaus.jackson.map.*;
import org.codehaus.jackson.map.annotate.JsonSerialize;
/**
* Unit tests for verifying that simple exceptions can be deserialized.
*/
public class TestExceptionDeserialization
extends BaseMapTest
{
@SuppressWarnings("serial")
static class MyException extends Exception
{
protected int value;
protected String myMessage;
protected HashMap<String,Object> stuff = new HashMap<String, Object>();
@JsonCreator
MyException(@JsonProperty("message") String msg, @JsonProperty("value") int v)
{
super(msg);
myMessage = msg;
value = v;
}
public int getValue() { return value; }
public String getFoo() { return "bar"; }
@JsonAnySetter public void setter(String key, Object value)
{
stuff.put(key, value);
}
}
@SuppressWarnings("serial")
static class MyNoArgException extends Exception
{
@JsonCreator MyNoArgException() { }
}
/*
/**********************************************************
/* Tests
/**********************************************************
*/
final ObjectMapper MAPPER = new ObjectMapper();
public void testIOException() throws IOException
{
IOException ioe = new IOException("TEST");
String json = MAPPER.writeValueAsString(ioe);
IOException result = MAPPER.readValue(json, IOException.class);
assertEquals(ioe.getMessage(), result.getMessage());
}
// As per [JACKSON-377]
public void testWithCreator() throws IOException
{
final String MSG = "the message";
String json = MAPPER.writeValueAsString(new MyException(MSG, 3));
MyException result = MAPPER.readValue(json, MyException.class);
assertEquals(MSG, result.getMessage());
assertEquals(3, result.value);
assertEquals(1, result.stuff.size());
assertEquals(result.getFoo(), result.stuff.get("foo"));
}
// [JACKSON-388]
public void testWithNullMessage() throws IOException
{
final ObjectMapper mapper = new ObjectMapper();
mapper.setSerializationInclusion(JsonSerialize.Inclusion.NON_NULL);
String json = mapper.writeValueAsString(new IOException((String) null));
IOException result = mapper.readValue(json, IOException.class);
assertNotNull(result);
assertNull(result.getMessage());
}
public void testNoArgsException() throws IOException
{
MyNoArgException exc = MAPPER.readValue("{}", MyNoArgException.class);
assertNotNull(exc);
}
// [JACKSON-794]: try simulating JDK 7 behavior
public void testJDK7SuppressionProperty() throws IOException
{
Exception exc = MAPPER.readValue("{\"suppressed\":[]}", IOException.class);
assertNotNull(exc);
}
}