Home > Support > XBinder 1.1 Change Log

XBinder v1.1.x Change Log

The current production release version of the XBinder compiler is 1.1.9. The following changes have been made since the last patch release (1.1.8):

  • Fixed bug in which maxOccurs constraint was not being being included in generated SAX handlers. (PR#000622)
  • Fixed erroneous errors reported by the type resolver. (PR#000620)
  • Added support for entities in XML schema. (PR#000619)
  • Fixed C++ decoding of Base64Binary in ComplexContent extension. (PR#000617)
  • Fixed C++ code generation for WSDL message containing a single part of a simple type. (PR#000616)
  • Changed xsd:any processing to use the qualified name instead of the localname. (PR#000612)
  • Fixed bug to properly parse forward references in includes, not just imports. (PR#000610)
  • Fixed buggy code generation, which produced shadowed variables. (PR#000603)
  • Fixed false error ("Missing required attribute") generated when decoding element with 33 attributes including one xsd:anyAttribute. (PR#000600)
  • Fixed crash caused by schema circular inclusion when using the -modularize option. (PR#000599)
  • Fixed C/C++ encoding code generation for attributes defined in the base type of an extension of extension. (PR#000598)
  • Fixed microparser for empty elements <name/> and <name />. (PR#000596)
  • Fixed support for elements creating a subsitution group where the head element is in an imported module. (PR#000594)
  • Fixed C++ code generation for restrictions of XSD enum types. (PR#000593)
  • Fixed variable name collision with OSDynOctStrClass. (PR#000591)
  • Added OSXSDDateTimeClass:setCurrentTz() to set current date and time along the local timezone. (PR#000590)
  • Fixed rtXmlEncEndDocument to always null-terminate the encoded XML document. (PR#000589)
  • Fixed rtxTimeToString() and rtxDateToString() where the timezone was sometimes truncated. (PR#000588)
  • Report errors for element's attribute definitions placed outside of complexType/simpleType. (PR#000587)
  • Fixed buffer overflow in compiler with deeply nested type definition. (PR#000586)

The following changes were made between patch release 1.1.8 and 1.1.7:

  • Fixed XML encoding of carriage return, line feed and tabulation characters. (PR# 000584)
  • Changed OSINT64 definition on GNU platforms to conform to ISO C++ standard and to pass --pedantic-errors checks. (PR# 000580)
  • Fixed -namespace support for C simpleType. (PR# 000579)
  • Fixed code generation for nested xsd:union. (PR #000576)
  • Fixed support for circular chain of complexContent in C++. (PR# 000571)
  • Various GUI fixes.
  • Added support for AIX 5.3.

The following changes were made between patch release 1.1.7 and 1.1.6:

  • Fixed type/element name clash in C union when option -usenspfx was used. (PR# 000543)
  • Fixed crash when encoding/decoding empty normalized strings and tokens. (PR# 000541)
  • Added a configuration parameter "encodingString" (with a schemaBinding scope) to specify the encoding to be used in the XML header. This parameter only affects the XML header. (PR# 000536)
  • Fixed hexBinary decoding, values with an odd number of bytes were not decoded properly (for example "211" was decoded as 02 01, instead of 02 11). (PR# 000532)
  • Fixed regular expression support. (PR# 000525)
  • Fixed -usenspfx support, "_ext" extension element were incorrectly generated without namespace prefix. (PR# 000513)
  • Fixed size calculation of the SaxHandler memory buffer. (PR# 000507)
  • Fixed -genTest support with XML instance to handle comments in test instances. (PR# 000506)
  • Fixed decoding of attributes when anyAttribute is used in conjunction with other attributes. (PR# 000500)
  • Fixed bug in copy constructors of AnyAttr, DynOctStr and XmlString classes. (PR# 000499)

The following changes were made between patch release 1.1.6 and 1.1.5:

  • Fixed a problem in pattern matching constraint checks. If the pattern constant (in schema) is longer than 2048 then VC6/7/7.1 C compilers display "error C2026: string too big, trailing characters truncated". VC compilers have limit on length of constant strings (about 2048 symbols). (PR# 000496)
  • Fixed reserved word check to first apply casing update to element or attribute name before doing check for reserved word. Also added 'small' and 'large' as reserved words (used in VC++). (PR# 000474)
  • If float/double has minInclusive/maxInclusive (or -Exclusive) facets defined in exponential form without decimal point (i.e. 10E20, -10E20) then the generated test condition was omitting the exponent (i.e. was "if (i > 10 || i < -10)..."). (PR# 000493)
  • Fixed a bug in which pattern facet was being dropped on referenced types when the base type did not contain a pattern facet. (PR# 000492).
  • Added support for whitespace facet. Previously was ignored. (PR# 000491)
  • Added a special minimalist SAX parser that could be used to replace the Expat or libxml2 parser in extremely constrained environments. The microparser footprint is only about 10K which is much smaller than the other parsers which are over 100K (PR# 000490)
  • Fixed bug in XBinder GUI in which filenames with embedded spaces were not being handled correctly. (PR# 000485).
  • Added support for 64-bit libraries for Linux x86. (PR# 000480).
  • Fixed bug in handling large integer constants. If the integer constant value is -2147483648 or for long value is -9223372036854775808 then it was neccessary to use (-2147483647-1) or (-9223372036854775807-1) constants to avoid warning "unary minus operator applied to unsigned type, result still unsigned". (PR# 000479)
  • Fixed bug in which sequence with 2 or more element references to the same element was not being handled correctly. (PR# 000478)
  • Fixed bug in encoding, decoding, and print of IDREFS/NMTOKENS/ENTITIES schema types. (PR# 000460, 000461, 000462).

The following changes were made between patch release 1.1.5 and 1.1.4:

  • Added support for Solaris 10 x86 platform.
  • XBinder GUI wizard executable added to the Solaris 8 (SPARC) and Solaris 10 (x86) distribution packages.
  • Fixed bug in which pattern facet on xsd:hexBinary element or attribute was not accepted (PR# 000448).
  • Fixed bug in handling regular expressions of the following form: "(\d{1,3}\.){3}\d{1,3}". This was used to validate an IP address. (PR# 000440).
  • Fixed bug in which C RTL "free" function was called in rtxMemHeapRealloc instead of function specified as memory-free callback. This caused problems for applications with customized memory management. (PR# 000437).
  • XBinderGUI - Support for -pdu <pduname> option has been added. Comma-separated list may be specified for multiple "-pdu" options. Also, generated command-line now is editable. (PR #000435)
  • Added _NO_STREAM flag to exclude stream-related items from run-time libraries completely. (PR# 000433)
  • Also support for static memory heap as an option to replace standard memory management logic. (PR# 000433)
  • Fixed a bug in which enumerations such as "-0", "+2" or "00123" were stored as integers. This made it impossible to restore the original formatting when values were encoded. Modified to stroe values such as this with additional markup as strings. (PR# 000429).
  • The enumTabSize() method was added in C++ code generation for enumerations. This method returns the total number of enumerated items in the enumerated type. (PR# 000425).
  • Fixed problem in generated C++ code in which validation and decode logic did not detect absence of mandatory elements within <xsd:all> and in some cases within <xsd:sequence>. (PR# 000424).
  • XBinderGUI working directory wa beings set to current directory (i.e. project directory in most cases), instead of application directory as before. Modified to set to application directory. (PR# 000422).
  • Fixed bug in which enumerated item lookup was not working correctly if string length parameter passed as an argument was set to -1. This is supposed to indicate that actual length of string is to be used in comparison. (PR# 000421).

The following changes were made between patch release 1.1.4 and 1.1.3:

  • Fixed problem in validation and decode logic in which absence of mandatory elements within <xsd:all> and in some cases, <xsd:sequence> was not detected. (PR #000416)
  • Fixed problem in which application might hang if schema contains very complicated pattern facets. Current solution is to log a warning if such an expression is detected and skip the pattern match. A fix will be done in the next release to allow these patterns to be processed. (PR #000400)
  • Fixed a crash that occurred if pattern constraint was longer than 1000 bytes in length. (PR# 000399)
  • Fixed bug in which -lax option did not work correctly for union members with pattern constraint. (PR# 000398)
  • Added "noPatternTest" option for configuration file. It is possible now to turn off pattern tests for certain types. This is a workaround for PR# 000400 to allow testing of certain known complicated patterns to be turned off. (PR# 000397)
  • Fixed problem with using Libxml2 as the XML parser. By default Libxml2 does not translate "&" into "&" for attribute values and it caused an incompatibility with Expat. Fixed by adding call to "xmlSubstituteEntitiesDefault(1)". (PR# 000396)
  • Fixed a bug in encoding of decimal/double values. Bug appeared only when value 0.01 was encoded. It happened because in this case converted mantissa became 9.9999999999 and after precision correction it became 10.0000000, but it must be [1.0..9.99999] (PR# 000369)
  • Fixed bug in decode/validation code generation. If union had a string member with multiple patterns restriction, the the generated call to rtxMatchPattern2 contained an extra parameter. (PR #000363)
  • Fixed problem with decoding of "any" elements which contained escape characters, such as & < etc. XML parser decodes these escape characters to real ones (& < etc) and this made it impossible to do further decoding of "any" data, because XML data became not well-formed. (PR# 000359)
  • Fixed memory leak which occurred when decoding a list of strings. (PR# 000353)
  • Fixed bug in generated decode logic for <xsd:choice> types containing repeating elements (maxOccurs > 1). (PR# 000352)
  • Fixed bug in which <xsd:list> with zero elements was not handled correctly. By default, minLength is zero if the list is not restricted, but XBinder was setting it to one. Also, if only the minLength facet is specified for a list, then maxLength becomes zero and it led to incorrect code generation. (PR# 000351)
  • Fixed bug in handling mandatory choice group with at least one optional element. If mandatory choice group contains at least one element with minOccurs="0" then the entire group should be treated as optional. (PR# 000350)
  • Fixed bug in generated decode logic for choice groups with optional elements. If 'choice' had element marked as 'minOccurs="0"' the element was decoded, but choice tag ('t') was not set to correct value. It led to incomplete decoding and/or memory leak. (PR# 000349).
  • Fixed bug in decoding and validation of numeric date and time attributes: status variable (stat) was set to incorrect value (non-zero), even if decoding was successful. (PR# 000340).
  • Fixed bug in rtxGetDateTime (const OSXSDDateTime* pvalue, time_t* timeMs) function - it always returned -1. (PR# 000339)
  • Fixed bug with use of <xsd:include> and -modularize with schemas with no namespace definitions. (PR# 000338)
  • Fixed a bug with forward references in C++ code generation. If sequence element has a type which is forward referenced then this element is declared as dynamic. But constructor did not initialize it to zero, and destructor did not delete it. (PR# 000329).

The following changes were made between patch release 1.1.3 and 1.1.2:

  • Fixed bug in which XBinder replaced the closing angle bracket ('>') of an element with a random symbol when it fell exactly on a 32K (0x8000) boundary. (PR #000328)
  • Fixed bug in encoding logic in which namespace prefixes were not being added to qualified attribute names. (PR #000327)
  • Fixed bug in decoding logic in which repeating choice group with a repeating element was not being decoded correctly. (PR #000324)
  • Fixed bug in C++ code generation in which default constructor was declared in header file but not generated in .cpp file for simpleContent with base type base64Binary and hexBinary. (PR #000323)
  • Fixed bug in generated C++ header file if complexContent has optional extension element and -usenspfx option is used. In this case, optional bit mask name for extension element in header file did not contain prefix, but in encode/decode logic it was referred to like it had this prefix. (PR #000321)
  • Fixed bug in the XBinder GUI wizard in which -usepdu option was not presented. (PR #000314)
  • Fixed bug in which -genwriter option was generating incorrect writer.c/.cpp if multiple PDU's were present in the schema. (PR #000313)
  • Fixed bug in makefile generation in which include directories specified with -I were not being included in the IPATHS variable. (PR# 000312)
  • Fixed problems that occured if the same schema is imported and included simultaneously (from different imported modules). (PR# 000310)
  • Fixed bug in C/C++ generated decode logic. If complexContent had a repeating xsd:any type as the base, generated code was not correct. (PR #000307).
  • Modified Mac OS X build to include libraries built with gcc 4.0. These are necessary for use on the latest Mac OS X version (10.4) because libraries built with gcc 3.x are not backward compatible. (PR #000304)
  • Fixed bug in which assertion failure was occuring when using <include> directive with -modularize and schemas with no namespaces. (PR #000299)
  • Fixed bug in which a duplicate name error was being reported if sequence contained several elements with same names. It is legal for elements to the same names as long as they are not ambiguous. (PR #000298)
  • Fixed bug in generated encodeXML method in which an extra new-line symbol was being added before the first element's tag. (PR #000293)
  • Fixed bug in which length returned from OSXMLEncodeBuffer::getMsgLen method was not correct following call to encodeXML method. (PR #000293)
  • Added const modifiers to C++ OSRTDListClass getCount and getItem methods. (PR #000291)
  • Fixed bugs in which constraint checks on xsd:list having minLength or maxLength facets were not done correctly. (PR #000290 and 000275)
  • Fixed bug in which attribute default and fixed values were not being set in certain operations (for example, attribute group reference). (PR #000274)

The following changes were made between patch release 1.1.2 and 1.1.1:

  • Many modifications were made to the logic for generation of sample/test code from an existing XML document for a given schema (option -gentest <xmldoc>). These included adding support for many missing features as well as fixing the correlation of XML document nodes with schema nodes.
  • Fixed bug in the generation of code for substitution groups in which multiple definitions were being generated for a single group. Also fixed problems in generation of code when groups were nested.
  • Fixed bug in pattern-matching code for patterns of this form: "(\d{1,3}\.){3}\d{1,3}". (PR #000270)
  • Fixed crash in encoder if constrained string being encoded contains a null pointer. (PR #000268)
  • Fixed crash in the C++ decoding of certain union types that contained dynamic elements. (PR #000261)
  • Fixed problem in union decoding in case of several union members having same type and only difference is in constraints (pattern, length, min/max values, etc).. (PR #000260)
  • Added following helper methods to C++ OSXMLStringClass:
    c_str : return const char* pointer.
    getValue : return const OSUTF8CHAR* pointer.
    (PR# 000256).
  • Added the following C run-time functions to control formatting of encoded XML data:
    rtXmlSetFormatting : allows formatting to be turned off to produce XML documents with all whitespace between elements to be removed.
    rtXmlSetIndent, rtXmlGetIndent : allows indentation level (number of spaces) to be set or retrieved.
    rtXmlSetIndentChar, rtXmlGetIndentChar - sets/gets character of identation.
    (PR# 000256)
  • Added the following C++ methods to the OSXMLMessageBuffer class to control formatting of encoded XML data:
    getIndent/setIndent : get/set number of indent characters to be used per indent.
    getIndentChar/setIndentChar : get/set the character to be used for indentation (for example, tab or space).
    setFormatting : turn formatting on or off. If formatting is off, all whitespace is removed between elements.
    (PR #000256)
  • Fixed bug in which decoding logic generated for a global element that referenced a simple type was not correct. (PR# 000255)
  • Fixed a problem in parsing and generating code for WSDL files when element name in <types> section is same as message name. (PR# 000249)
  • Added support for 64-bit AIX libraries using the native xlc64 compilers (note: currently only AIX 4.x supported - does not work with AIX 5.x). (PR #000248)
  • Fixed warnings when compiled with VC7 and -Wp64 option. Also GCC warnings with -Wall option. (PR# 000239)
  • Fixed code generation problems when using '-namespace' option. (PR# 000235)
  • Fixed bug in encoding decimal and float/double values. Values were not rounded up correctly.. (PR# 000234)
  • Modified null complex type encode logic to encode elements with only attributes and no content to be in empty form (i.e. <a/> instead of <a></a>).
  • Added xsiTypeAttr field to context to allow xsi:type attribute to be added to top level element in an XML instance. Added C rtXmlSetXSITypeAttr function and C++ OSXSDGlobalElement::setXSIType method to set this value.
  • Modified rtxUTF8Strdup and rtxUTF8Strndup functions to safely handle NULL string argument.
  • Added "not supported" errors to C test code generation if attempt is made to generate test code using an XML instance with an XSI type declaration. C++ test code generation is now supported,
  • Fixed test code generation for xsd:any using an existing XML instance to add attributes.
  • Modified initialization code generation to set elements to default or fixed values if specified in schema.

The following changes were made between patch release 1.1.1 and 1.1.0:

  • Version 1.1.1 package upgraded to contain C/C++ .NET DLL's for both the 2002 and 2003 versions of .NET (previously, only 2002 DLL's were included). Also, both debug and release DLL's are included (previously, only release DLL's were included).
    getErrorInfo method added to OSContext/OSMessageBuffer/OSStream classes to get error information in a memory buffer. A similar function was added for C - rtxErrGetText. These make it possible to get error information for writing to other output mediums such as log files or Windows. (PR #000232)
  • Added C libraries compiled with 'xlc' compiler to AIX version. Previous version contained only 'gcc' C libraries, but they were not compatible with 'xlc' (problem with handling 'long long' types: xlc uses __divi64 internal symbol, gcc uses '__divdi3'). (PR #000230)
  • Fixed the following issues with -genmake:
    a) if '-pdu "*"' is used, the generated makefile contains just '-pdu *' which is incorrect for Unices;
    b) reader and writer executables are not cleaned in the generated makefile for Unix;
    c) if generate makefile from outside of the XBV11x directory (OSROOTDIR) then the generated makefile contains error "path to xmlparser.mk" not found".
    (PR #000229)
  • Fixed handling of INT64 (64-bit integer) data type handling for AIX xlC compiler. (PR #000225)
  • Fixed bug in configuration file: should have at least one <schemaBinding> if using global <doubleFormat> element. Otherwise, generated code is incorrect. (PR# 000224).
  • Fixed problem with encoder when adding namespace prefixes to elements in different types when types are in different namespaces. (PR# 000218)
  • Fixed problem with <anyType> decoding. If an element is defined like: <xsd:element name="anything"/> then it should be decoded as an anyType element. There is a difference between <any> and anyType decoding: while decoding <any> element start and end tags should be included in the decoded data, but for anyType, they should not. (PR #000214)
  • Fixed generation of numeric date/time attributes with default/fixed values (assignment of default value or testing for fixed value). (PR# 000210)
  • Fixed problem with trailing whitespace when decoding integer, boolean, double, decimal, etc types. The previous version reported an error when this condition existed. (PR# 000208)
  • Added support for "default" and "fixed" facets on elements. Was previously only supported for attributes. (PR #000206)
  • Fixed problem is which XBinder for Solaris crashing if XML schema contained extra content after last tag. (PR# 000199)
  • Added explicit type casting for OSUINT16 in C++ GenTest logic for Enumerations. Solaris CC compiler would report "ambiguity error" without the casting. (PR# 000198)
  • Fixed error in compilation of rtXmlExpatIf.obj for use with DLL version of run-time. It led to 'unresolved external _rtxCtypeTable' error message. (PR# 000196)
  • Added rtSaxCppLockXmlLibrary/rtSaxCppUnlockXmlLibrary functions to C++ XML Parser interface. It is necessary for Xerces, where Initialize/Terminate should be called. Usually, Initialize/Terminate methods are being called from 'parse' method. But if multiple calls to 'parse' are necessary it may be a serious performance degradation. (PR# 000195)
  • Added <reservedWords> space separated list in config file. This allows users to prevent name clashes by specifying their own reserved words. (PR# 000191)