У меня есть следующий вариант использования. Мне нужно передать экземпляр модели XText по сети в каком-то сериализованном формате. Для этого мне нужно сериализовать модель на стороне клиента, отправить ее как тело какого-то POST-запроса и десериализовать на стороне сервера.
В то время, когда я выдаю запрос на отправку, у меня есть доступ только к структуре объекта моей модели. У меня больше нет файлов, из которых я создал модель (это было бы возможно, но это разрушило бы чистоту моей архитектуры и сильно усложнило бы тестирование).
Я создал следующий код для сериализации модели на основе некоторых потоков здесь, в StackOverflow, и учебных пособий, доступных на других веб-сайтах, для сериализации модели 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: ошибки создания 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 и снова ее десериализовать?