Salome HOME
PR: merge from BR_DATACONV_PR tag "mergeto_trunk_25oct06"
[modules/yacs.git] / src / runtime / XMLCORBAConv.cxx
1
2 #include "XMLCORBAConv.hxx"
3 #include "CORBAXMLConv.hxx"
4 #include "TypeConversions.hxx"
5
6 #include <libxml/parser.h>
7 #include <iostream>
8
9 using namespace YACS::ENGINE;
10 using namespace std;
11
12 XmlCorba::XmlCorba(InputCorbaPort* p)
13   : ProxyPort(p), Port(p->getNode())
14 {
15   cerr << "proxy port from XML to CORBA" << endl;
16 }
17
18 void XmlCorba::put(const void *data) throw(ConversionException)
19 {
20   cerr << " XmlCorba::put(const void *data)" << endl;
21   put((const char *)data);
22 }
23
24 //!Convertit la valeur XML (char *) recue en CORBA::Any et la transmet au proxy port
25  /*!
26   *   \param data : Xml::char *
27   */
28
29 void XmlCorba::put(const char *data) throw(ConversionException)
30 {
31   cerr << "XmlCorba::put " << data << endl;
32   xmlDocPtr doc;
33   xmlNodePtr cur;
34   CORBA::Any *a;
35   
36   doc = xmlParseMemory(data, strlen(data));
37   cur = xmlDocGetRootElement(doc);
38   while (cur != NULL)
39     {
40       if ((!xmlStrcmp(cur->name, (const xmlChar *)"value")))
41         {
42           a=convertCorbaXml(type(),doc,cur);
43           break;
44         }
45       cur = cur->next;
46     }
47   xmlFreeDoc(doc);
48   xmlCleanupParser();
49   _port->put(a);
50   cerr << "Fin XmlCorba" << endl;
51 }