Hello,
I currently have an application that subscribes to several DDS topics and records messages using rtiddsgen compiled IDL files. After receiving a Sample and converting it to the compiled data type, I use GSON libraries to generate JSON strings from the message data.
I recently came across the "MonitorData.java" example and was wondering if I could somehow make my DDS recorder more generic. Is there any way for me to convert/print a DynamicData message object to a JSON string with fieldname=fieldvalue pairs?
I saw some references to a "DynamicDataFormatter" in the forum search history, but I don't see any mention of this class in the java api.
Thank you in advance,
Kyle
Hi Kyle,
I've done this in the past -- well, similar. I have an XML background, so I used the discovery (Publisher) BuiltIn Topics to auto-generate an XSD (XML Schema Document) of the type ("TypeCode") on the wire passed around during discovery. From that I built a tool that would capture instances/samples as they were published, and generate XML files that validated against the XSD. using the Discovery topics (+ TypeCode) is available in the "File Exchange" to the left (code snippets > Java for example, "MonitorDiscoveryInformation" is your starting point).
I'm pretty sure you want something simpler, because JSON isn't constrained to follow a schema validation requirement, but you still need the TypeCode to teach your decomposing engine how the data is serialized.
You'll need to learn how to walk the DynamicData tree, after using the discovery topics. When your code discovers a TypeCode object on the wire, it can use that to create a DynamicData DataReader based on that TypeCode. When your reader is called with a new DynamicData instance, you simply walk the instance while generating JSON from it.
I don't have access to the code I wrote when I was working at RTI, and in any case I don't have a connext license that would allow me to recreate the infrastructure, sorry.
Other references to start:
https://www.rti.com/blog/2014/09/26/leveraging-w3c-org-documents-xml-etc-in-rti-connext-dds/
https://community.rti.com/forum-topic/using-xml-inputoutput-data-rti-dds
In the second link, Gianpiero mentions a recent RTI tool that might be a good place to start, it may already be able to generate JSON directly.
Hope that helps,
rip
Hello Kyle,
In Connext DDS 5.3.0 we expose an internal API called DDS_DynamicDataFormatter_to_json. You can find the definition in this file include/ndds/dds_c/dds_c_dynamicdataformatter.h
where data is a pointer to a valid Dynamic Data.
This function is undocumented and I think is not ported to Java. You could try to call it yourself using jni..
I hope this helps,
Gianpiero