Я недавно начал использовать Jackon
и SmileFactory API's
сериализовать документ JSON, но каким-то образом я получаю исключение каждый раз, когда я пытаюсь сериализации его с помощью SmileFactory
AbstractMethodError при использовании с SmileFactory?
Ниже мой основной код класса, который будет использовать класс Value, чтобы сделать JSON документ используя Джексон, а затем сериализации JSON с помощью ObjectMapper, а также я использую SmileFactory здесь, чтобы сериализовать его в формат двоичных данных, но всякий раз, когда я пытаюсь использовать, это всегда дает мне исключение
public static void main(String[] args) throws JsonGenerationException, JsonMappingException, IOException {
Map<String, Object> properties = new HashMap<String, Object>();
properties.put("id", 123);
properties.put("test", 200);
properties.put("marks", 100);
Value val = new Value();
val.setProperties(properties);
String json = new ObjectMapper().writeValueAsString(val);
System.out.println(json);
// this line is giving me an exception
byte[] smileEncoded = new ObjectMapper(new SmileFactory()).writeValueAsBytes(val);
System.out.println(smileEncoded);
}
Ниже мой класс Value, который использует Джексон сделает документ JSON и будет использовать ObjectMapper для сериализуйте документ.
@JsonPropertyOrder(value = { "v" })
public class Value {
private Map<String, Object> properties;
/**
* Default constructor.
*/
@JsonCreator
public Value() {
properties = new HashMap<String, Object>();
}
/**
* Gets the properties of this attribute value.
* @return the properties of this attribute value.
*/
@JsonProperty("v")
public Map<String, Object> getProperties() {
return properties;
}
/**
* Sets the properties of this attribute value.
* @param v the properties of this attribute value to set
*/
@JsonProperty("v")
public void setProperties(Map<String, Object> v) {
properties = v;
}
@Override
public String toString() {
try {
return new ObjectMapper().writerWithDefaultPrettyPrinter().writeValueAsString(this);
} catch (Exception e) {
// log exception
}
return ToStringBuilder.reflectionToString(this);
}
}
Ниже исключение я получаю -
Exception in thread "main" java.lang.AbstractMethodError: org/codehaus/jackson/JsonGenerator.writeFieldName(Ljava/lang/String;)V
at org.codehaus.jackson.JsonGenerator.writeFieldName(JsonGenerator.java:516)
at org.codehaus.jackson.map.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:444)
at org.codehaus.jackson.map.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:150)
at org.codehaus.jackson.map.ser.BeanSerializer.serialize(BeanSerializer.java:112)
зависимостей Maven У меня есть -
<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-smile</artifactId>
<version>2.1.1</version>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.3</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-smile</artifactId>
<version>1.6.0</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>14.0.1</version>
</dependency>
</dependencies>
Какие версии джексона вы используете? Перечислите все имеющиеся у вас Jackson libs. –
Обновлен вопрос с деталями .. – AKIWEB