【问题标题】:Serializing and deserializing XText Model Instance to OutputStream将 XText 模型实例序列化和反序列化为 OutputStream
【发布时间】:2015-12-01 21:06:55
【问题描述】:

我有以下用例。我需要以某种序列化格式通过网络传输 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);

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

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

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

【问题讨论】:

    标签: java serialization xtext emf ecore


    【解决方案1】:

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

    您是如何创建/获取对象“场景”的? 如果它已经用 Xtext 解析,你可以像这样获得序列化器:

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

    【讨论】:

    • 终于回到这个问题了。场景是使用Scenario scenario = ScenarioFactory.eINSTANCE.createScenario(); 创建的。如果我尝试此代码,我会得到 nullscenario.eResource()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-24
    相关资源
    最近更新 更多