FIXML is an XML variant of message representation in the FIX Protocol. It uses the same FIX data dictionary and business logic and focuses primarily on the FIX application messages and does not provide any session layer for transport. FIXML messages can be encapsulated within the FIX Session Protocol or within another protocol such as Message Queue technologies, SOAP etc.
FIXML Converter is a Java library used to work with FIX messages, converting them between FIX and FIXML representations, as shown in the diagram below:
It is based on SAX API for XML parsing and serializing and on FIX Message API of the FIX Antenna Java for FIX message parsing and serializing. It has minimal overhead of CPU time and memory footprint over message parsers and serializers when converting both ways.
To use FIXML Converter classes, it is necessary to add runtime libraries to the Java classpath.
First of all, get a FIXMLConverter instance. The following code snippet shows how to get it using the FIXMLConverterFactory:
FIXMLConverter fixmlConverter = new FIXMLConverterFactory().createConverter(FIXVersion.FIX50SP2);
The following code snippet shows how to convert a parsed FIX message to FIXML string:
FIXMLConverter fixmlConverter = new FIXMLConverterFactory().createConverter(FIXVersion.FIX41); String fixMessage = "8=FIX.4.1\0019=135\00135=D\00134=1\00149=BLP\00150=30737\00156=SCHB\001" + "52=20000809-20:20:50\00197=Y\00111=90001008\0011=10030003\00121=2\001" + "55=TESTA\00154=1\00138=4000\00140=2\00144=30\00159=0\00158=TESTA\00110=062\001"; FIXFieldList fixFieldList = RawFIXUtil.getFIXFieldList(fixMessage.getBytes()); fixmlConverter.convertToFIXML(new FIXMLConverterData(fixFieldList), System.out);
The following code snippet shows how to convert a FIXML string to parsed FIX message:
FIXMLConverter fixmlConverter = new FIXMLConverterFactory().createConverter(FIXVersion.FIX44);
FIXMLConverterData fixmlConverterData = fixmlConverter.convertToFIX(System.in);
FIXFieldList fixFieldList = fixmlConverterData.getFIXFieldLists().get(0);
The following code snippet shows how to convert a parsed FIX message to FIXML message, using a customized XML serializer with bytestream writer:
FIXMLConverter fixmlConverter = new FIXMLConverterFactory().createConverter(FIXVersion.FIX50); FIXFieldList fixFieldList = RawFIXUtil.getFIXFieldList(Utils.toByteArray(System.in)); OutputFormat outputFormat = new OutputFormat(); outputFormat.setEncoding("ISO-2022-JP"); outputFormat.setIndenting(true); outputFormat.setIndent(4); PrintWriter stringWriter = new PrintWriter(System.out); XMLSerializer serializer = new XMLSerializer(stringWriter, outputFormat); serializer.asContentHandler(); fixmlConverter.convertToFIXML(new FIXMLConverterData(fixFieldList), serializer);
The following code snippet shows how to convert a FIXML message to parsed FIX message, using a customized XML parser with bytestream reader:
FIXMLConverter fixmlConverter = new FIXMLConverterFactory().createConverter(FIXVersion.FIX50SP1); XMLReader xmlReader = XMLReaderFactory.createXMLReader(org.apache.xerces.parsers.SAXParser.class.getName()); FIXMLConverterData fixmlConverterData = fixmlConverter.convertToFIX(xmlReader, new InputSource(System.in)); FIXFieldList fixFieldList = fixmlConverterData.getFIXFieldLists().get(0);