NotSerializableException 即使在使用 transient 时也是如此
NotSerializableException even while using transient
我遇到错误:
WARNING: Cannot serialize session attribute DocumentFieldHelper for
session {idsession} java.io.NotSerializableException:
com.example.DocumentKind
while trying to Serialize class
DocumentFieldHelper.
DocumentFieldHelper 代码
private class DocumentFieldHelper implements Serializable
{
private static final long serialVersionUID = 1L;
private Map<String, Object> fieldValues;
private String documentKind;
public DocumentFieldHelper()
{
fieldValues = new HashMap<String, Object>();
}
public NativeDockindQuery createQuery()
{
try
{
NativeDockindQuery ndq = NativeDockindQuery.create(this.getDocumentKind());
return ndq;
} catch (EdmException e)
{
log.error(e.getMessage(), e);
}
return null;
}
public String getDocumentKind() {
return documentKind;
}
NativeDockindQuery 代码
public class NativeDockindQuery implements Serializable {
private static final long serialVersionUID = -2001430456575525419L;
private transient DocumentKind kind;
public static NativeDockindQuery create(String kind) throws EdmException {
return new NativeDockindQuery(DocumentKind.findByCn(kind), false);
}
private NativeDockindQuery(DocumentKind kind, boolean checkPermissions) throws EdmException {
this.kind = kind;
}
}
当然,还有更多代码,但我认为这是重要的部分。
我猜 NativeDockindQuery 必须是可序列化的,因为它是 return DocumentFieldHelper 方法之一的类型?
有没有可能是因为我使用的是 DocumentKind 的静态方法,所以我遇到了这个问题?
好的,我做了一些测试,当然,除了我发布的代码之外,其他地方也有问题。我应该指出这段代码不是我的,我只是在看到一些错误时进行更正。
事实证明,DocumentFieldHelper class 位于其他 class 的内部 class。外部 class 声明了 DocumentKind class 的实例变量,这就是问题出现的原因。我刚刚使 DocumentFieldHelper 独立于外部 class class,一切正常。
课?序列化内部 class.
时要小心
感谢 Vlad 和 SacJn 的回复。
我遇到错误:
WARNING: Cannot serialize session attribute DocumentFieldHelper for session {idsession} java.io.NotSerializableException: com.example.DocumentKind
while trying to Serialize class DocumentFieldHelper.
DocumentFieldHelper 代码
private class DocumentFieldHelper implements Serializable
{
private static final long serialVersionUID = 1L;
private Map<String, Object> fieldValues;
private String documentKind;
public DocumentFieldHelper()
{
fieldValues = new HashMap<String, Object>();
}
public NativeDockindQuery createQuery()
{
try
{
NativeDockindQuery ndq = NativeDockindQuery.create(this.getDocumentKind());
return ndq;
} catch (EdmException e)
{
log.error(e.getMessage(), e);
}
return null;
}
public String getDocumentKind() {
return documentKind;
}
NativeDockindQuery 代码
public class NativeDockindQuery implements Serializable {
private static final long serialVersionUID = -2001430456575525419L;
private transient DocumentKind kind;
public static NativeDockindQuery create(String kind) throws EdmException {
return new NativeDockindQuery(DocumentKind.findByCn(kind), false);
}
private NativeDockindQuery(DocumentKind kind, boolean checkPermissions) throws EdmException {
this.kind = kind;
}
}
当然,还有更多代码,但我认为这是重要的部分。
我猜 NativeDockindQuery 必须是可序列化的,因为它是 return DocumentFieldHelper 方法之一的类型?
有没有可能是因为我使用的是 DocumentKind 的静态方法,所以我遇到了这个问题?
好的,我做了一些测试,当然,除了我发布的代码之外,其他地方也有问题。我应该指出这段代码不是我的,我只是在看到一些错误时进行更正。 事实证明,DocumentFieldHelper class 位于其他 class 的内部 class。外部 class 声明了 DocumentKind class 的实例变量,这就是问题出现的原因。我刚刚使 DocumentFieldHelper 独立于外部 class class,一切正常。 课?序列化内部 class.
时要小心感谢 Vlad 和 SacJn 的回复。