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)

