This file contains release notes on the version 1.4 release of the XBinder XML schema compiler.
Thank you for downloading the XBinder XML schema compiler software. XBinder is an XML data-binding tool for working with XML schema definitions. It creates compatible C or C++ structures/classes and encoders and decoders to allow rapid translation between XML documents and C or C++ program variables. This release generates C or C++ code that can encode/decode to and from XML.
This package contains the XBinder compiler executable, run-time libraries, documentation and sample programs.
This release of XBinder is a close follow-on to the 1.3 release. The main reason for the new release is to address some issues in the handling of XSD complexContent types. It was made into a new major release since it changed the way code was generated in some cases. The following lists new capabilities of this release as well as the 1.3 release:
- Improved handling of XSD derived types
- The handling of XSD complexContent extensions and restrictions when used with the xsi:type attribute was the major item addressed in this release. The result was a change in the code generation model to handle all possible known derivations cases. It should now be possible to encode or decode any type of extension or restriction that uses xsi:type with XBinder.
- Improved support for WSDL/SOAP
- WSDL code generation capabilities were significantly enhanced. Code is now generated at the operation bindings level for input, output, and fault message types. This differs from the previous versions in which code was only generated for abstract message definitions. A '-genstubs' command-line option has also been added to allow direct generation of a web-service interface supporting WSDL/SOAP over HTTP.
- Support for SOAP version 1.2
- An additional part of the WSDL/SOAP improvements is support for SOAP version 1.2. Command-line switches (-soap11 or -soap12) can be used to select the version of SOAP being used. The default if -soap is specified is 1.2.
- Support for XML canonicalization (C14N)
- XML instances can now be directly encoded in canonical form in accordance with the C14N standard ( http://www.w3.org/TR/xml-c14n). This is accomplished by specifying -c14n on the command-line or by using the rtXmlSetEncC14N run-time function.
- Preliminary support added for Efficient XML Interchange (EXI)
- A run-time API and utility programs (xml2exi and exi2xml) have been added to support the initial draft of the W3C Efficient XML Interchange (EXI) recommendation ( ). This API allows XML instances to be efficiently compressed into a much smaller form for transmission across low bandwidth links.
- Support added for standard gzip compression
- The -zip option was added for use in the generation of reader and writer programs to add calls to zlib functions to do standard gzip compression. (Note that zlib must be installed separately to use this functionality).
- Support added for mixed content
- Special code is now generated for mixed content that is very similar to code generated for xsd:any. A standard character string element is added to a generated structure which can accept any comination of tags and data. Content is validated to make sure it is well-formed XML before being added to an encoded document. Mixed-content handling can be switched off by using the -nomixed option to indicate that the mixed fields should be handled as ordinary fields.
- Configuration options for XSD to C/C++ type mapping
- Configuration options were added to allow custom mappings of certain XSD types to specific C/C++ types. For example, XSD floating point types can be mapped to a character string type if preservation of the format of the numbers is desired.
- Option added to allow use of C++ STL types
- A command-line switch (-usestl) has been added for C++ that causes C++ standard template library (STL) classes to be used in some place when C++ code is generated. In particular, the STL string class will be used for character string data and the STL vector class for repeating items.
In an ongoing effort to improve the product, changes have been made in how code is generated in some cases. Users of previous versions of the compiler may be able to achieve backward compatility with their existing code bases by using the compiler '-compat' switch (for example, '-compat 1.0' will generate code compatible with the 1.0 version of the compiler). This is not guaranteed to work, however. Some of the changes described below will require updates to existing code if the latest version of the product is to be used.
The following is a summary of changes that were made in code generation for this release:
- C++ code generated for complexContent types. In previous releases, C++ classes generated for complexContent extensions would inherit from the base class of the type being extended and would add the extension items. The new model has the generated class including all content items from the base type as well as the extension items in the generated class. The class is then derived from a special abstract derivations class.
- Code generation for WSDL operations. Code is no longer generated for the 'message' elements within a WSDL specification. These were found to be abstract and only have meaning when used in 'operation' and 'binding' declarations. Code is now generated for input, output, and fault declarations.
- The function prototype for the generated decode function for a WSDL operation has also changed. It now includes an argument for a message fault structure. This makes it possible to directly decode a SOAP response message and have either the standard response or fault structure populated.
- Code generated for the xsd:anyType definition has been changed. Previously, only a string was used for these items; but this provided no way to capture attributes which are allowed as part of the type. The new type is a structure with a generic list for attributes and a string for content.
The XBinder C/C++ User's Manual and Runtime Reference Manual are available in the doc subdirectory of the installation. These manuals are also available online in HTML and PDF formats at the following URL:
The system requirements for this software are as follows:
- Microsoft Windows operating system (Windows 2000 or later)
- Microsoft Visual C++ version 6.0 or .NET, Borland C++ v5.5 or higger, or GNU gcc 3.2 or higher.
The steps to install XBinder on a Windows system are as follows:
- Download the XBinder package for Windows. This is located at the following URL:
- XBinder for Windows is packaged in a self-extracting executable file format. To install, all that should be necessary is to double-click this file after downloading and then following the setup wizard instructions from that point.
- This release of this product has an associated license file that allows the product to operate on licensed host computers. The evaluation version uses a time-limited license that expires after the evaluation period (typically 30 to 45 days). After installation is complete, this license file must be installed to allow the product to operate. This was sent in the osyslic.txt file that was attached to the E-mail message that was sent at the time the product was downloaded. If you did not receive a license file, please contact us.
- The osyslic.txt file must be copied to a location where the compiler can find it. This can be done in one of the following ways:
- a. The file can be copied into any of the directories specified within your PATH environment variable (copying to the c:\windows directory works on most systems), or
- b. The file can be copied to a different directory and an environment variable named 'OSLICDIR' created to point at this directory location.
- c. The file can be copied into the same directory as the XBinder executable file (xbinder.exe). This would be the bin subdirectory of the installation root directory.
The compiler should now be operational. The following command can be executed from a command prompt to verify operation:<rootdir>\bin\xbinder
The system requirements for this software are as follows:
- Linux (x86), Solaris (sparc or x86), HP-UX (PA-RISC or Itanium), IBM AIX 5.3, or Apple Mac OSX 10.3 or higher
- GNU gcc 3.2 or higher or native C or C++ compiler
The steps to install XBinder on a Linux/UNIX system are as follows:
- Download one of the XBinder distribution package files for Linux or UNIX. The available packages can be found at this URL:
- XBinder for Linux/UNIX is packaged in a gzipped .tar file. To install, unzip the file (gunzip) and untar (tar xf) in any directory. Note that in order to run the sample programs, write access to the sample directories is required, so make sure that you have write access to the base directory where the package is installed.
- This release of XBinder has an associated license file that must be installed to allow the compiler to operate. See the section on Windows installation for details on installing this license file.
The compiler should now be operational. The following command can be executed from a command prompt to verify operation:<rootdir>/bin/xbinder
The following subdirectories contain the following files (note: <installdir> refers to the installation directory that was specified during the installation process):
- The command-line compiler executable file. This program is invoked on XML schema source files to generate C or C++ encode/decode structures and functions. It is recommended you modify your PATH environment variable to include <installdir>/bin to allow the compiler executable to be run from anywhere.
- A graphical user interface (GUI) wizard program designed to make file selection and specification of user options easier. This wizard will collect all information required to do a compilation and then invoke the command-line version of the compiler with the selected options.
- Utility programs for transforming XML files to/from Efficient XML Interchange (EXI) format.
- This directory contains the XBinder C/C++ Users and Runtime Reference Manual PDF documentation files.
- The XBinder C run-time library files. These contain the low-level XML encode/decode and common runtime functions. For Windows, there is a dynamic link library (.dll) and standard library file (.lib) for linking with the DLL. There is also a static library for direct linkage to the object modules (this is the library file with the '_a.lib' suffix). The static library included in the evaluation version is not thread-safe. A thread-safe version can be provided upon request. For Linux/UNIX, there is a static library (.a) and shared object library (.so or .sl).
- The XBinder C++ run-time library files. These are the same as the C libraries except that they contain the compiled built-in C++ classes as well.
- The sample directories contain sample programs illustrating the use of the compiler. Most sample programs contain a writer and a reader program. The writer encodes a sample XML data record and writes it to a disk file. The reader reads the encoded XML data from the file, decodes it, and then prints the results of the decode operation.
- The installation run-time source directories contain the header files required to compile the compiler generated code.
- The libxml2 parser run-time source directories contain the source files for the libxml2 C XML parser. This is the default SAX parser used with the XBinder XML runtime.
- The XML parser run-time source directories contain the source files for the Expat C XML parser. This is an optional SAX parser that can be configured to work with XBinder.
- XBinder GUI subdirectory. This directory contains the source code and build files for the XBinderGUI. The code in this subdirectory is licensed under the LGPL; therefore, users can modify it to get it running on their target platform. The code makes use of the Trolltech Qt (tm) GUI building software.
- Sample XML schema files. These are public schemas taken from large XML schema-based standards. They are used by some of the sample programs to demonstrate XBinder's ability to compile large, complex schemas.
XBinder contains a Graphical User Interface Wizard that makes specification of options to the compiler easier. The installation procedure should have provided a Start Menu option and Desktop icon for activating this wizard. On Linux/UNIX, the wizard executable is located in the bin subdirectory along with the XBinder command-line executable. The GUI can be started by simply running the GUI executable from the command-line.
To run a simple test of the command-line version of the compiler from Windows or UNIX, do the following:
- Open an MS-DOS or other command shell window.
- Change directory (cd) to the employee sample directory: c/sample/employee.
- Execute the nmake (Windows) or make (Linux/UNIX) utility program:
(note: nmake is a make utility program that comes with the Microsoft Visual C++ compiler. It may be necessary to execute the batch file vcvars32.bat that comes with Visual C++ in order to set up the environment variables to use this utility).
This should cause the compiler to be invoked to compile the employee.xsd sample file. It will then invoke the Visual C++ compiler to compile the generated C file and the test drivers. The result should be a writer.exe and reader.exe program file which, when invoked, will encode and decode a sample employee record.
- Invoke writer from the command line:
This will generate an encoded record and write it to a disk file. By default, the file generated is message.xml. The test program has a number of command line switches that control the encoding. To view the switches, enter writer ? and a usage display will be shown.
- Invoke reader from the command line:
This will read the disk file that was just created by the writer program and decode its contents. The resulting decoded data will be written to standard output. The test program has a number of command line switches that control the encoding. To view the switches, enter reader ? and a usage display will be shown.
The XBinder compiler is designed for use with the type of XML messages used in the XML infoset ( http://www.w3.org/TR/xml-infoset). It is defined for XML messaging applications such as the messages exchanged in a SOAP protocol data exchange as opposed to more free-form applications such as XML document models or database applications.
The following features defined in the 2001 edition of XML Schema are currently not supported:
- Identity Constraints (xsd:unique)
- Redefinition of Schema Components (xsd:redefine)
- final and block properties
It is our desire to make a practical XML data binding tool that can handle the syntax that people use, not something that can handle every possible syntax. So we are interested in hearing what you are using in practice that doesn't work. In other words, if you create overly complex syntax in order to try and break this tool, you probably will.
Report problems you encounter by sending E-mail to firstname.lastname@example.org. The preferred format of example programs is the same as the sample programs. Please provide a writer and reader and indicate where in the code the problem occurs.
If you have any further questions or comments on what you would like to see in the product or what is difficult to use or understand, please communicate them to us. Your feedback is important to us. Please let us know how it works out for you - either good or bad.