Eclipse EMF NotSerializableException

Eclipse EMF NotSerializableException,eclipse,emf,Eclipse,Emf,我使用EMF在Java中构建应用程序。 我使用Java8JDK。 我只需要持久化模型类的实例。 我在WildFly 10服务器上以调试模式从Eclipse远程运行代码 private String getXml(Audit audit) throws NeoflexException { XMLResource res = new XMLResourceImpl(); res.getContents().add(audit); StringW

我使用EMF在Java中构建应用程序。
我使用Java8JDK。
我只需要持久化模型类的实例。
我在WildFly 10服务器上以调试模式从Eclipse远程运行代码

private String getXml(Audit audit) throws NeoflexException {
    XMLResource res = new XMLResourceImpl();        
    res.getContents().add(audit);       
    StringWriter sw = new StringWriter();

    try {
        res.save(sw, null);
    } catch (IOException e) {
        throw new NeoflexException(e);
    }

    return sw.toString();   
}
在序列化时,我得到一个
notserializableeexception

我看到生成的审核类没有标记为
可序列化

我无法编辑生成的代码,但是,我也没有在图表中将此类标记为可序列化的选项。
如本文所述:
我需要创建一个接口并从serializable派生它,但我没有这样的选项。请参阅附加的屏幕截图


通常,EMF序列化性不绑定到ISerializable接口,而是在模型元素之间形成的包含层次结构。此外,您不应该让EMF接口扩展ISerializable inferface,因为这会产生误导(EMF模型对象不应该使用基本Java序列化进行序列化)

基本上,类的实例应该包含在包含树中:一个对象应该是树的根,所有其他实例都应该包含在其中。然后,通过将模型根添加到资源中,可以将整个包含层次结构保存到一个文件中

在不知道异常中的具体错误消息的情况下,我的第一个技巧是检查审计元素是否引用了其他一些模型元素,因为如果该元素在非包含关系中被引用,则序列化将失败

要设置关系包含,请编辑元模型(Audit.ecore文件),并为引用设置名为“包含”的属性。但是,您必须确保可以正确设置包含子树:只有一个模型根元素;所有其他元素都可以通过模型根的包含引用的路径来访问。如果元素被交叉引用引用,那么它也必须包含在包含层次结构中,以便EMF序列化(Resource.save)工作

我看到的另一个问题是,您手动创建EMF资源文件,没有任何URI(用于确定要保存模型的位置),也没有任何资源集(用于将模型拆分为具有单独包含层次结构的多个文件/资源)

换句话说,您应该创建一个ResourceSet实例,并使用它来创建您的模型资源实例


有关更多详细信息,我建议查看vogella.com上的和教程。

通常,EMF序列化性不绑定到ISerializable接口,而是在模型元素之间形成的包含层次结构。此外,您不应该让EMF接口扩展ISerializable inferface,因为这会产生误导(EMF模型对象不应该使用基本Java序列化进行序列化)

基本上,类的实例应该包含在包含树中:一个对象应该是树的根,所有其他实例都应该包含在其中。然后,通过将模型根添加到资源中,可以将整个包含层次结构保存到一个文件中

在不知道异常中的具体错误消息的情况下,我的第一个技巧是检查审计元素是否引用了其他一些模型元素,因为如果该元素在非包含关系中被引用,则序列化将失败

要设置关系包含,请编辑元模型(Audit.ecore文件),并为引用设置名为“包含”的属性。但是,您必须确保可以正确设置包含子树:只有一个模型根元素;所有其他元素都可以通过模型根的包含引用的路径来访问。如果元素被交叉引用引用,那么它也必须包含在包含层次结构中,以便EMF序列化(Resource.save)工作

我看到的另一个问题是,您手动创建EMF资源文件,没有任何URI(用于确定要保存模型的位置),也没有任何资源集(用于将模型拆分为具有单独包含层次结构的多个文件/资源)

换句话说,您应该创建一个ResourceSet实例,并使用它来创建您的模型资源实例

有关更多详细信息,我建议查看vogella.com上的和教程