Mercurial > repos > ktnyt > gembassy
diff GEMBASSY-1.0.3/gsoap/custom/README.txt @ 0:8300eb051bea draft
Initial upload
author | ktnyt |
---|---|
date | Fri, 26 Jun 2015 05:19:29 -0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/GEMBASSY-1.0.3/gsoap/custom/README.txt Fri Jun 26 05:19:29 2015 -0400 @@ -0,0 +1,69 @@ + +OVERVIEW + +This directory contains custom serializers for common data types. + +CONTENTS + +Custom serializers replace the soapcpp2-generated serialization routines. +See the notes in the source files on specific usage. + +The following serializers are available: + +long_double.* Serializes long double (extended double) type +struct_tm.* Serializes <time.h> struct tm +struct_timeval.* Serializes struct timeval (precision in usec) +duration.* Serializes LONG64 values as xsd:duration + +USAGE + +To use a custom serializer add an import statement to your gSOAP header file: + +#import "struct_tm.h" + +This replaces time_t for xsd__dateTime by struct tm. You can use xsd__dateTime +as XML elements and attributes: + +struct ns__example +{ @xsd__dateTime start; // attribute + xsd__dateTime end; // element +}; + +Then compile with soapcpp2 and cc and link struct_tm.c + +HOW TO MODIFY TYPEMAP.DAT TO AUTOMATE THE MAPPING TO A CUSTOM TYPE WITH WSDL2H + +The mapping is specified in typemap.dat as follows: + +xsd__dateTime = #import "custom/struct_tm.h" + +which maps xsd:dateTime to struct tm when wsdl2h is applied to a WSDL. + +xsd__decimal = #import "custom/long_double.h" | long double + +this maps xsd:decimal to long double (the column after | specifies usage). + +IMPLEMENTING YOUR OWN CUSTOM SERIALIZERS + +To build your own custom serializers: a custom serializer is typically declared +in the imported file as follows + +extern typedef Type X; + +To implement custom serializers you should implement the following routines: + +void soap_default_X(struct soap*, X*); + sets default values for X +void soap_serialize_X(struct soap*, const X*); + analyzes X for id-ref serialization (maybe empty) +int soap_out_X(struct soap*, const char *tag, int id, const X*, const char *type); + emits X in XML as <tag xsi:type=type> (type is optional) +X *soap_in_X(struct soap*, const char *tag, X*, const char *type); + parses X from XML as <tag xsi:type=type> + +To support XML attribute serialization, you should also define: + +int soap_s2X(struct soap*, const char *value, X*); + converts string to X and returns SOAP_OK +const char *soap_X2s(struct soap*, X); + converts X to string (or NULL when error)