如何“toString()”GWT EntityProxy衍生物进行日志记录和调试?

时间:2011-01-25 22:15:04

标签: java gwt logging apache-commons tostring

GWT 2.1.1有非常好的框架 - RequestFactory包含所有EntityProxy和东西。

我正在寻找一种方法来序列化实现EntityProxy的运行时实例以进行调试和记录等。只要它是人类可读的,我就不关心格式了。 更具体地说,我希望有类似Apache Commons Lang提供的东西 ReflectionToStringBuilder 可能有一些方法可以使用GWT里面的JSON序列化机制吗?如果是,如何让它更具可读性?

import org.apache.commons.lang.builder.ReflectionToStringBuilder;

String stringRep = ReflectionToStringBuilder.toString(this);

3 个答案:

答案 0 :(得分:4)

至少有两种解决方案:

首先:基于Thomas Broyer

的想法
public static String toString(EntityProxy entityProxy)
{
    DefaultProxyStore store = new DefaultProxyStore();
    Swap.requestFactory.getSerializer(store).serialize(entityProxy);
    return store.encode();
}

产生这样的东西:

{"V":"211","P":{"1@2@biz.daich.swap.shared.dto.UserAccountProxy":{"O":"PERSIST","R":"2","Y":1,"T":"biz.daich.swap.shared.dto.UserAccountProxy","P":{"id":null,"items":null,"channelId":null,"lastActive":1296194777916,"name":null,"emailAddress":"test@example.com","lastReported":1296194777916,"lastLoginOn":1296194777916}}}}

第二:基于AutoBean framework

public static String toJson(EntityProxy entityProxy)
{
    return AutoBeanCodex.encode(AutoBeanUtils.getAutoBean(entityProxy)).getPayload();
}

哪个产生类似

的字符串
{"emailAddress":"test@example.com","lastActive":1296194777916,"lastLoginOn":1296194777916,"lastReported":1296194777916}

第二个就是我需要的东西 - 它在日志中更具可读性。

答案 1 :(得分:2)

我没有尝试过,但看看RequestFactory#getSerializerProxySerializer的javadoc中有一些示例代码。

答案 2 :(得分:0)

如果使用该方法 toJson(EntityProxy entityProxy)

将此更改为

toJson(BaseProxy proxy)

然后您可以记录Value和Entity Proxy对象。