RSSL XML Trace Data Converter Tool
The utility is a console application which was designed for decoding and converting XML Fragments from the RSSL Tracing log generated by RFA C++/.NET and EMA/ETA C/C++. It can convert a Hex string inside the field entry to the actual value according to data dictionary (RDMFieldDictionary and enumtype.def). Please note that RSSL Tracing log and the utility was provided for troubleshooting purpose only.
Prerequisites
Required software components:
- .NET Core Framework-.NET Framework version 2.1 or later version
- Visual Studio 2017- We use Visual Studio 2017 to develop and build the application on Windows.
Optional software components:
- Visual Studio Code - IDE for .NET Core development on Windows and macOS.
- Other IDE's such as Rider - IDE From Jetbrain for .NET Core projects on macOS.
Getting Started
The application was implemented using .NET standard library and .NET Core 2.1 framework so that user can rebuild or republish the application on .NET Core supported platforms such as Windows, Linux, and Mac OS. Please find more details about the build and publish command from MSDN.
The console application requires RDMFieldDictionary and enumtype.def to decode the raw data in a Hex string format to the actual value. The user can update the data dictionary in the folder "Dict" to the latest version. In case that the application unable to find field definition of the fid or enum value, it will instead write original Hex string in the tracing log. Note that you can download the latest version of data dictionary from the Software Download page.
Overview
The utility is console application which was designed for decoding and converting XML Fragments inside RSSL Tracing log generated by RFA C++/.NET and EMA/ETA C/C++. It can decode Hex string inside fieldEntry XML element to the actual value according to data dictionary from RDMFieldDictionary and enumtype.def. The utility is command line base console application which was developed by using .NET Core Framework so that user can build and run the console application on Windows, Linux and Mac OS according to information from .NET Core support platforms.
Typically, when the user using RFA or EMA application requesting data for Market Price and Level 2 Market By Price or Market by Order, the response message usually contains a field entry with a field value in Hex string format. The utility can be used to read the XML fragment inside the XML file and then converting the Hex string in the field entry to actual data according to the data type from the data dictionary. Moreover, it can be used to decode the new MRN Real-Time News which is the data from RIC MRN_STORY. The utility also has application's logic to scan XML fragments and consolidate a series of MRN compressed data and then unpack the compressed buffer to a raw JSON data. Then it will write decoded data along with MRN JSON data to a new XML file. The user can open the new XML file with an XML editor to search data. The utility should be able to help a developer to investigate a data relate issue or verify the actual data API sent or receive from a Provider server.
How to collect RSSL Tracing log
The RSSL tracing log was provided for troubleshooting purpose and it's not turn on by default. A user may use the following instruction to turn on the log in RFA C++/.NET and EMA C++ application. Please note that currently, this utility does not support the trace from RFA and EMA java because it can't provide a valid XML trace format. There are some garbage or unexpected text inside the XML fragment and there are mixing between simple logger message and XML data inside the trace so that it causes the XML parsing error. If you want to use the trace log from EMA java with the application, the workaround is to manually remove invalid text or string from XML fragment and save it to a valid XML file.
RFA C++ and .NET application
A user has to add the following configuration to turn on RSSL tracing log. is a connection name which the user is using in the configuration file.
\Connections\<Connection_RSSL>\connectionType = "RSSL"
\Connections\<Connection_RSSL>\rsslPort = "<RSSL Port>"
\Connections\<Connection_RSSL>\hostName = "<ADS/Provider Hostname>"
\Connections\<Connection_RSSL>\traceMsg = false
\Connections\<Connection_RSSL>\traceMsgToFile = true
\Connections\<Connection_RSSL>\tracePing = true
\Connections\<Connection_RSSL>\traceMsgFileName = "RSSLConsumerTrace"
\Connections\<Connection_RSSL>\traceMsgDomains = "all"
\Connections\<Connection_RSSL>\traceRespMsg = true
\Connections\<Connection_RSSL>\traceReqMsg = true
\Connections\<Connection_RSSL>\traceMsgHex = false
\Connections\<Connection_RSSL>\traceMsgMaxMsgSize = 200000000
\Connections\<Connection_RSSL>\traceMsgMultipleFiles = true
Note that traceMsgFileName is an output of the XML file used by RFA to generate the log. From the example provided above, the output will be RSSLConsumerTrace_.xml where is the process id of the application.
EMA C++ application
For EMA C++ application, to turn on the RSSL Trace log, a user has to copy EmaConfig.xml which provided in EMA Examples folder to project directory or running directory and then add below XML element to EMA configuration file under section Consumer. Note that you have to set XmlTraceToFile to 1 to turn on the log and set it to 0 to turn off the log.
<DefaultConsumer value="Consumer_1"/>
<Consumer>
<Name value="Consumer_1"/>
...
<XmlTraceToFile value="1"/>
<XmlTraceToStdout value="0"/>
</Consumer>
...
There are applications that setting server name/IP address and the RSSL port from application code and they might need to turn on the RSSL tracing log. This can be achieved by copying the EMA configuration file to running directly.
Though you are not using the Channel config from the configuration file, you can also copy the configuration file to the running directory and set the config under DefaultConsumer or DefaultProvider section.
From the above sample, we set DefaultConsumer to "Consumer_1" then EMA will check the value inside the configuration file and then verify option to turn on trace file from Consumer1. EMA will generate the RSSL Tracing log file name EmaTrace.xml under the running directory.
Utility download
The project and README are available for Download from GitHub.
Running the Utility
To run the utility from the command line, a user can run "dotnet build" and "dotnet run" command to build and run the application. An alternative option is using "dotnet publish" command to create a native executable file and then run the executable file directly.
Launching the tool from the console:
Start a command prompt and change the folder to "\Example.EMARFACPP.Tool.RSSLTraceViewer\rsslxmltracedataconverter", you should see rsslxmltracedataconverter.csproj in the folder. Then run the following command
dotnet build
To build the project then just type dotnet run to run the application. It will automatically compile and build the project and run the application. It shows the following console output after running dotnet run.
rsslxmltracedataconverter 1.0.0
Copyright (C) 2018 Refinitiv
ERROR(S):
Required option 's, source' is missing.
-s, --source Required. Absolution path to RSSL XML Trace file
-o, --output (Default: output.xml) Absolute path to Xml output file, default is output.xml
generate under running directory.
-r, --rdmdict (Default: ./Dict/RDMFieldDictionary) Absolution path to RDMFieldDictionary
file. Default reading dictionary form /Dict/RDMFieldDictionary
-e, --enumdict (Default: ./Dict/enumtype.def) Absolution path to enumtype.def file. Default
reading dictionary form /Dict/enumtype.def
--verbose (Default: false) Prints all messages to standard output.
--help Display this help screen.
--version Display version information.
Command-line Options
From the previous section, to run the utility, it requires command line argument "-s" following by name or path to RSSL Trace file you want to convert. You can also specify the name of XML output by using -o following by output file name. If the user does not set the output file name, the application will set it to "output.xml" instead. There are "-r" and "-e" that is an optional command line argument to specify a path to your own data dictionary. By default, it will read the dictionary from folder "\Dict". Please make sure that you have folder "Dict" in your running directory.
The following sample is output after running the application with the RSSL Tracing log.
$ dotnet run -s MRNViewerTrace_3160.xml
Using launch settings from launchSettings.json...
Start loading and processing Xml file MRNViewerTrace_3160.xml please wait
Processing completed 5% 20555/411087 elements
Processing completed 18% 73996/411087 elements
Processing completed 33% 135659/411087 elements
Processing completed 47% 193211/411087 elements
Processing completed 63% 258985/411087 elements
Processing completed 74% 304205/411087 elements
Processing completed 88% 361757/411087 elements
Processing completed 100% 411087/411087 elements
Finished reading and processing Xml data, please find output from output.xml
And below outputs is a sample of RSSL trace messages for original message and decoded data from MRN Real-Time News RIC, the utility will write MRN JSON data in the XML comment tag.
Original XML Fragment.
<!-- Incoming Message from '192.168.27.48:14002' on 'localhost' interface -->
<!-- Time: 10:33:47:897 -->
<!-- rwfMajorVer="14" rwfMinorVer="0" -->
<updateMsg domainType="RSSL_DMT_NEWS_TEXT_ANALYTICS" streamId="3" containerType="RSSL_DT_FIELD_LIST" flags="0x1D2 (RSSL_UPMF_HAS_PERM_DATA|RSSL_UPMF_HAS_SEQ_NUM|RSSL_UPMF_DO_NOT_CACHE|RSSL_UPMF_DO_NOT_CONFLATE|RSSL_UPMF_DO_NOT_RIPPLE)" updateType="0 (RDM_UPD_EVENT_TYPE_UNSPECIFIED)" seqNum="55070" permData="0308 4310 229C" dataSize="750">
<dataBody>
<fieldList flags="0x8 (RSSL_FLF_HAS_STANDARD_DATA)">
<fieldEntry fieldId="4148" data="C2A2 76"/>
<fieldEntry fieldId="17" data="1B08 07E2"/>
<fieldEntry fieldId="8593" data="5354 4F52 59"/>
<fieldEntry fieldId="8506" data="32"/>
<fieldEntry fieldId="11787" data="3130"/>
<fieldEntry fieldId="32480" data="027A"/>
<fieldEntry fieldId="32479" data="01"/>
<fieldEntry fieldId="4271" data="4349 4635 4B63 684C 365F 3138 3038 3237 322B 456B 544E 6B67 5A4A 6A53 6B34 7A62
4371 3953 5472 614A 5A79 3573 666B 6761 4363 4762 6635"/>
<fieldEntry fieldId="12215" data="4854 435F 5052 445F 41"/>
<fieldEntry fieldId="32641" data="1F8B 0800 0000 0000 02FF 8D53 5B4F 1351 107E F757 98F3 6A5B F7EC D91B FB46 4AAD
DC96 DAAD D154 8C39 6D4F CBD2 B294 BD10 8A31 410D D114 C510 8D1A 8D51 498C 128C
A948 9020 E99F 81DD C293 7FC1 D9DD 9616 9EDC 8799 6F66 BE3D 33BB DF9C FB88 D69C
D112 5291 991C BD26 8E17 6726 2414 43D4 2D19 CC2C 321B A977 9096 51A1 A6A3 BB31
5498 2F35 80EB BFD9 F39B 5FE2 18AB 84FB 7BF8 ACD3 5EF7 561F 7BAB 1BC7 07EF FCDD
9D93 DDAF DEFE 4320 1CFF F93D 6D4D 9B10 784F B72F 9F7B 3AEB 2DA8 46D8 7FFB CD7F
B5D7 259F BCD8 F1DA 6BDE 8FB6 DFDC EEEC 6E46 0C91 2488 240F 6021 A0FA AF5B 5EF3
93F7 E133 34EF 9D8B A148 C43E 1694 90F9 AB75 FA72 F3DC 0084 4F88 A48F 252E E09D
6E7D 8761 0769 4282 1B52 B81E C69C 1CF2 BCE7 2DAF 75D8 79DF 1E60 6241 C25C 1F13
393C F0E3 D6C0 7061 0963 21C1 0F60 12F0 8E0F 0EFC D6C6 85DE F0C4 2327 2514 8E84
9D41 9BB2 61D9 4ED2 62D4 6181 6E3C 8795 38A7 C479 39C7 1195 F02A 1113 8224 E681
39C3 68A9 6698 0C58 472B CD48 1CFF E713 6FFF 5124 CED1 CA5A 4F42 7CA6 61F4 AF2F
C800 8719 41B3 B31D B987 154E E165 FE4A AA9A D3AA 95FC D8AC 5E15 960B C985 213D
67D1 B17C 43B4 CBD5 0A4D 16D3 85B2 18BC 6DDA 0E0D 166A AA0C 2B05 9B54 A366 C5A5
9560 B6E5 1920 CC31 DB86 30D7 A843 8A87 D898 EB06 C861 4BCE D5A5 78BD 460D 335E
3696 E0B3 63A8 6ECD 2F1A 2566 415D D383 FD0C 726E 4177 A8E3 C2D6 2268 E7A8 AE4D
0B35 0615 DB2D CCB2 A213 AE73 5AC5 9049 AB52 68E5 9BA1 1B0F AD0E 7652 C537 4642
9F92 43A7 8536 0B56 E3D5 617D 74B8 876E 6786 9311 4EF5 D3A9 C96C 3A42 E994 1681
89FC F51E D023 9099 9A88 402E 3BD2 05B7 82EB E5D0 2AD3 D982 1B5C 3DA4 E218 72AD
0A60 B872 2486 1699 651B F3E6 7F28 FFE0 D23F 14A1 A54F D703 0000"/>
</fieldList>
</dataBody>
</updateMsg>
Decoded data inside fieldEntry element containing additional attributes in the fieldEntry that are fieldName and decodedData. For the updateMsg type for domainType RSSL_DMT_NEWS_TEXT_ANALYTICS, it has additional XML comments after the last MRN fragment containing the same GUID.
<!-- Incoming Message from '192.168.27.48:14002' on 'localhost' interface -->
<!-- Time: 10:33:47:186 -->
<!-- rwfMajorVer="14" rwfMinorVer="0" -->
<updateMsg domainType="RSSL_DMT_NEWS_TEXT_ANALYTICS" streamId="3" containerType="RSSL_DT_FIELD_LIST" flags="0x1D2 (RSSL_UPMF_HAS_PERM_DATA|RSSL_UPMF_HAS_SEQ_NUM|RSSL_UPMF_DO_NOT_CACHE|RSSL_UPMF_DO_NOT_CONFLATE|RSSL_UPMF_DO_NOT_RIPPLE)" updateType="0 (RDM_UPD_EVENT_TYPE_UNSPECIFIED)" seqNum="54990" permData="0308 4310 121B 1026 0B10 263B 1027 6B10 299B 1228 6B12 289B 1229 1B12 329C" dataSize="603">
<dataBody>
<fieldList flags="0x8 (RSSL_FLF_HAS_STANDARD_DATA)">
<fieldEntry fieldId="4148" fieldName="TIMACT_MS" decodedData="3:32:34:972" data="C2A0 1C" />
<fieldEntry fieldId="17" fieldName="ACTIV_DATE" decodedData="27/8/2018" data="1B08 07E2" />
<fieldEntry fieldId="8593" fieldName="MRN_TYPE" decodedData="STORY" data="5354 4F52 59" />
<fieldEntry fieldId="8506" fieldName="MRN_V_MAJ" decodedData="2" data="32" />
<fieldEntry fieldId="11787" fieldName="MRN_V_MIN" decodedData="10" data="3130" />
<fieldEntry fieldId="32480" fieldName="TOT_SIZE" decodedData="487" data="01E7" />
<fieldEntry fieldId="32479" fieldName="FRAG_NUM" decodedData="1" data="01" />
<fieldEntry fieldId="4271" fieldName="GUID" decodedData="Fit8qHst3_1808271dUZiszrYcZVxzs/aOiAgzzPesf2pQPC9AJY/p" data="4669 7438 7148 7374 335F 3138 3038 3237 3164 555A 6973 7A72 5963 5A56 787A 732F 614F 6941 677A 7A50 6573 6632 7051 5043 3941 4A59 2F70" />
<fieldEntry fieldId="12215" fieldName="MRN_SRC" decodedData="HTC_PRD_A" data="4854 435F 5052 445F 41" />
<fieldEntry fieldId="32641" fieldName="FRAGMENT" decodedData="1F8B08000000000002FF8D92C1729B301086EF7D0A46975E92DAE0C660DD04089BD4088220A9DDE9746423BBB40E2648646267FAEE9580DAD75EF6FFF6D70AED0ABD037690610120A882523A2F0B2127E006B0B62879B5E502C06F8024D0579E12DC4BD44B06BEDF80CDB138A9DDCAD9958D905EC399E4FA7BD6D8746EC7CEAD6567E3099C58D0B23F7DB6666B55F993B3E250565C550561E62DA091A22C2473232686B70809328238CD72828D2522FE476AB831F18D9CA020C05E867DC35D19194A8C90D21C114F7755EA232F13FC309DB163D96691AF4B716E56DBF5E3DB598C585CA2FDF99C70B1B3EA87C49BA1FBD5A8D6BB2B21991E37DEA981D5540756ED5BB6D71DF24A153C7321549A9D6A65992A2F9F870448FE2647F58195BAAE6E8EAF65C11BE5130AD32CA5DA6C375432D9AACB04EA1C095BC13607AE5644BBF9C5B7B2BB65042DE52098ABE8427366776ADDDD0D3AED743AEBC4EE5D5B176138ED22E9E2938A73687671DA45B74FBE7451F71341F3C1EFF5E97E50BD4A2C88101A808617FA9A20AF67CF8F062083C62449AF48075C79C995C6CE85AFEBF49FEBBB590FF87A248ED2794F81B7E861114778208ADDA5DF7348F31E96786828C28F443F4BC97E73CA5F5AFD88BB3FD6367BC5A78E5F7923CA63F51F6FF5CF87BF09CC834221030000" data="1F8B 0800 0000 0000 02FF 8D92 C172 9B30 1086 EF7D 0A46 975E 92DA E0C6 60DD 0408 9BD4 0882 20A9 DDE9 7464 23BB B40E 2648 6462 67FA EE95 80DA D75E F6FF F6D7 0AED 0ABD 0376 9061 0120 A882 523A 2F0B 2127 E006 B0B6 2879 B5E5 02C0 6F80 24D0 579E 12DC 4BD4 4B06 BEDF 80CD B138 A9DD CAD9 958D 905E C399 E4FA 7BD6 D874 6EC7 CEAD 6567 E309 9C58 D0B2 3F7D B666 6B55 F993 B3E2 5056 5C55 0561 E62D A091 A22C 2473 2326 86B7 0809 3282 38CD 7282 8D25 22FE 476A B831 F18D 9CA0 20C0 5E86 7DC3 5D19 194A 8C90 D21C 114F 7755 EA23 2F13 FC30 9DB1 63D9 6691 AF4B 716E 56DB F5E3 DB59 8C58 5CA2 FDF9 9C70 B1B3 EA87 C49B A1FB D5A8 D6BB 2B21 991E 37DE A981 D554 0756 ED5B B6D7 1DF2 4A15 3C73 2154 9A9D 6A65 992A 2F9F 8704 48FE 2647 F581 95BA AE6E 8EAF 65C1 1BE5 130A D32C A5DA 6C37 5432 D9AA CB04 EA1C 095B C136 07AE 5644 BBF9 C5B7 B2BB 6504 2DE5 2098 ABE8 4273 6677 6ADD DD0D 3AED 743A EBC4 EE5D 5B17 6138 ED22 E9E2 938A 7368 7671 DA45 B74F BE74 51F7 1341 F3C1 EFF5 E97E 50BD 4A2C 8810 1A80 8617 FA9A 20AF 67CF 8F06 2083 C624 49AF 4807 5C79 C995 C6CE 85AF EBF4 9FEB BB59 0FF8 7A24 8ED2 794F 81B7 E861 1147 7820 8ADD A5DF 7348 F31E 9678 6828 C28F 443F 4BC9 7E73 CA5F 5AFD 88BB 3FD6 367B C5A7 8E5F 7923 CA63 F51F 6FF5 CF87 BF09 CC83 4221 0300 00" />
</fieldList>
</dataBody>
</updateMsg>
<!--{
"altId": "nFit8qHst3",
"audiences": [
"NP:D",
"NP:E",
"NP:M",
"NP:T"
],
"body": "",
"firstCreated": "2018-08-27T03:32:27.429Z",
"headline": "FITCH: RATING ON CHINA FORTUNE LAND'S BOND UNAFFECTED BY TAP ISSUANCE",
"id": "Fit8qHst3_1808271dUZiszrYcZVxzs/aOiAgzzPesf2pQPC9AJY/p",
"instancesOf": [],
"language": "en",
"messageType": 1,
"mimeType": "text/plain",
"provider": "NS:RTRS",
"pubStatus": "stat:usable",
"subjects": [
"A:2",
"A:U",
"B:197",
"B:255",
"B:256",
"B:69",
"B:75",
"B:77",
"E:6",
"E:N",
"E:W",
"G:1",
"G:6",
"G:B1",
"G:K",
"G:S",
"M:1QD",
"M:1WJ",
"M:1WK",
"N2:AAA",
"N2:ASIA",
"N2:ASXPAC",
"N2:CDM",
"N2:CN",
"N2:CONPR",
"N2:CONPS",
"N2:CYCP",
"N2:CYCP08",
"N2:CYCS",
"N2:CYCS08",
"N2:DBT",
"N2:EASIA",
"N2:EMRG",
"N2:FCH",
"N2:HOME",
"N2:HSEBLD",
"N2:ISU",
"N2:LEN",
"N2:MEVN"
],
"takeSequence": 1,
"urgency": 1,
"versionCreated": "2018-08-27T03:32:27.429Z"
}-->
Note that there is command line option "--verbose" which can print JSON output to console while the utility processing the data.
In addition to using the utility to decode MRN data, as described in the overview section, the application can be used to decoded data for the Level 2 Market Price data and below is a sample output for the Market By Order domain when using the utility convert the data.
<!-- Incoming Message from '192.168.27.46:14002' on 'localhost' interface -->
<!-- Time: 13:05:27:756 -->
<!-- rwfMajorVer="14" rwfMinorVer="0" -->
<updateMsg domainType="RSSL_DMT_MARKET_BY_ORDER" streamId="4" containerType="RSSL_DT_MAP" flags="0x10 (RSSL_UPMF_HAS_SEQ_NUM)" updateType="0 (RDM_UPD_EVENT_TYPE_UNSPECIFIED)" seqNum="15600" dataSize="79">
<dataBody>
<map flags="0x2 (RSSL_MPF_HAS_SUMMARY_DATA)" countHint="0" keyPrimitiveType="RSSL_DT_BUFFER" containerType="RSSL_DT_FIELD_LIST">
<summaryData>
<fieldList flags="0x8 (RSSL_FLF_HAS_STANDARD_DATA)">
<fieldEntry fieldId="4148" fieldName="TIMACT_MS" decodedData="6:3:44:900" data="014D 0584" />
</fieldList>
</summaryData>
<mapEntry flags="0x0" action="RSSL_MPEA_ADD_ENTRY" key="5@4159CC03">
<fieldList flags="0x8 (RSSL_FLF_HAS_STANDARD_DATA)">
<fieldEntry fieldId="3427" fieldName="ORDER_PRC" decodedData="67.65" data="0B01 0842" />
<fieldEntry fieldId="3429" fieldName="ORDER_SIZE" decodedData="2000" data="0E07 D0" />
<fieldEntry fieldId="3428" fieldName="ORDER_SIDE" decodedData="BID(1)" data="01" />
<fieldEntry fieldId="3426" fieldName="ORDER_ID" decodedData="1096403971" data="3130 3936 3430 3339 3731" />
<fieldEntry fieldId="6520" fieldName="PR_TIM_MS" decodedData="6:3:44:900" data="014D 0584" />
<fieldEntry fieldId="6522" fieldName="PR_DATE" decodedData="4/10/2018" data="040A 07E2" />
</fieldList>
</mapEntry>
</map>
</dataBody>
</updateMsg>
<!-- Incoming Message from '192.168.27.46:14002' on 'localhost' interface -->
<!-- Time: 13:05:29:276 -->
<!-- rwfMajorVer="14" rwfMinorVer="0" -->
<updateMsg domainType="RSSL_DMT_MARKET_BY_ORDER" streamId="4" containerType="RSSL_DT_MAP" flags="0x10 (RSSL_UPMF_HAS_SEQ_NUM)" updateType="0 (RDM_UPD_EVENT_TYPE_UNSPECIFIED)" seqNum="15616" dataSize="79">
<dataBody>
<map flags="0x2 (RSSL_MPF_HAS_SUMMARY_DATA)" countHint="0" keyPrimitiveType="RSSL_DT_BUFFER" containerType="RSSL_DT_FIELD_LIST">
<summaryData>
<fieldList flags="0x8 (RSSL_FLF_HAS_STANDARD_DATA)">
<fieldEntry fieldId="4148" fieldName="TIMACT_MS" decodedData="6:3:46:400" data="014D 0B60" />
</fieldList>
</summaryData>
<mapEntry flags="0x0" action="RSSL_MPEA_ADD_ENTRY" key="5@415ADF03">
<fieldList flags="0x8 (RSSL_FLF_HAS_STANDARD_DATA)">
<fieldEntry fieldId="3427" fieldName="ORDER_PRC" decodedData="67.7" data="0B01 0874" />
<fieldEntry fieldId="3429" fieldName="ORDER_SIZE" decodedData="14800" data="0E39 D0" />
<fieldEntry fieldId="3428" fieldName="ORDER_SIDE" decodedData="ASK(2)" data="02" />
<fieldEntry fieldId="3426" fieldName="ORDER_ID" decodedData="1096474371" data="3130 3936 3437 3433 3731" />
<fieldEntry fieldId="6520" fieldName="PR_TIM_MS" decodedData="6:3:46:400" data="014D 0B60" />
<fieldEntry fieldId="6522" fieldName="PR_DATE" decodedData="4/10/2018" data="040A 07E2" />
</fieldList>
</mapEntry>
</map>
</dataBody>
</updateMsg>
Launching the tool from the executable file
There is an option for .NET Core application to publish the project to the native executable file and then you can run executable file directly without using dotnet command on windows, mac os, and Linux. You can refer to MSDN Document for dotnet command line option to publish the project.
To generate a native executable file on Windows, you can run
dotnet publish -c release -r win-x64
You should see the following output when executing dotnet publish command.
C:\gitrepo\Example.EMARFACPP.Tool.RSSLTraceViewer\rsslxmltracedataconverter>dotnet publish -c release -r win-x64
Microsoft (R) Build Engine version 15.7.179.6572 for .NET Core
Copyright (C) Microsoft Corporation. All rights reserved.
Restoring packages for C:\gitrepo\Example.EMARFACPP.Tool.RSSLTraceViewer\rsslxmltracedataconverter\rsslxmltracedataconverter.csproj...
Generating MSBuild file C:\gitrepo\Example.EMARFACPP.Tool.RSSLTraceViewer\rsslxmltracedataconverter\obj\rsslxmltracedataconverter.csproj.nuget.g.props.
Generating MSBuild file C:\gitrepo\Example.EMARFACPP.Tool.RSSLTraceViewer\rsslxmltracedataconverter\obj\rsslxmltracedataconverter.csproj.nuget.g.targets.
Restore completed in 1.58 sec for C:\gitrepo\Example.EMARFACPP.Tool.RSSLTraceViewer\rsslxmltracedataconverter\rsslxmltracedataconverter.csproj.
rsslxmltracedataconverter -> C:\gitrepo\Example.EMARFACPP.Tool.RSSLTraceViewer\rsslxmltracedataconverter\bin\release\netcoreapp2.1\win-x64\rsslxmltracedataconverter.dll
1 file(s) copied.
1 file(s) copied.
rsslxmltracedataconverter -> C:\gitrepo\Example.EMARFACPP.Tool.RSSLTraceViewer\rsslxmltracedataconverter\bin\release\netcoreapp2.1\win-x64\publish\
After executing the command, you can find a native executable file named "rsslxmltracedataconverter.exe", it should be located under the folder "\bin\release\netcoreapp2.1\win-x64" and then you can copy or share the folder in order to run the utility on other Windows.
To use the utility then you can just executing the following command.
c:\<Project Publish Folder>\rsslxmltracedataconverter.exe -s <XML file path>
For macOS and Linux you can just change the Runtime Identifier from win-x64 to osx-x64 and linux-x64 according to the list from the rid-catalog page.
Then you can run the utility from a publishing folder by executing the command
./rsslxmltracedataconverter -s <XML file path>
Just like executing another native application on macOS or Linux.
Contributing
Please read CONTRIBUTING.md for details on our code of conduct, and the process for submitting pull requests to us.
Authors
- Moragodkrit Chumsri - Release 1.0. Initial work
License
This project is licensed under the MIT License - see the LICENSE file for details