在进行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设置好。