Building and Traversing XML are regular tasks for any Web Service developer. We may use DOM, AXIOM or even simple String manipulation functions to do that. Normally this takes a lot of time and effort. And if we are coding in ‘C’ it become more tedious as string manipulation in ‘C’ is not that straight forward.
What ADB does is it generates a set of ‘C’ functions specially for our XML Schema to build and traverse the XML.
Say you have the following XML Schema. (You need to have it inside a WSDL to generate the code).
<xs:schema targetNamespace="http://dimuthu.org/adb/demo/2008/sept"> <!-- demonstrating element--> <xs:element name="myDemo"> <xs:complexType> <xs:sequence> <xs:element name="demo1" type="xs:int"/> <xs:element name="demo2" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> <xs:schema/>
For this particular element there will be one adb type (adb_myDemo_t), one source (adb_myDemo.c) and one header (adb_myDemo.h) are generated. Don’t ever look at the source file (unless you want to hack it) just go through the header, it will have all the function you need to manipulate your ADB.
It will have following set of functions,
To create and free the object
First we will check how to build a simple XML using an ADB object.
adb_myDemo_t *mydemo = adb_myDemo_create(env); adb_myDemo_set_demo1(mydemo, env, 3); /* some arbitrary value */ adb_myDemo_set_demo2(mydemo, env, "some arbitrary string"); axiom_t *xml = adb_myDemo_serialize(mydemo, env, NULL, NULL, AXIS2_TRUE, NULL, NULL);
So now we have the AXIOM representation of the XML which we just build using ADB.
<ns0:myDemo xmlns:ns0="http://dimuthu.org/adb/demo/2008/sept"> <ns0:demo1>3</ns0:demo1> <ns0:demo2>some arbitrary string</ns0:demo2> </ns0:myDemo>
Anyway ADB is easier when you want to navigate through an XML. (you can read data randomly as you preferred). Here we starting from the AXIOM representation of our XML.
adb_myDemo_t *mydemo= adb_myDemo_create( env); adb_myDemo_deserialize(mydemo, env, &xml, NULL, AXIS2_FALSE)) int demo1 = adb_myDemo_get_demo1(mydemo, env); printf("My Demo1 is: %d\\n", demo1); axis2_char_t *demo2 = adb_myDemo_get_demo2(mydemo, env); printf("My Demo2 is: %s\\n", demo2);
I have printed the Data contained in the XML with the help of ADB objects.
In ordre to download the Codegen tool with ADB you have to download the Axis2/Java package.
If you want to learn more about ADB, Just go through more Axis2/C Codegen / ADB resources which I have blogged few weeks ago.