使用 EMFJson 读取 JSON-String

Reading JSON-String using EMFJson

我正在使用 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 default

创建资源

我想第二种方法根本行不通,因为我不知道要提供什么 RESOURCE_URI。我作为尝试二的基础的示例 here 读取文件而不是字符串。有人知道如何进行这项工作吗?谢谢!

我设法使用这里给出的答案来处理它:Parse XML in string format using EMF

我修改后的方法如下所示:

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);