2017-08-14 3 views
0

EMF Ecoreモデルのシリアル化にはEMFJsonを使用しています。私は、既存のモデルからJSON Stringを作成することができます。しかし、バックは私のために働いていない方法。EMFJsonを使用したJSON文字列の読み込み

最初の試行:

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

第二の試み:java.lang.RuntimeExceptionを:作成できません、私は次の例外を取得しています両方の試みのために

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

私は、次の2つのスニペットを試してみましたuri defaultのリソース

私は何を提供するのか分からないので、2番目のアプローチはまったく機能しないと思いますRESOURCE_URIとして例here私は、文字列ではなくファイルの2つの読み込みを試みるための基礎をとった。誰かがこの作品を作る方法を知っていますか?ありがとう!

答えて

0

私はここに与えられた答えを使用してそれを処理するために管理: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); 
関連する問題