在进行EMF与XML序列化和反序列化遇到一些问题,最后终于解决。
首先EMF要序列化需要在ecore模型中将其EReferece的属性设置成containment为true,否则该属性无法序列化,
这点摸索了好几个小时才找到原因。
代码如下:
/**
*
* @author fuliang
*
*/
public class ModelUtil {
public static void saveModel(Model model,String savePath) throws IOException{
ResourceSet resourceSet = new ResourceSetImpl();
Map<String, Object> extensionToFactoryMap = resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap();
extensionToFactoryMap.put("xmi", new XMIResourceFactoryImpl());
ModelPackage modelPackage = ModelPackageImpl.init();
Registry packageRegistry = resourceSet.getPackageRegistry();
packageRegistry.put(modelPackage.getNsURI(),modelPackage);
Resource resource = resourceSet.createResource(URI.createFileURI(savePath));
resource.getContents().add(model);
resource.save(null);
}
public static Model loadModel(String path) throws IOException{
ResourceSet resourceSet = new ResourceSetImpl();
Map<String, Object> extensionToFactoryMap = resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap();
extensionToFactoryMap.put("xmi", new XMIResourceFactoryImpl());
ModelPackage modelPackage = ModelPackageImpl.init();
Registry packageRegistry = resourceSet.getPackageRegistry();
packageRegistry.put(modelPackage.getNsURI(),modelPackage);
Resource resource = resourceSet.createResource(URI.createFileURI(path));
resource.load(null);
Wrapper wrapper = (Wrapper) resource.getContents().get(0);
return wrapper;
}
}
另外要想制定生成代码的package,需要在model.genmodel里面的Package的properties将base package设置好。
分享到:
相关推荐
- 用户可以自定义XML解析器和序列化器,以适应特定的XML格式或需求。 - EMF还支持插件机制,允许开发人员扩展其功能,如添加验证规则、转换逻辑等。 8. **应用场景** - EMF广泛应用于软件建模、配置管理、数据...
此外,EMF还支持模型的序列化和反序列化,即将模型实例转换为XML或其他格式的数据,或者从数据中恢复模型实例。EMF的序列化机制可以处理复杂的模型结构,包括循环引用、嵌套对象等,确保了模型数据的完整性和一致性...
2. **生成代码**:一旦模型定义完成,EMF可以自动生成对应的Java类和接口,以及用于持久化和反序列化的XML架构。 3. **创建编辑器**:使用Eclipse的GEF(Graphical Editing Framework)或GMF(Graphical Modeling ...
在Java平台上,EMF为模型提供了丰富的API和工具支持,使得模型能够被用作应用程序的数据结构,并且可以生成Java源代码和XML序列化代码。 标题中提到的"emf-runtime"是指EMF运行时环境,它是EMF的核心组成部分,包含...
3. **序列化与反序列化**:EMF支持将模型实例序列化为标准的XMI格式,这是一种通用的模型交换格式,同时也支持直接存储为XML。 4. **API支持**:提供了一组丰富的API,允许开发者在程序中创建、操作和管理模型实例...
4. 生成代码:使用EMF的代码生成器,将模型转换为Java类和XML序列化代码。 5. 编写应用程序:使用生成的Java类进行编程,利用EMF提供的API操作模型。 总结,Java开发工具EMF插件是Eclipse IDE中的一个强大工具,它...
EMF提供了一整套工具和服务,包括模型的序列化、反序列化、验证和转换,使得开发基于模型的系统变得更加高效。 在EMF中,模型通常以Ecore(Eclipse Core Meta-Object Facility)的形式存在,这是一个元模型定义语言...
2. **代码生成**:一旦元模型定义完成,EMF可以自动生成Java源代码,包括数据对象、访问这些对象的API以及序列化和反序列化的逻辑。这极大地简化了处理结构化数据的工作。 3. **数据绑定**:EMF SDO提供了数据绑定...
9. **扩展和定制**:EMF允许开发者通过继承和实现接口来扩展其功能,如自定义类型系统、解析器和序列化策略等。 10. **与其他Eclipse组件集成**:EMF与Eclipse的其他组件如PDE(Plug-in Development Environment)...
EMF还支持序列化和反序列化,使得流程模型可以被保存和加载到数据库中。通过EMF,Activiti Designer能够实现对流程图的直观表示,包括泳道、任务、网关等元素,并且可以生成符合BPMN标准的XML流程定义文件。 在处理...
EMF基于模型驱动的软件开发(MDE, Model Driven Engineering)理念,允许开发者创建强类型、结构化的数据模型,并能自动生成相应的Java代码和XML序列化支持。这个插件极大地简化了处理结构化数据和实现数据交换的工作...
这个版本可能包含了对模型对象的创建、序列化、反序列化以及与模型相关的事件处理等功能。它对于那些希望在Eclipse环境下开发图形化编辑器或基于模型的应用程序的开发者来说是必不可少的。 “visual editor”通常指...
4. **序列化(Serialization)**:EMF支持将模型实例序列化为XML格式,方便存储和交换。 5. **编辑器(Editor)**:EMF提供了用于创建图形化或文本编辑器的工具,使用户可以直观地编辑模型实例。 6. **转换...
- 实现数据的序列化和反序列化,方便数据交换和持久化存储。 - 利用SDO的事件机制,实现对数据变化的监听和响应。 总的来说,"emf-sdo-runtime-2.2.0.zip" 提供了在Eclipse环境下使用SDO技术的基础,使得开发人员...
它们支持序列化,可以持久化到磁盘,也可以通过网络进行传输。此外,EMF提供了丰富的API,允许动态修改模型,实现模型的加载、保存和验证。 **高级话题** EMF支持许多高级特性,例如: 1. **逆向工程**:可以从现有...
EMF 提供了数据模型的创建、存储、序列化以及与Java对象之间的映射。开发者可以通过EMF定义自己的领域特定语言(DSL),并利用EMF生成对应的Java类和API,从而简化模型的编程和管理。此外,EMF还支持XMI(XML ...
5. **序列化和反序列化**:EMF-SDO可以将数据对象序列化为XML,方便数据的存储和传输。同时,它也能从XML文档反序列化回数据对象,实现了XML与Java对象之间的无缝转换。 6. **数据绑定**:EMF-SDO支持数据绑定到UI...
1. **核心库**:EMF的核心库包括了处理模型、序列化、反序列化、比较和图层等基本操作的类。这些类使得开发者可以方便地创建和操作基于EMF的模型。 2. **XMI支持**:XMI(XML Metadata Interchange)是一种标准格式...