public String createJsonStringFromDataObject(final InstanceIdentifier<?> id, DataObject object) throws Exception {
final SchemaPath scPath = SchemaPath
.create(FluentIterable.from(id.getPathArguments()).transform(new Function<PathArgument, QName>() {
@Override
public QName apply(final PathArgument input) {
return BindingReflections.findQName(input.getType());
}
}), true);
final Writer writer = new StringWriter();
NormalizedNodeStreamWriter domWriter;
try {
final ModuleInfoBackedContext moduleContext = ModuleInfoBackedContext.create();
Iterable<? extends YangModuleInfo> moduleInfos = Collections
.singleton(BindingReflections.getModuleInfo(object.getClass()));
moduleContext.addModuleInfos(moduleInfos);
SchemaContext schemaContext = moduleContext.tryToCreateSchemaContext().get();
BindingRuntimeContext bindingContext;
bindingContext = BindingRuntimeContext.create(moduleContext, schemaContext);
final BindingNormalizedNodeCodecRegistry codecRegistry =
new BindingNormalizedNodeCodecRegistry(bindingContext);
/*
* This function needs : - context - scPath.getParent() -
* scPath.getLastComponent().getNamespace(), -
* JsonWriterFactory.createJsonWriter(writer)
*/
domWriter = JSONNormalizedNodeStreamWriter.createExclusiveWriter(
JSONCodecFactorySupplier.DRAFT_LHOTKA_NETMOD_YANG_JSON_02.createSimple(schemaContext),
scPath.getParent(), scPath.getLastComponent().getNamespace(),
JsonWriterFactory.createJsonWriter(writer, 2));
final BindingStreamEventWriter bindingWriter = codecRegistry.newWriter(id, domWriter);
codecRegistry.getSerializer(id.getTargetType()).serialize(object, bindingWriter);
writer.close();
} catch (IOException e) {
LOG.error(" writer error ");
} catch (YangSyntaxErrorException e) {
LOG.warn("exception {} occured during json file creation", e.getMessage(), e);
} catch (ReactorException e) {
LOG.warn(" exception {} occured during json file creation", e.getMessage(), e);
}
return writer.toString();
}