使用 EMFJson 读取 JSON-String



我正在使用EMFJson来序列化EMF Ecore模型。我能够从现有模型创建 JSON 字符串。但是,返回的路对我不起作用。我尝试了以下两个片段:

第一次尝试:

ObjectMapper objectMapper = EMFModule.setupDefaultMapper();
objectMapper.reader().forType(MyClass.class).readValue(string);

第二次尝试:

ObjectMapper objectMapper = EMFModule.setupDefaultMapper();
ResourceSet resourceSet = new ResourceSetImpl();
resourceSet.getResourceFactoryRegistry()
.getExtensionToFactoryMap()
.put("json", new JsonResourceFactory());
try {
Resource resource = objectMapper
.reader()
.withAttribute(EMFContext.Attributes.RESOURCE_SET, resourceSet)
.withAttribute(EMFContext.Attributes.RESOURCE_URI, null)
.forType(Resource.class)
.readValue(string);
} catch (IOException e1) {
e1.printStackTrace();
}

对于这两种尝试,我都得到以下异常:java.lang.RuntimeException:无法为uri默认值创建资源

我想第二种方法根本行不通,因为我不知道RESOURCE_URI提供什么。我在这里以这里的例子作为尝试两次读取文件而不是字符串的基础。有人知道如何做到这一点吗?谢谢!

我设法使用这里给出的答案来处理它:使用 EMF 以字符串格式解析 XML

我更改的方法如下所示:

private EObject loadEObjectFromString(String model, EPackage ePackage) throws IOException { 
ResourceSet resourceSet = new ResourceSetImpl();
resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put(Resource.Factory.Registry.DEFAULT_EXTENSION, new JsonResourceFactory());
resourceSet.getPackageRegistry().put(ePackage.getNsURI(), ePackage);
Resource resource = resourceSet.createResource(URI.createURI("*.extension"));
InputStream stream = new ByteArrayInputStream(model.getBytes(StandardCharsets.UTF_8));
resource.load(stream, null);
return resource.getContents().get(0);
}

现在我可以这样称呼它:

EObject test = this.loadEObjectFromString(jsonString, MyPackage.eINSTANCE);

相关内容

  • 没有找到相关文章

最新更新