繁体   English   中英

将XText模型实例序列化和反序列化为OutputStream

[英]Serializing and deserializing XText Model Instance to OutputStream

我有以下用例。 我需要通过网络以某种序列化格式传输XText模型实例。 为此,我需要在客户端上序列化模型,将其作为某种POST请求的主体发送,并在服务器端反序列化。

在发出发送请求时,我仅有权访问模型的对象结构。 我再也没有从中创建模型的文件了(这是可能的,但它会破坏我的体系结构的整洁度并使测试非常复杂)。

我创建了以下代码,用于基于StackOverflow上的某些线程对模型进行序列化,以及可通过其他网站获得的用于序列化XText-Model的教程

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:Guice创建错误:

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

但是我不知道如何反序列化此序列化调用的结果。

但是,我的问题更为基本,因为上面的代码可能是完全错误的方法。 不幸的是,我在文档或Web上的任何其他地方都没有找到太多有关此内容的信息。

TL; DR: 序列化XText对象模型并再次反序列化的最佳方法是什么?

第一行根本不属于这里,只需将其删除即可。

您如何创建/获取对象“方案”的? 如果已经使用Xtext进行了解析,则可以像这样获得序列化器:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM