6
#define memsize MAXOUTSIZE
9
Very strange optimization of library function: setAttribute(node,name,value)
10
setAttribute(nodeVar,"name",valueVar); - doesn't copy context of
11
valueVar but simply make a pointer on it. xmlterm() wouldn't free
13
But: setAttribute(nodeVar,"name","value"); - works OK, it copies
14
context of stack variable.
17
oratext nsxsi[64]="http://www.w3.org/2001/XMLSchema-instance";
18
oratext nsenc[64]="http://www.w3.org/2001/12/soap-encoding";
19
oratext nssoap[64]="http://www.w3.org/2001/12/soap-envelope";
20
oratext nsopc[64]="http://opcfoundation.org/webservices/OPCDA/";
25
void initXML(struct TestData *td) {
28
ecode=parser->xmlinit();
31
fprintf(stderr,"Failed to initialze XML parser, error %u\n", (unsigned) ecode);
34
mem = (char*)malloc(memsize);
36
fprintf(stderr,"Can't allocate memory!\n");
42
void releaseXML(struct TestData *td) {
48
void parseXML(struct TestData *td, unsigned long iter) {
50
Element *pnode,*node,*node1,*node2;
52
char str[td->inc][16];;
55
doc=parser->createDocument(nssoap,NULL,NULL);
56
pnode=doc->createElementNS((oratext*)nssoap,(oratext*)"soap:Envelope");
57
doc->appendChild(pnode);
58
pnode->setAttribute((oratext*)"xmlns:soap",(oratext*)nssoap);
59
pnode->setAttribute((oratext*)"xmlns:xsi",(oratext*)nsxsi);
60
pnode->setAttribute((oratext*)"xmlns:enc",(oratext*)nsenc);
61
node=doc->createElementNS(nssoap,(oratext*)"soap:Body");
62
pnode->appendChild(node);pnode=node;
63
node=doc->createElementNS((oratext*)nsopc,(oratext*)"WriteResponse");
64
pnode->appendChild(node);pnode=node;
65
node=doc->createElementNS((oratext*)nsopc,(oratext*)"WriteResult");
66
node->setAttribute((oratext*)"RcvTime",(oratext*)"2002-04-29T10:16:26.6806250+02:00");
67
node->setAttribute((oratext*)"ReplyTime",(oratext*)"2002-04-29T10:16:26.7806250+02:00");
68
node->setAttribute((oratext*)"ClientRequestHandle",(oratext*)"WriteError");
69
node->setAttribute((oratext*)"RevisedLocaleID",(oratext*)"en");
70
node->setAttribute((oratext*)"ServerState",(oratext*)"running");
71
pnode->appendChild(node);
72
node1=doc->createElementNS((oratext*)nsopc,(oratext*)"RItemList");
73
pnode->appendChild(node1);
74
node=doc->createElementNS((oratext*)nsopc,(oratext*)"Errors");
75
node->setAttribute((oratext*)"ID",(oratext*)"E_UNKNOWNITEMID");
76
pnode->appendChild(node);
77
node2=doc->createElementNS((oratext*)nsopc,(oratext*)"Text");
78
node->appendChild(node2);
79
node2->appendChild(doc->createTextNode((oratext*)"The item does not exist in the server address space."));
80
node=doc->createElementNS(nsopc,(oratext*)"Errors");
81
node->setAttribute((oratext*)"ID",(oratext*)"S_CLAMP");
82
pnode->appendChild(node);
83
node2=doc->createElementNS(nsopc,(oratext*)"Text");
84
node->appendChild(node2);
85
node2->appendChild(doc->createTextNode((oratext*)"The value written was accepted but the output was clamped."));
88
node=doc->createElementNS((oratext*)nsopc,(oratext*)"Items");
89
node->setAttribute((oratext*)"ItemPath",(oratext*)"");
90
node->setAttribute((oratext*)"ItemName",(oratext*)"WrongItemID1");
91
node->setAttribute((oratext*)"Timestamp",(oratext*)"0001-01-01T00:00:00.0000000+01:00");
92
node->setAttribute((oratext*)"ErrorID",(oratext*)"E_UNKNOWNITEMID");
93
pnode->appendChild(node);
94
node1=doc->createElementNS((oratext*)nsopc,(oratext*)"Value");
95
node->appendChild(node1);
96
node->setAttribute((oratext*)"xsi:nil",(oratext*)"true");
98
node=doc->createElementNS((oratext*)nsopc,(oratext*)"Items");
99
node->setAttribute((oratext*)"ItemPath",(oratext*)"");
100
node->setAttribute((oratext*)"ItemName",(oratext*)"WrongItemID2");
101
node->setAttribute((oratext*)"Timestamp",(oratext*)"0001-01-01T00:00:00.0000000+01:00");
102
node->setAttribute((oratext*)"ErrorID",(oratext*)"E_UNKNOWNITEMID");
103
pnode->appendChild(node);
104
node1=doc->createElementNS((oratext*)nsopc,(oratext*)"Value");
105
node->appendChild(node1);
106
node->setAttribute((oratext*)"xsi:nil",(oratext*)"true");
108
node=doc->createElementNS((oratext*)nsopc,(oratext*)"Items");
109
node->setAttribute((oratext*)"ItemPath",(oratext*)"/Reals");
110
node->setAttribute((oratext*)"ItemName",(oratext*)"Float1");
111
node->setAttribute((oratext*)"ValueType",(oratext*)"xsd:float");
112
node->setAttribute((oratext*)"Timestamp",(oratext*)"2002-04-29T11:47:18.1493750+02:00");
113
pnode->appendChild(node);
114
node1=doc->createElementNS((oratext*)nsopc,(oratext*)"Value");
115
node->appendChild(node1);
116
node->setAttribute((oratext*)"xsi:type",(oratext*)"xsd:float");
117
node1->appendChild(doc->createTextNode((oratext*)"10.0141414"));
119
node=doc->createElementNS((oratext*)nsopc,(oratext*)"Items");
120
node->setAttribute((oratext*)"ItemPath",(oratext*)"/Reals");
121
node->setAttribute((oratext*)"ItemName",(oratext*)"Float2");
122
node->setAttribute((oratext*)"ValueType",(oratext*)"xsd:float");
123
node->setAttribute((oratext*)"Timestamp",(oratext*)"2002-04-29T11:47:18.1493750+02:00");
124
node->setAttribute((oratext*)"SuccessID",(oratext*)"S_CLAMP");
125
pnode->appendChild(node);
126
node1=doc->createElementNS((oratext*)nsopc,(oratext*)"Value");
127
node->appendChild(node1);
128
node->setAttribute((oratext*)"xsi:type",(oratext*)"xsd:float");
129
node1->appendChild(doc->createTextNode((oratext*)"1.07"));
131
for (i=0;i<td->inc;i++) {
132
node=doc->createElementNS((oratext*)nsopc,(oratext*)"Items");
133
node->setAttribute((oratext*)"ItemPath",(oratext*)"/Integer");
134
node->setAttribute((oratext*)"ItemName",(oratext*)"IntN");
135
node->setAttribute((oratext*)"ValueType",(oratext*)"xsd:int");
136
node->setAttribute((oratext*)"Timestamp",(oratext*)"2002-04-29T11:47:18.1493750+02:00");
137
node->setAttribute((oratext*)"SuccessID",(oratext*)"S_CLAMP");
138
pnode->appendChild(node);
139
node1=doc->createElementNS((oratext*)nsopc,(oratext*)"Value");
140
node->appendChild(node1);
141
node->setAttribute((oratext*)"xsi:type",(oratext*)"xsd:int");
142
sprintf(str[i],"%u",rand());
143
node1->appendChild(doc->createTextNode((oratext*)str[i]));
146
doc->print((oratext*)mem,memsize,0,0);
148
// if (iter+1==td->iterations) puts(mem);
150
// parser->xmlclean();
156
int main(int argc, char *argv[]) {
157
return Test(argc,argv);