2015-03-06 7 views
0

Я использую Log4j1.x для отправки Socket (SocketAppender в AsyncAppender) некоторого loggingEvent.Log4j1.x LoggingEnvent: не удается получить объект

Я отправляю персональный объект Serializable в сообщении LoggingEvent.

В бензопиле (пример сервера) я хотел бы восстановить свой персональный объект.

  • Я могу показать имя класса (event.getMessage(). ToString())
  • я могу получить Throwable
  • Мой Personnal объект находится в библиотеке, то же самое в обоих проектах.

Моя проблема: я не могу представить сообщение.

ошибка:

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) 

Как я могу rescure свой объект?

Спасибо,

ответ

0

Я нашел простой способ.

переопределять ToString из MyPersonnalObject возвращать значение 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; 
} 
Смежные вопросы