2015-10-14 99 views
0

我有以下用例。我需要通過網絡以某種序列化格式傳輸XText模型實例。爲此,我需要在客戶端序列化模型,將其作爲某種POST請求的主體發送,並在服務器端反序列化它。將XText模型實例序列化並反序列化爲OutputStream

當時我發出發送請求我只能訪問我的模型的對象結構。我沒有創建這個模型的文件(這將是可能的,但它會破壞我的架構的清潔並使測試非常複雜)。

我創建了下面的代碼序列化基於一些線程這裏在計算器上,並通過其他網站提供的教程模型序列化一個XTEXT - 型號

Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put("xtextbin", new XMIResourceFactoryImpl()); 
Injector injector = Guice.createInjector(new ScenarioRuntimeModule()); 
Serializer serializer = injector.getInstance(Serializer.class); 
System.out.println(serializer.serialize(scenario)); 

但是它不工作,我得到以下錯誤: com.google.inject.CreationException:吉斯創建錯誤:

1) Error injecting constructor, org.eclipse.emf.common.util.WrappedException: org.eclipse.emf.ecore.resource.impl.ResourceSetImpl$1DiagnosticWrappedException: com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Ungültiges Byte 1 von 1-Byte-UTF-8-Sequenz. 

問題最有可能出在XMIResourceFactoryImpl,我不知道如何正確使用。

另一種方法可能是使用:

String serializedScenario = ModelUtils.serialize(scenario); 

但我不知道如何反序列化這個連載調用的結果。然而

我的問題是更基本的,因爲上面的代碼可能是完全錯誤的做法。不幸的是,我沒有在文檔或網絡上的其他地方找到很多關於此的信息。

TL; DR: 序列化XText對象模型並將其反序列化的最佳方法是什麼?

回答

1

第一行不屬於這裏可言,只是將其刪除。

您是如何創建/獲取對象'場景'的? 如果用的Xtext解析已經可以得到這樣的串行:

((XtextResource)scenario.eResource()).getResourceServiceProvider 
            .get(ISerializer.class) 
+0

最後又回到這個問題。場景是使用'Scenario scenario = ScenarioFactory.eINSTANCE.createScenario();'創建的。如果我嘗試這個代碼,我會爲'scenario.eResource()'獲得'null'。 – ali

+0

我編輯了我的問題,使其更清晰。 – ali

相關問題