我使用Log4j1.x通过Socket(AsyncAppender中的SocketAppender)发送一些loggingEvent。
我在LoggingEvent消息中发送个人对象Serializable。
在Chainsaw(服务器范围的例子)中,我想恢复我的个人对象。
我的问题:我不能实例化消息。
错误:
Exception in thread "Thread-5" java.lang.ClassCastException: java.lang.String cannot be cast to com.my.MyPersonnalObject
at org.apache.log4j.chainsaw.LoggingReceiver$Slurper.run(LoggingReceiver.java:80)
at java.lang.Thread.run(Unknown Source)
我如何重新保护我的物体?
谢谢,
答案 0 :(得分:0)
我找到了一个简单的方法。
重写MyPersonnalObject的toString以返回JSON值:
@Override
public String toString()
{
String str = "";
try
{
str = objectMapper.writeValueAsString(this);
} catch (JsonProcessingException e)
{
StringWriter errors = new StringWriter();
e.printStackTrace(new PrintWriter(errors));
str = "ERROR JSON" + errors.toString();
}
return str;
}
然后,在另一边,使用:
public static MyPersonnalObject rescure(String jsonStr)
{
MyPersonnalObject b = null;
try
{
JsonParser jsonParser = jsonFactory.createParser(jsonStr);
b = objectMapper.readValue(jsonParser, MyPersonnalObject.class);
} catch (JsonParseException e)
{
e.printStackTrace();
} catch (IOException e)
{
e.printStackTrace();
}
return b;
}