1 karl 1.65 //%2005////////////////////////////////////////////////////////////////////////
|
2 mike 1.2 //
|
3 karl 1.61 // Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development
4 // Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.
5 // Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;
|
6 karl 1.51 // IBM Corp.; EMC Corporation, The Open Group.
|
7 karl 1.61 // Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;
8 // IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.
|
9 karl 1.65 // Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
10 // EMC Corporation; VERITAS Software Corporation; The Open Group.
|
11 mike 1.2 //
12 // Permission is hereby granted, free of charge, to any person obtaining a copy
13 // of this software and associated documentation files (the "Software"), to
14 // deal in the Software without restriction, including without limitation the
15 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
16 // sell copies of the Software, and to permit persons to whom the Software is
17 // furnished to do so, subject to the following conditions:
|
18 kumpf 1.25 //
|
19 mike 1.2 // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
20 // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
21 // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
22 // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
23 // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
24 // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
25 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
27 //
28 //==============================================================================
29 //
30 // Author: Mike Brasher (mbrasher@bmc.com)
31 //
32 // Modified By: Nitin Upasani, Hewlett-Packard Company (Nitin_Upasani@hp.com)
33 // Yi Zhou, Hewlett-Packard Company (yi_zhou@hp.com)
34 // Nag Boranna, Hewlett-Packard Company (nagaraja_boranna@hp.com)
35 // Roger Kumpf, Hewlett-Packard Company (roger_kumpf@hp.com)
|
36 kumpf 1.23 // Carol Ann Krug Graves, Hewlett-Packard Company
37 // (carolann_graves@hp.com)
|
38 kumpf 1.36 // Sushma Fernandes, Hewlett-Packard Company
39 // (sushma_fernandes@hp.com)
|
40 david 1.38 // Dave Rosckes (rosckes@us.ibm.com)
|
41 kumpf 1.60 // Seema Gupta (gseema@in.ibm.com) for PEP135
42 // Brian G. Campbell, EMC (campbell_brian@emc.com) - PEP140/phase1
|
43 w.white 1.64 // Willis White, IBM (whiwill@us.ibm.com)
|
44 j.alex 1.68 // John Alex, IBM (johnalex@us.ibm.com) - Bug#2290
|
45 mike 1.2 //
46 //%/////////////////////////////////////////////////////////////////////////////
47
48 #include <Pegasus/Common/Config.h>
49 #include <iostream>
|
50 kumpf 1.15 #include <Pegasus/Common/Constants.h>
|
51 mike 1.2 #include <Pegasus/Common/XmlParser.h>
52 #include <Pegasus/Common/XmlReader.h>
53 #include <Pegasus/Common/System.h>
54 #include <Pegasus/Common/XmlWriter.h>
55 #include <Pegasus/Common/HTTPMessage.h>
56 #include <Pegasus/Common/CIMMessage.h>
|
57 kumpf 1.60 #include <Pegasus/Common/Exception.h>
|
58 mike 1.2 #include "CIMOperationResponseDecoder.h"
59
|
60 w.white 1.64
|
61 humberto 1.43 // l10n
|
62 w.white 1.64 #include <Pegasus/Common/MessageLoader.h>
63
64
|
65 humberto 1.43
|
66 mike 1.2 PEGASUS_USING_STD;
67
68 PEGASUS_NAMESPACE_BEGIN
69
70 CIMOperationResponseDecoder::CIMOperationResponseDecoder(
71 MessageQueue* outputQueue,
72 MessageQueue* encoderQueue,
|
73 karl 1.41 ClientAuthenticator* authenticator,
74 Uint32 showInput)
|
75 mike 1.2 :
|
76 kumpf 1.16 MessageQueue(PEGASUS_QUEUENAME_OPRESPDECODER),
|
77 mike 1.2 _outputQueue(outputQueue),
78 _encoderQueue(encoderQueue),
|
79 karl 1.41 _authenticator(authenticator),
80 _showInput(showInput)
|
81 mike 1.2 {
|
82 j.alex 1.68
|
83 mike 1.2 }
84
85 CIMOperationResponseDecoder::~CIMOperationResponseDecoder()
86 {
87
88 }
89
90 void CIMOperationResponseDecoder::setEncoderQueue(MessageQueue* encoderQueue)
91 {
92 _encoderQueue = encoderQueue;
93 }
94
95 void CIMOperationResponseDecoder::handleEnqueue()
96 {
97 Message* message = dequeue();
98
99 if (!message)
|
100 kumpf 1.60 return;
|
101 mike 1.2
102 switch (message->getType())
103 {
|
104 kumpf 1.60 case HTTP_MESSAGE:
105 {
106 HTTPMessage* httpMessage = (HTTPMessage*)message;
107 _handleHTTPMessage(httpMessage);
108 break;
109 }
|
110 mike 1.2
|
111 kumpf 1.60 default:
|
112 kumpf 1.17 PEGASUS_ASSERT(0);
|
113 kumpf 1.60 break;
|
114 mike 1.2 }
115
116 delete message;
117 }
118
|
119 a.dunfey 1.73 void CIMOperationResponseDecoder::setDataStorePointer(
120 ClientPerfDataStore* perfDataStore_ptr)
121 { dataStore = perfDataStore_ptr;
122 }
123
|
124 mike 1.2 void CIMOperationResponseDecoder::_handleHTTPMessage(HTTPMessage* httpMessage)
125 {
126 //
127 // Parse the HTTP message:
128 //
|
129 w.white 1.67 TimeValue networkEndTime = TimeValue::getCurrentTime();
|
130 w.white 1.64
|
131 j.alex 1.68 String connectClose;
132 String startLine;
|
133 mike 1.2 Array<HTTPHeader> headers;
|
134 j.alex 1.68 char* content;
135 Uint32 contentLength;
136 Boolean cimReconnect=false;
|
137 mike 1.2
|
138 kumpf 1.19 if (httpMessage->message.size() == 0)
|
139 kumpf 1.60 {
140 // l10n
141
142 // CIMClientMalformedHTTPException* malformedHTTPException =
143 // new CIMClientMalformedHTTPException("Empty HTTP response message.");
144
145 MessageLoaderParms mlParms("Client.CIMOperationResponseDecoder.EMPTY_RESPONSE", "Empty HTTP response message.");
146 String mlString(MessageLoader::getMessage(mlParms));
147
148 CIMClientMalformedHTTPException* malformedHTTPException =
149 new CIMClientMalformedHTTPException(mlString);
150
151 ClientExceptionMessage * response =
152 new ClientExceptionMessage(malformedHTTPException);
153
154 _outputQueue->enqueue(response);
155 return;
156 }
|
157 kumpf 1.19
|
158 j.alex 1.68
|
159 mike 1.2 httpMessage->parse(startLine, headers, contentLength);
160
|
161 kumpf 1.19 //
|
162 j.alex 1.68 // Check for Connection: Close
163 //
|
164 j.alex 1.69 if (HTTPMessage::lookupHeader(headers, "Connection", connectClose, false))
|
165 j.alex 1.68 {
166 if (String::equalNoCase(connectClose, "Close"))
167 {
168 //reconnect and then resend next request.
169 cimReconnect=true;
170 }
171 }
172 //
|
173 kumpf 1.19 // Get the status line info
174 //
175 String httpVersion;
176 Uint32 statusCode;
177 String reasonPhrase;
178
179 Boolean parsableMessage = HTTPMessage::parseStatusLine(
180 startLine, httpVersion, statusCode, reasonPhrase);
181 if (!parsableMessage)
182 {
|
183 kumpf 1.60 // l10n
184
185 // CIMClientMalformedHTTPException* malformedHTTPException = new
186 // CIMClientMalformedHTTPException("Malformed HTTP response message.");
187
188 MessageLoaderParms mlParms("Client.CIMOperationResponseDecoder.MALFORMED_RESPONSE", "Malformed HTTP response message.");
189 String mlString(MessageLoader::getMessage(mlParms));
190
191 CIMClientMalformedHTTPException* malformedHTTPException =
192 new CIMClientMalformedHTTPException(mlString);
|
193 kumpf 1.19
|
194 kumpf 1.60 ClientExceptionMessage * response =
195 new ClientExceptionMessage(malformedHTTPException);
|
196 j.alex 1.68
197 response->setCloseConnect(cimReconnect);
|
198 humberto 1.43
|
199 kumpf 1.60 _outputQueue->enqueue(response);
200 return;
|
201 kumpf 1.19 }
202
|
203 karl 1.41 #ifdef PEGASUS_CLIENT_TRACE_ENABLE
204 if (_showInput & 1)
205 {
206 cout << "CIMOperatonResponseDecoder";
207 httpMessage->printAll(cout);
208 }
209 if (_showInput & 2)
210 {
211 Uint32 size = httpMessage->message.size();
212 char* tmpBuf = new char[size+1];
213
214 strncpy( tmpBuf, httpMessage->message.getData(), size );
215 tmpBuf[size] = '\0';
216 Logger::put(Logger::STANDARD_LOG,
|
217 kumpf 1.60 "CIMCLIENT",
218 Logger::TRACE,
219 "CIMOperationRequestDecoder::Response, XML content: $1",
220 tmpBuf);
|
221 karl 1.41 delete []tmpBuf;
222 }
223 #endif
224
|
225 kumpf 1.8 try
|
226 mike 1.2 {
|
227 kumpf 1.8 if (_authenticator->checkResponseHeaderForChallenge(headers))
228 {
229 //
230 // Get the original request, put that in the encoder's queue for
231 // re-sending with authentication challenge response.
232 //
|
233 kumpf 1.70 Message* reqMessage = _authenticator->releaseRequestMessage();
234
|
235 j.alex 1.69 if (cimReconnect == true)
236 {
|
237 kumpf 1.70 reqMessage->setCloseConnect(cimReconnect);
|
238 j.alex 1.69 _outputQueue->enqueue(reqMessage);
239 }
240 else
241 {
242 _encoderQueue->enqueue(reqMessage);
243 }
|
244 mike 1.2
|
245 kumpf 1.8 return;
246 }
247 else
248 {
249 //
250 // Received a valid/error response from the server.
251 // We do not need the original request message anymore, hence delete
252 // the request message by getting the handle from the ClientAuthenticator.
253 //
|
254 kumpf 1.70 Message* reqMessage = _authenticator->releaseRequestMessage();
255 delete reqMessage;
|
256 kumpf 1.8 }
|
257 mike 1.2 }
|
258 kumpf 1.8 catch(InvalidAuthHeader& e)
|
259 mike 1.2 {
|
260 kumpf 1.20 CIMClientMalformedHTTPException* malformedHTTPException =
261 new CIMClientMalformedHTTPException(e.getMessage());
|
262 kumpf 1.17 ClientExceptionMessage * response =
263 new ClientExceptionMessage(malformedHTTPException);
|
264 mike 1.2
|
265 j.alex 1.68 response->setCloseConnect(cimReconnect);
|
266 kumpf 1.17 _outputQueue->enqueue(response);
|
267 kumpf 1.15 return;
268 }
|
269 kumpf 1.36
|
270 kumpf 1.52 // We have the response. If authentication failed, we will generate a
271 // CIMClientHTTPErrorException below with the "401 Unauthorized" status
272 // in the (re-challenge) response.
|
273 kumpf 1.15
274 //
275 // Check for a success (200 OK) response
276 //
|
277 kumpf 1.17 if (statusCode != HTTP_STATUSCODE_OK)
|
278 kumpf 1.15 {
279 String cimError;
280 String pegasusError;
281
|
282 brian.campbell 1.57 HTTPMessage::lookupHeader(headers, "CIMError", cimError, true);
|
283 kumpf 1.15 HTTPMessage::lookupHeader(headers, PEGASUS_HTTPHEADERTAG_ERRORDETAIL, pegasusError);
|
284 kumpf 1.35 try
285 {
286 pegasusError = XmlReader::decodeURICharacters(pegasusError);
287 }
|
288 brian.campbell 1.57 catch (ParseError&)
|
289 kumpf 1.35 {
290 // Ignore this exception. We're more interested in having the
291 // message in encoded form than knowing that the format is invalid.
292 }
|
293 kumpf 1.15
|
294 kumpf 1.32 CIMClientHTTPErrorException* httpError =
|
295 kumpf 1.54 new CIMClientHTTPErrorException(statusCode, reasonPhrase,
296 cimError, pegasusError);
|
297 kumpf 1.17 ClientExceptionMessage * response =
298 new ClientExceptionMessage(httpError);
|
299 kumpf 1.15
|
300 j.alex 1.68 response->setCloseConnect(cimReconnect);
|
301 kumpf 1.15 _outputQueue->enqueue(response);
|
302 kumpf 1.8 return;
|
303 mike 1.2 }
304
305 //
306 // Search for "CIMOperation" header:
307 //
308 String cimOperation;
309
310 if (!HTTPMessage::lookupHeader(
|
311 kumpf 1.60 headers, "CIMOperation", cimOperation, true))
|
312 mike 1.2 {
|
313 humberto 1.43 // l10n
314
315 // CIMClientMalformedHTTPException* malformedHTTPException = new
316 // CIMClientMalformedHTTPException("Missing CIMOperation HTTP header");
317
|
318 humberto 1.44 MessageLoaderParms mlParms("Client.CIMOperationResponseDecoder.MISSING_CIMOP_HEADER", "Missing CIMOperation HTTP header");
|
319 humberto 1.43 String mlString(MessageLoader::getMessage(mlParms));
|
320 kumpf 1.60
|
321 humberto 1.43 CIMClientMalformedHTTPException* malformedHTTPException = new
|
322 kumpf 1.60 CIMClientMalformedHTTPException(mlString);
323
|
324 kumpf 1.17 ClientExceptionMessage * response =
325 new ClientExceptionMessage(malformedHTTPException);
326
|
327 j.alex 1.68 response->setCloseConnect(cimReconnect);
328
|
329 kumpf 1.17 _outputQueue->enqueue(response);
330 return;
|
331 mike 1.2 }
332
|
333 chuck 1.39
|
334 brian.campbell 1.62 // l10n start
|
335 kumpf 1.60 // l10n end
|
336 david 1.42 //
337 // Search for "Content-Type" header:
338 //
|
339 kumpf 1.60
340 // BUG 572, Use of Content-Type header and change error msg.
341 // If header exists, test type. If not, ignore. We will find
342 // content type errors in text analysis.
343 // content-type header value format:
344 // type "/" subtype *( ";" parameter )
345 // ex. text/xml;Charset="utf8"
346 String cimContentType;
347
348 if (HTTPMessage::lookupHeader(
349 headers, "Content-Type", cimContentType, true))
350 {
351 Uint32 len;
352 String contentTypeValue;
353 if ((len = cimContentType.find(';')) != PEG_NOT_FOUND)
354 contentTypeValue = cimContentType.subString(0,len);
355 else
356 contentTypeValue = cimContentType;
357
358 if (!String::equalNoCase(contentTypeValue, "text/xml") &&
359 !String::equalNoCase(contentTypeValue, "application/xml"))
360 kumpf 1.60 {
361 CIMClientMalformedHTTPException* malformedHTTPException = new
362 CIMClientMalformedHTTPException
363 ("Bad Content-Type HTTP header; " + contentTypeValue);
364 ClientExceptionMessage * response =
365 new ClientExceptionMessage(malformedHTTPException);
366
|
367 j.alex 1.68 response->setCloseConnect(cimReconnect);
368
|
369 kumpf 1.60 _outputQueue->enqueue(response);
370 return;
371 }
372 }
373 // comment out the error rejection code if the content-type header does
374 // not exist
|
375 karl 1.48 #ifdef PEGASUS_REJECT_ON_MISSING_CONTENTTYPE_HEADER
|
376 kumpf 1.60 else
377 {
378 CIMClientMalformedHTTPException* malformedHTTPException = new
379 CIMClientMalformedHTTPException
380 ("Missing Content-Type HTTP header; ");
381 ClientExceptionMessage * response =
382 new ClientExceptionMessage(malformedHTTPException);
383
|
384 j.alex 1.68 response->setCloseConnect(cimReconnect);
385
|
386 kumpf 1.60 _outputQueue->enqueue(response);
387 return;
388 }
|
389 karl 1.48 #endif
|
390 kumpf 1.60
391 // look for any cim status codes. The HTTPConnection level would have
392 // added them here.
393
394 String cimStatusCodeValue;
395 Boolean found = HTTPMessage::lookupHeader(headers, "CIMStatusCode",
396 cimStatusCodeValue, true);
397 CIMStatusCode cimStatusCodeNumber = CIM_ERR_SUCCESS;
398
399 if (found == true &&
400 (cimStatusCodeNumber = (CIMStatusCode)
401 atoi(cimStatusCodeValue.getCString())) != CIM_ERR_SUCCESS)
402 {
403 String cimStatusCodeDescription;
404 found = HTTPMessage::lookupHeader(headers, "CIMStatusCodeDescription",
405 cimStatusCodeDescription, true);
406 if (found == true && cimStatusCodeDescription.size() > 0)
407 {
408 try
409 {
410 cimStatusCodeDescription =
411 kumpf 1.60 XmlReader::decodeURICharacters(cimStatusCodeDescription);
412 }
413 catch (ParseError&)
414 {
415 }
416 } // if there is a description with the code
417
418 CIMException* cimStatusException =
419 new CIMException(cimStatusCodeNumber,cimStatusCodeDescription);
|
420 brian.campbell 1.62 cimStatusException->setContentLanguages(httpMessage->contentLanguages);
|
421 kumpf 1.60 ClientExceptionMessage * response =
422 new ClientExceptionMessage(cimStatusException);
|
423 j.alex 1.68
424 response->setCloseConnect(cimReconnect);
425
|
426 kumpf 1.60 _outputQueue->enqueue(response);
427 return;
428 }
|
429 w.white 1.64 String serverTime;
430 if(HTTPMessage::lookupHeader(headers, "WBEMServerResponseTime", serverTime, true))
431 {
432 Uint32 sTime = (Uint32) atol(serverTime.getCString());
433 dataStore->setServerTime(sTime);
434 }
435
|
436 brian.campbell 1.59
|
437 mike 1.2 //
438 // Zero-terminate the message:
439 //
440 httpMessage->message.append('\0');
|
441 keith.petley 1.40
|
442 mike 1.2 // Calculate the beginning of the content from the message size and
443 // the content length. Subtract 1 to take into account the null
444 // character we just added to the end of the message.
445
|
446 david.dillard 1.63 content = (char *) httpMessage->message.getData() +
|
447 karl 1.41 httpMessage->message.size() - contentLength - 1;
|
448 mike 1.2
449 //
450 // If it is a method response, then dispatch it to be handled:
451 //
452
453 if (!String::equalNoCase(cimOperation, "MethodResponse"))
454 {
|
455 kumpf 1.60 // l10n
|
456 humberto 1.43
|
457 kumpf 1.60 // CIMClientMalformedHTTPException* malformedHTTPException =
458 // new CIMClientMalformedHTTPException(
459 // String("Received CIMOperation HTTP header value \"") +
460 // cimOperation + "\", expected \"MethodResponse\"");
|
461 humberto 1.43
|
462 kumpf 1.60 MessageLoaderParms mlParms("Client.CIMOperationResponseDecoder.EXPECTED_METHODRESPONSE", "Received CIMOperation HTTP header value \"$1\", expected \"MethodResponse\"", cimOperation);
463 String mlString(MessageLoader::getMessage(mlParms));
|
464 humberto 1.43
|
465 kumpf 1.60 CIMClientMalformedHTTPException* malformedHTTPException =
466 new CIMClientMalformedHTTPException(mlString);
|
467 humberto 1.43
|
468 kumpf 1.60 ClientExceptionMessage * response =
469 new ClientExceptionMessage(malformedHTTPException);
|
470 kumpf 1.17
|
471 j.alex 1.68 response->setCloseConnect(cimReconnect);
472
|
473 kumpf 1.17 _outputQueue->enqueue(response);
474 return;
|
475 mike 1.2 }
476
|
477 w.white 1.64 dataStore->setResponseSize(contentLength);
478 dataStore->setEndNetworkTime(networkEndTime);
479 //dataStore->print();
|
480 j.alex 1.68 _handleMethodResponse(content, httpMessage->contentLanguages,cimReconnect); // l10n
|
481 mike 1.2 }
482
|
483 j.alex 1.68 void CIMOperationResponseDecoder::_handleMethodResponse(
484 char* content,
|
485 kumpf 1.72 const ContentLanguageList& contentLanguages,
|
486 j.alex 1.68 Boolean cimReconnect) //l10n
|
487 mike 1.2 {
488 Message* response = 0;
489
490 //
491 // Create and initialize XML parser:
492 //
493
494 XmlParser parser((char*)content);
495 XmlEntry entry;
496
497 try
498 {
|
499 kumpf 1.60 //
500 // Process <?xml ... >
501 //
|
502 mike 1.2
|
503 kumpf 1.11 const char* xmlVersion = 0;
504 const char* xmlEncoding = 0;
505
|
506 kumpf 1.60 XmlReader::getXmlDeclaration(parser, xmlVersion, xmlEncoding);
|
507 mike 1.2
|
508 kumpf 1.60 //
509 // Process <CIM ... >
510 //
|
511 mike 1.2
|
512 kumpf 1.9 const char* cimVersion = 0;
513 const char* dtdVersion = 0;
514
|
515 kumpf 1.17 // ATTN-RK-P3-20020416: Need to validate these versions?
|
516 kumpf 1.60 XmlReader::getCimStartTag(parser, cimVersion, dtdVersion);
|
517 mike 1.2
|
518 kumpf 1.60 //
519 // Expect <MESSAGE ... >
520 //
|
521 mike 1.2
|
522 kumpf 1.60 String messageId;
523 String protocolVersion;
|
524 mike 1.2
|
525 kumpf 1.60 if (!XmlReader::getMessageStartTag(parser, messageId, protocolVersion))
526 {
527 // l10n
|
528 humberto 1.43
|
529 kumpf 1.60 // throw XmlValidationError(
530 // parser.getLine(), "expected MESSAGE element");
|
531 humberto 1.43
|
532 kumpf 1.60 MessageLoaderParms mlParms("Client.CIMOperationResponseDecoder.EXPECTED_MESSAGE_ELEMENT",
533 "expected MESSAGE element");
|
534 humberto 1.43
|
535 kumpf 1.60 throw XmlValidationError(parser.getLine(), mlParms);
536 }
|
537 humberto 1.43
|
538 mike 1.2
|
539 david.dillard 1.71 //
540 // This code for checking the protocol version was taken from the server code.
541 //
542 Boolean protocolVersionAccepted = false;
543
544 if ((protocolVersion.size() >= 3) &&
545 (protocolVersion[0] == '1') &&
546 (protocolVersion[1] == '.'))
547 {
548 // Verify that all characters after the '.' are digits
549 Uint32 index = 2;
550 while ((index < protocolVersion.size()) &&
551 (protocolVersion[index] >= '0') &&
552 (protocolVersion[index] <= '9'))
553 {
554 index++;
555 }
556
557 if (index == protocolVersion.size())
558 {
559 protocolVersionAccepted = true;
560 david.dillard 1.71 }
561 }
|
562 humberto 1.43
|
563 david.dillard 1.71 if (!protocolVersionAccepted)
564 {
565 MessageLoaderParms mlParms("Client.CIMOperationResponseDecoder.UNSUPPORTED_PROTOCOL", "Received unsupported protocol version \"$0\", expected \"$1\"", protocolVersion, "1.[0-9]+");
|
566 kumpf 1.60 String mlString(MessageLoader::getMessage(mlParms));
|
567 humberto 1.43
|
568 kumpf 1.60 CIMClientResponseException* responseException =
569 new CIMClientResponseException(mlString);
|
570 humberto 1.43
|
571 kumpf 1.17 ClientExceptionMessage * response =
572 new ClientExceptionMessage(responseException);
|
573 mike 1.2
|
574 j.alex 1.68 response->setCloseConnect(cimReconnect);
575
|
576 kumpf 1.17 _outputQueue->enqueue(response);
577 return;
|
578 kumpf 1.60 }
579
580 //
581 // Expect <SIMPLERSP ... >
582 //
583
584 XmlReader::expectStartTag(parser, entry, "SIMPLERSP");
585
586 //
587 // Expect <IMETHODRESPONSE ... >
588 //
|
589 mike 1.2
|
590 kumpf 1.60 const char* iMethodResponseName = 0;
591 Boolean isEmptyTag = false;
|
592 humberto 1.43
|
593 kumpf 1.60 if (XmlReader::getIMethodResponseStartTag(
594 parser, iMethodResponseName, isEmptyTag))
595 {
596 //
597 // Dispatch the method:
598 //
599
600 if (System::strcasecmp(iMethodResponseName, "GetClass") == 0)
601 response = _decodeGetClassResponse(
602 parser, messageId, isEmptyTag);
603 else if (System::strcasecmp(iMethodResponseName, "GetInstance") == 0)
604 response = _decodeGetInstanceResponse(
605 parser, messageId, isEmptyTag);
606 else if (System::strcasecmp(iMethodResponseName, "EnumerateClassNames") == 0)
607 response = _decodeEnumerateClassNamesResponse(
608 parser, messageId, isEmptyTag);
609 else if (System::strcasecmp(iMethodResponseName, "References") == 0)
610 response = _decodeReferencesResponse(
611 parser, messageId, isEmptyTag);
612 else if (System::strcasecmp(iMethodResponseName, "ReferenceNames") == 0)
613 response = _decodeReferenceNamesResponse(
614 kumpf 1.60 parser, messageId, isEmptyTag);
615 else if (System::strcasecmp(iMethodResponseName, "AssociatorNames") == 0)
616 response = _decodeAssociatorNamesResponse(
617 parser, messageId, isEmptyTag);
618 else if (System::strcasecmp(iMethodResponseName, "Associators") == 0)
619 response = _decodeAssociatorsResponse(
620 parser, messageId, isEmptyTag);
621 else if (System::strcasecmp(iMethodResponseName, "CreateInstance") == 0)
622 response = _decodeCreateInstanceResponse(
623 parser, messageId, isEmptyTag);
624 else if (System::strcasecmp(iMethodResponseName,"EnumerateInstanceNames") == 0)
625 response = _decodeEnumerateInstanceNamesResponse(
626 parser, messageId, isEmptyTag);
627 else if (System::strcasecmp(iMethodResponseName,"EnumerateInstances") == 0)
628 response = _decodeEnumerateInstancesResponse(
629 parser, messageId, isEmptyTag);
630 else if (System::strcasecmp(iMethodResponseName, "GetProperty") == 0)
631 response = _decodeGetPropertyResponse(
632 parser, messageId, isEmptyTag);
633 else if (System::strcasecmp(iMethodResponseName, "SetProperty") == 0)
634 response = _decodeSetPropertyResponse(
635 kumpf 1.60 parser, messageId, isEmptyTag);
636 else if (System::strcasecmp(iMethodResponseName, "DeleteQualifier") == 0)
637 response = _decodeDeleteQualifierResponse(
638 parser, messageId, isEmptyTag);
639 else if (System::strcasecmp(iMethodResponseName, "GetQualifier") == 0)
640 response = _decodeGetQualifierResponse(
641 parser, messageId, isEmptyTag);
642 else if (System::strcasecmp(iMethodResponseName, "SetQualifier") == 0)
643 response = _decodeSetQualifierResponse(
644 parser, messageId, isEmptyTag);
645 else if (System::strcasecmp(iMethodResponseName, "EnumerateQualifiers") == 0)
646 response = _decodeEnumerateQualifiersResponse(
647 parser, messageId, isEmptyTag);
648 else if (System::strcasecmp(iMethodResponseName, "EnumerateClasses") == 0)
649 response = _decodeEnumerateClassesResponse(
650 parser, messageId, isEmptyTag);
651 else if (System::strcasecmp(iMethodResponseName, "CreateClass") == 0)
652 response = _decodeCreateClassResponse(
653 parser, messageId, isEmptyTag);
654 else if (System::strcasecmp(iMethodResponseName, "ModifyClass") == 0)
655 response = _decodeModifyClassResponse(
656 kumpf 1.60 parser, messageId, isEmptyTag);
657 else if (System::strcasecmp(iMethodResponseName, "ModifyInstance") == 0)
658 response = _decodeModifyInstanceResponse(
659 parser, messageId, isEmptyTag);
660 else if (System::strcasecmp(iMethodResponseName, "DeleteClass") == 0)
661 response = _decodeDeleteClassResponse(
662 parser, messageId, isEmptyTag);
663 else if (System::strcasecmp(iMethodResponseName, "DeleteInstance") == 0)
664 response = _decodeDeleteInstanceResponse(
665 parser, messageId, isEmptyTag);
666 else if (System::strcasecmp(iMethodResponseName, "ExecQuery") == 0)
667 response = _decodeExecQueryResponse(
668 parser, messageId, isEmptyTag);
669 else
670 {
671 // l10n
|
672 humberto 1.43
|
673 mike 1.2 // Unrecognized IMethodResponse name attribute
|
674 kumpf 1.60 // throw XmlValidationError(parser.getLine(),
675 // String("Unrecognized IMethodResponse name \"") +
676 // iMethodResponseName + "\"");
677
678 MessageLoaderParms mlParms(
679 "Client.CIMOperationResponseDecoder.UNRECOGNIZED_NAME",
680 "Unrecognized IMethodResponse name \"$0\"",
681 iMethodResponseName);
682 throw XmlValidationError(parser.getLine(), mlParms);
683 }
|
684 humberto 1.43
|
685 kumpf 1.60 //
686 // Handle end tag:
687 //
|
688 humberto 1.43
|
689 kumpf 1.60 if (!isEmptyTag)
690 {
691 XmlReader::expectEndTag(parser, "IMETHODRESPONSE");
692 }
693 }
694 else if (XmlReader::getMethodResponseStartTag(
695 parser, iMethodResponseName, isEmptyTag))
696 {
697 response = _decodeInvokeMethodResponse(
698 parser, messageId, iMethodResponseName, isEmptyTag);
699
|
700 j.alex 1.68
|
701 kumpf 1.60 //
702 // Handle end tag:
703 //
704 if (!isEmptyTag)
705 {
706 XmlReader::expectEndTag(parser, "METHODRESPONSE");
707 }
708 }
709 else
710 {
711 // l10n
|
712 humberto 1.43
|
713 kumpf 1.60 // throw XmlValidationError(parser.getLine(),
714 // "expected METHODRESPONSE or IMETHODRESPONSE element");
715
716 MessageLoaderParms mlParms("Client.CIMOperationResponseDecoder.EXPECTED_METHODRESPONSE_OR_IMETHODRESPONSE_ELEMENT",
717 "expected METHODRESPONSE or IMETHODRESPONSE element");
718
719 throw XmlValidationError(parser.getLine(), mlParms);
720 }
|
721 mike 1.2
722 //
723 // Handle end tags:
724 //
|
725 kumpf 1.60 XmlReader::expectEndTag(parser, "SIMPLERSP");
726 XmlReader::expectEndTag(parser, "MESSAGE");
727 XmlReader::expectEndTag(parser, "CIM");
|
728 mike 1.2 }
|
729 kumpf 1.17 catch (XmlException& x)
730 {
|
731 kumpf 1.60 Logger::put(Logger::ERROR_LOG, System::CIMSERVER, Logger::TRACE,
732 "CIMOperationResponseDecoder::_handleMethodResponse - XmlException has occurred. Message: $0",x.getMessage());
|
733 david 1.38
|
734 kumpf 1.17 if (response)
735 {
|
736 karl 1.41 //#ifdef PEGASUS_SNIA_INTEROP_TEST
737 // httpMessage->printAll(cout);
738 //#endif
|
739 kumpf 1.60
|
740 kumpf 1.17 delete response;
741 }
742
743 response = new ClientExceptionMessage(
|
744 kumpf 1.20 new CIMClientXmlException(x.getMessage()));
|
745 kumpf 1.17 }
|
746 mike 1.2 catch (Exception& x)
747 {
|
748 kumpf 1.50 // Might get MalformedObjectNameException, InvalidNameException, etc.
|
749 kumpf 1.17
750 if (response)
751 {
752 delete response;
753 }
|
754 mike 1.2
|
755 kumpf 1.17 response = new ClientExceptionMessage(
|
756 kumpf 1.53 new CIMClientResponseException(x.getMessage()));
|
757 mike 1.2 }
|
758 chuck 1.39
759 //l10n start
760 // l10n TODO - might want to move A-L and C-L to Message
761 // to make this more maintainable
|
762 kumpf 1.60 // Add the language header to the request
763 CIMMessage * cimmsg = dynamic_cast<CIMMessage *>(response);
764 if (cimmsg != NULL)
765 {
766 cimmsg->operationContext.set(ContentLanguageListContainer(contentLanguages));
767 }
768 else
769 {
770 ; // l10n TODO - error back to client here
771 }
772 // l10n end
|
773 mike 1.2
|
774 j.alex 1.68 response->setCloseConnect(cimReconnect);
775
776
|
777 mike 1.2 _outputQueue->enqueue(response);
778 }
779
780 CIMCreateClassResponseMessage* CIMOperationResponseDecoder::_decodeCreateClassResponse(
|
781 kumpf 1.60 XmlParser& parser,
782 const String& messageId,
783 Boolean isEmptyImethodresponseTag)
|
784 mike 1.2 {
785 XmlEntry entry;
|
786 kumpf 1.12 CIMException cimException;
|
787 mike 1.2
|
788 kumpf 1.60 if (!isEmptyImethodresponseTag)
|
789 mike 1.2 {
|
790 kumpf 1.60 if (XmlReader::getErrorElement(parser, cimException))
791 {
792 return(new CIMCreateClassResponseMessage(
793 messageId,
794 cimException,
795 QueueIdStack()));
796 }
|
797 mike 1.2
|
798 kumpf 1.60 if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
799 {
800 if (entry.type != XmlEntry::EMPTY_TAG)
801 {
802 XmlReader::expectEndTag(parser, "IRETURNVALUE");
803 }
804 }
|
805 mike 1.2 }
|
806 kumpf 1.60
807 return(new CIMCreateClassResponseMessage(
808 messageId,
809 cimException,
810 QueueIdStack()));
|
811 mike 1.2 }
812
813 CIMGetClassResponseMessage* CIMOperationResponseDecoder::_decodeGetClassResponse(
|
814 kumpf 1.60 XmlParser& parser,
815 const String& messageId,
816 Boolean isEmptyImethodresponseTag)
|
817 mike 1.2 {
818 XmlEntry entry;
|
819 kumpf 1.12 CIMException cimException;
|
820 mike 1.2
|
821 kumpf 1.60 if (isEmptyImethodresponseTag)
822 {
823 MessageLoaderParms mlParms("Common.XmlReader.EXPECTED_OPEN",
824 "Expected open of $0 element", "IMETHODRESPONSE");
825 throw XmlValidationError(parser.getLine(), mlParms);
826 }
827 else if (XmlReader::getErrorElement(parser, cimException))
|
828 mike 1.2 {
|
829 kumpf 1.60 return(new CIMGetClassResponseMessage(
830 messageId,
831 cimException,
832 QueueIdStack(),
833 CIMClass()));
|
834 mike 1.2 }
|
835 kumpf 1.37 else if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
|
836 mike 1.2 {
|
837 kumpf 1.60 CIMClass cimClass;
|
838 mike 1.2
|
839 kumpf 1.60 if ((entry.type == XmlEntry::EMPTY_TAG) ||
840 !XmlReader::getClassElement(parser, cimClass))
841 {
842 // l10n
|
843 humberto 1.43
|
844 kumpf 1.60 // throw XmlValidationError(parser.getLine(),"expected CLASS element");
|
845 humberto 1.43
|
846 kumpf 1.60 MessageLoaderParms mlParms(
847 "Client.CIMOperationResponseDecoder.EXPECTED_CLASS_ELEMENT",
848 "expected CLASS element");
849 throw XmlValidationError(parser.getLine(), mlParms);
850 }
|
851 humberto 1.43
|
852 kumpf 1.60 XmlReader::expectEndTag(parser, "IRETURNVALUE");
|
853 humberto 1.43
|
854 kumpf 1.60 return(new CIMGetClassResponseMessage(
855 messageId,
856 cimException,
857 QueueIdStack(),
858 cimClass));
|
859 mike 1.2 }
860 else
861 {
|
862 kumpf 1.60 // l10n
|
863 humberto 1.43
|
864 kumpf 1.60 // throw XmlValidationError(parser.getLine(),
865 // "expected ERROR or IRETURNVALUE element");
|
866 humberto 1.43
|
867 kumpf 1.60 MessageLoaderParms mlParms("Client.CIMOperationResponseDecoder.EXPECTED_ERROR_OR_IRETURNVALUE_ELEMENT",
868 "expected ERROR or IRETURNVALUE element");
|
869 humberto 1.43
|
870 kumpf 1.60 throw XmlValidationError(parser.getLine(), mlParms);
|
871 mike 1.2 }
872 }
873
874 CIMModifyClassResponseMessage* CIMOperationResponseDecoder::_decodeModifyClassResponse(
|
875 kumpf 1.60 XmlParser& parser,
876 const String& messageId,
877 Boolean isEmptyImethodresponseTag)
|
878 mike 1.2 {
879 XmlEntry entry;
|
880 kumpf 1.12 CIMException cimException;
|
881 mike 1.2
|
882 kumpf 1.60 if (!isEmptyImethodresponseTag)
|
883 mike 1.2 {
|
884 kumpf 1.60 if (XmlReader::getErrorElement(parser, cimException))
885 {
886 return(new CIMModifyClassResponseMessage(
887 messageId,
888 cimException,
889 QueueIdStack()));
890 }
891
892 if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
893 {
894 if (entry.type != XmlEntry::EMPTY_TAG)
895 {
896 XmlReader::expectEndTag(parser, "IRETURNVALUE");
897 }
898 }
|
899 mike 1.2 }
|
900 kumpf 1.60
901 return(new CIMModifyClassResponseMessage(
902 messageId,
903 cimException,
904 QueueIdStack()));
|
905 mike 1.2 }
906
907 CIMEnumerateClassNamesResponseMessage* CIMOperationResponseDecoder::_decodeEnumerateClassNamesResponse(
|
908 kumpf 1.60 XmlParser& parser,
909 const String& messageId,
910 Boolean isEmptyImethodresponseTag)
|
911 mike 1.2 {
912 XmlEntry entry;
|
913 kumpf 1.12 CIMException cimException;
|
914 kumpf 1.60 Array<CIMName> classNames;
|
915 mike 1.2
|
916 kumpf 1.60 if (!isEmptyImethodresponseTag)
|
917 mike 1.2 {
|
918 kumpf 1.60 if (XmlReader::getErrorElement(parser, cimException))
919 {
920 return(new CIMEnumerateClassNamesResponseMessage(
921 messageId,
922 cimException,
923 QueueIdStack(),
924 Array<CIMName>()));
925 }
926
927 if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
928 {
929 if (entry.type != XmlEntry::EMPTY_TAG)
930 {
931 CIMName className;
932
933 while (XmlReader::getClassNameElement(parser, className, false))
934 classNames.append(className);
935
936 XmlReader::expectEndTag(parser, "IRETURNVALUE");
937 }
938 }
|
939 mike 1.2 }
940
|
941 kumpf 1.60 return(new CIMEnumerateClassNamesResponseMessage(
942 messageId,
943 cimException,
944 QueueIdStack(),
945 classNames));
|
946 mike 1.2 }
947
948 CIMEnumerateClassesResponseMessage* CIMOperationResponseDecoder::_decodeEnumerateClassesResponse(
|
949 kumpf 1.60 XmlParser& parser,
950 const String& messageId,
951 Boolean isEmptyImethodresponseTag)
|
952 mike 1.2 {
953 XmlEntry entry;
|
954 kumpf 1.12 CIMException cimException;
|
955 kumpf 1.60 Array<CIMClass> cimClasses;
|
956 mike 1.2
|
957 kumpf 1.60 if (!isEmptyImethodresponseTag)
|
958 mike 1.2 {
|
959 kumpf 1.60 if (XmlReader::getErrorElement(parser, cimException))
960 {
961 return(new CIMEnumerateClassesResponseMessage(
962 messageId,
963 cimException,
964 QueueIdStack(),
965 Array<CIMClass>()));
966 }
967
968 if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
969 {
970 if (entry.type != XmlEntry::EMPTY_TAG)
971 {
972 CIMClass cimClass;
973
974 while (XmlReader::getClassElement(parser, cimClass))
975 cimClasses.append(cimClass);
976
977 XmlReader::expectEndTag(parser, "IRETURNVALUE");
978 }
979 }
|
980 mike 1.2 }
981
|
982 kumpf 1.60 return(new CIMEnumerateClassesResponseMessage(
983 messageId,
984 cimException,
985 QueueIdStack(),
986 cimClasses));
|
987 mike 1.2 }
988
989 CIMDeleteClassResponseMessage* CIMOperationResponseDecoder::_decodeDeleteClassResponse(
|
990 kumpf 1.60 XmlParser& parser,
991 const String& messageId,
992 Boolean isEmptyImethodresponseTag)
|
993 mike 1.2 {
994 XmlEntry entry;
|
995 kumpf 1.12 CIMException cimException;
|
996 mike 1.2
|
997 kumpf 1.60 if (!isEmptyImethodresponseTag)
|
998 mike 1.2 {
|
999 kumpf 1.60 if (XmlReader::getErrorElement(parser, cimException))
1000 {
1001 return(new CIMDeleteClassResponseMessage(
1002 messageId,
1003 cimException,
1004 QueueIdStack()));
1005 }
1006
1007 if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
1008 {
1009 if (entry.type != XmlEntry::EMPTY_TAG)
1010 {
1011 XmlReader::expectEndTag(parser, "IRETURNVALUE");
1012 }
1013 }
|
1014 mike 1.2 }
|
1015 kumpf 1.60
1016 return(new CIMDeleteClassResponseMessage(
1017 messageId,
1018 cimException,
1019 QueueIdStack()));
|
1020 mike 1.2 }
1021
1022 CIMCreateInstanceResponseMessage* CIMOperationResponseDecoder::_decodeCreateInstanceResponse(
|
1023 kumpf 1.60 XmlParser& parser,
1024 const String& messageId,
1025 Boolean isEmptyImethodresponseTag)
|
1026 mike 1.2 {
1027 XmlEntry entry;
|
1028 kumpf 1.12 CIMException cimException;
|
1029 mike 1.2
|
1030 kumpf 1.60 if (isEmptyImethodresponseTag)
1031 {
1032 MessageLoaderParms mlParms("Common.XmlReader.EXPECTED_OPEN",
1033 "Expected open of $0 element", "IMETHODRESPONSE");
1034 throw XmlValidationError(parser.getLine(), mlParms);
1035 }
1036 else if (XmlReader::getErrorElement(parser, cimException))
|
1037 mike 1.2 {
|
1038 kumpf 1.60 return(new CIMCreateInstanceResponseMessage(
1039 messageId,
1040 cimException,
1041 QueueIdStack(),
1042 CIMObjectPath()));
|
1043 mike 1.2 }
1044 else if (XmlReader::testStartTag(parser, entry, "IRETURNVALUE"))
1045 {
|
1046 kumpf 1.60 CIMObjectPath instanceName;
1047 XmlReader::getInstanceNameElement(parser, instanceName);
|
1048 mike 1.2
|
1049 kumpf 1.60 XmlReader::expectEndTag(parser, "IRETURNVALUE");
|
1050 mike 1.2
|
1051 kumpf 1.60 return(new CIMCreateInstanceResponseMessage(
1052 messageId,
1053 cimException,
1054 QueueIdStack(),
1055 instanceName));
|
1056 mike 1.2 }
1057 else
1058 {
|
1059 kumpf 1.60 // l10n
|
1060 humberto 1.43
|
1061 kumpf 1.60 // throw XmlValidationError(parser.getLine(),
1062 // "expected ERROR or IRETURNVALUE element");
|
1063 humberto 1.43
|
1064 kumpf 1.60 MessageLoaderParms mlParms("Client.CIMOperationResponseDecoder.EXPECTED_ERROR_OR_IRETURNVALUE_ELEMENT",
1065 "expected ERROR or IRETURNVALUE element");
|
1066 humberto 1.43
|
1067 kumpf 1.60 throw XmlValidationError(parser.getLine(), mlParms);
|
1068 mike 1.2 }
1069 }
1070
1071 CIMGetInstanceResponseMessage* CIMOperationResponseDecoder::_decodeGetInstanceResponse(
|
1072 kumpf 1.60 XmlParser& parser,
1073 const String& messageId,
1074 Boolean isEmptyImethodresponseTag)
|
1075 mike 1.2 {
1076 XmlEntry entry;
|
1077 kumpf 1.12 CIMException cimException;
|
1078 mike 1.2
|
1079 kumpf 1.60 if (isEmptyImethodresponseTag)
1080 {
1081 MessageLoaderParms mlParms("Common.XmlReader.EXPECTED_OPEN",
1082 "Expected open of $0 element", "IMETHODRESPONSE");
1083 throw XmlValidationError(parser.getLine(), mlParms);
1084 }
1085 else if (XmlReader::getErrorElement(parser, cimException))
|
1086 mike 1.2 {
|
1087 kumpf 1.60 return(new CIMGetInstanceResponseMessage(
1088 messageId,
1089 cimException,
1090 QueueIdStack(),
1091 CIMInstance()));
|
1092 mike 1.2 }
|
1093 kumpf 1.37 else if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
|
1094 mike 1.2 {
|
1095 kumpf 1.60 CIMInstance cimInstance;
|
1096 mike 1.2
|
1097 kumpf 1.60 if ((entry.type == XmlEntry::EMPTY_TAG) ||
1098 !XmlReader::getInstanceElement(parser, cimInstance))
1099 {
1100 // l10n
|
1101 humberto 1.43
|
1102 kumpf 1.60 // throw XmlValidationError(
1103 // parser.getLine(), "expected INSTANCE element");
|
1104 humberto 1.43
|
1105 kumpf 1.60 MessageLoaderParms mlParms(
1106 "Client.CIMOperationResponseDecoder.EXPECTED_INSTANCE_ELEMENT",
1107 "expected INSTANCE element");
|
1108 humberto 1.43
|
1109 kumpf 1.60 throw XmlValidationError(parser.getLine(), mlParms);
1110 }
|
1111 mike 1.2
|
1112 kumpf 1.60 XmlReader::expectEndTag(parser, "IRETURNVALUE");
|
1113 mike 1.2
|
1114 kumpf 1.60 return(new CIMGetInstanceResponseMessage(
1115 messageId,
1116 cimException,
1117 QueueIdStack(),
1118 cimInstance));
|
1119 mike 1.2 }
1120 else
1121 {
|
1122 kumpf 1.60 // l10n
|
1123 humberto 1.43
|
1124 kumpf 1.60 // throw XmlValidationError(parser.getLine(),
1125 // "expected ERROR or IRETURNVALUE element");
|
1126 humberto 1.43
|
1127 kumpf 1.60 MessageLoaderParms mlParms("Client.CIMOperationResponseDecoder.EXPECTED_ERROR_OR_IRETURNVALUE_ELEMENT",
1128 "expected ERROR or IRETURNVALUE element");
|
1129 humberto 1.43
|
1130 kumpf 1.60 throw XmlValidationError(parser.getLine(), mlParms);
|
1131 mike 1.2 }
1132 }
1133
1134 CIMModifyInstanceResponseMessage* CIMOperationResponseDecoder::_decodeModifyInstanceResponse(
|
1135 kumpf 1.60 XmlParser& parser,
1136 const String& messageId,
1137 Boolean isEmptyImethodresponseTag)
|
1138 mike 1.2 {
1139 XmlEntry entry;
|
1140 kumpf 1.12 CIMException cimException;
|
1141 mike 1.2
|
1142 kumpf 1.60 if (!isEmptyImethodresponseTag)
|
1143 mike 1.2 {
|
1144 kumpf 1.60 if (XmlReader::getErrorElement(parser, cimException))
1145 {
1146 return(new CIMModifyInstanceResponseMessage(
1147 messageId,
1148 cimException,
1149 QueueIdStack()));
1150 }
1151
1152 if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
1153 {
1154 if (entry.type != XmlEntry::EMPTY_TAG)
1155 {
1156 XmlReader::expectEndTag(parser, "IRETURNVALUE");
1157 }
1158 }
|
1159 mike 1.2 }
|
1160 kumpf 1.60
1161 return(new CIMModifyInstanceResponseMessage(
1162 messageId,
1163 cimException,
1164 QueueIdStack()));
|
1165 mike 1.2 }
1166
1167 CIMEnumerateInstanceNamesResponseMessage* CIMOperationResponseDecoder::_decodeEnumerateInstanceNamesResponse(
|
1168 kumpf 1.60 XmlParser& parser,
1169 const String& messageId,
1170 Boolean isEmptyImethodresponseTag)
|
1171 mike 1.2 {
1172 XmlEntry entry;
|
1173 kumpf 1.12 CIMException cimException;
|
1174 kumpf 1.60 Array<CIMObjectPath> instanceNames;
|
1175 mike 1.2
|
1176 kumpf 1.60 if (!isEmptyImethodresponseTag)
|
1177 mike 1.2 {
|
1178 kumpf 1.60 if (XmlReader::getErrorElement(parser, cimException))
1179 {
1180 return(new CIMEnumerateInstanceNamesResponseMessage(
1181 messageId,
1182 cimException,
1183 QueueIdStack(),
1184 Array<CIMObjectPath>()));
1185 }
1186
1187 if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
1188 {
1189 if (entry.type != XmlEntry::EMPTY_TAG)
1190 {
1191 String className;
1192 Array<CIMKeyBinding> keyBindings;
1193
1194 while (XmlReader::getInstanceNameElement(
1195 parser, className, keyBindings))
1196 {
1197 CIMObjectPath r(
1198 String::EMPTY,
1199 kumpf 1.60 CIMNamespaceName(),
1200 className,
1201 keyBindings);
1202 instanceNames.append(r);
1203 }
1204
1205 XmlReader::expectEndTag(parser, "IRETURNVALUE");
1206 }
1207 }
|
1208 mike 1.2 }
1209
|
1210 kumpf 1.60 return(new CIMEnumerateInstanceNamesResponseMessage(
1211 messageId,
1212 cimException,
1213 QueueIdStack(),
1214 instanceNames));
|
1215 mike 1.2 }
1216
1217 CIMEnumerateInstancesResponseMessage* CIMOperationResponseDecoder::_decodeEnumerateInstancesResponse(
|
1218 kumpf 1.60 XmlParser& parser,
1219 const String& messageId,
1220 Boolean isEmptyImethodresponseTag)
|
1221 mike 1.2 {
1222 XmlEntry entry;
|
1223 kumpf 1.12 CIMException cimException;
|
1224 kumpf 1.60 Array<CIMInstance> namedInstances;
|
1225 mike 1.2
|
1226 kumpf 1.60 if (!isEmptyImethodresponseTag)
|
1227 mike 1.2 {
|
1228 kumpf 1.60 if (XmlReader::getErrorElement(parser, cimException))
1229 {
1230 return(new CIMEnumerateInstancesResponseMessage(
1231 messageId,
1232 cimException,
1233 QueueIdStack(),
1234 Array<CIMInstance>()));
1235 }
1236
1237 if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
1238 {
1239 if (entry.type != XmlEntry::EMPTY_TAG)
1240 {
1241 CIMInstance namedInstance;
1242
1243 while (XmlReader::getNamedInstanceElement(
1244 parser, namedInstance))
1245 {
1246 namedInstances.append(namedInstance);
1247 }
1248
1249 kumpf 1.60 XmlReader::expectEndTag(parser, "IRETURNVALUE");
1250 }
1251 }
|
1252 mike 1.2 }
1253
|
1254 kumpf 1.60 return(new CIMEnumerateInstancesResponseMessage(
1255 messageId,
1256 cimException,
1257 QueueIdStack(),
1258 namedInstances));
|
1259 mike 1.2 }
1260
1261 CIMDeleteInstanceResponseMessage* CIMOperationResponseDecoder::_decodeDeleteInstanceResponse(
|
1262 kumpf 1.60 XmlParser& parser,
1263 const String& messageId,
1264 Boolean isEmptyImethodresponseTag)
|
1265 mike 1.2 {
1266 XmlEntry entry;
|
1267 kumpf 1.12 CIMException cimException;
|
1268 mike 1.2
|
1269 kumpf 1.60 if (!isEmptyImethodresponseTag)
|
1270 mike 1.2 {
|
1271 kumpf 1.60 if (XmlReader::getErrorElement(parser, cimException))
1272 {
1273 return(new CIMDeleteInstanceResponseMessage(
1274 messageId,
1275 cimException,
1276 QueueIdStack()));
1277 }
1278
1279 if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
1280 {
1281 if (entry.type != XmlEntry::EMPTY_TAG)
1282 {
1283 XmlReader::expectEndTag(parser, "IRETURNVALUE");
1284 }
1285 }
|
1286 mike 1.2 }
|
1287 kumpf 1.60
1288 return(new CIMDeleteInstanceResponseMessage(
1289 messageId,
1290 cimException,
1291 QueueIdStack()));
|
1292 mike 1.2 }
1293
1294 CIMGetPropertyResponseMessage* CIMOperationResponseDecoder::_decodeGetPropertyResponse(
|
1295 kumpf 1.60 XmlParser& parser,
1296 const String& messageId,
1297 Boolean isEmptyImethodresponseTag)
|
1298 mike 1.2 {
1299 XmlEntry entry;
|
1300 kumpf 1.12 CIMException cimException;
|
1301 kumpf 1.60 CIMValue cimValue(CIMTYPE_STRING, false);
|
1302 mike 1.2
|
1303 kumpf 1.60 if (!isEmptyImethodresponseTag)
|
1304 mike 1.2 {
|
1305 kumpf 1.60 if (XmlReader::getErrorElement(parser, cimException))
1306 {
1307 return(new CIMGetPropertyResponseMessage(
1308 messageId,
1309 cimException,
1310 QueueIdStack(),
1311 CIMValue()));
1312 }
|
1313 kumpf 1.14
|
1314 kumpf 1.60 if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
1315 {
1316 if (entry.type != XmlEntry::EMPTY_TAG)
1317 {
1318 if (!XmlReader::getPropertyValue(parser, cimValue))
1319 {
|
1320 kumpf 1.37 // No value given; just return a null String value
|
1321 kumpf 1.60 }
|
1322 kumpf 1.37
|
1323 kumpf 1.60 XmlReader::expectEndTag(parser, "IRETURNVALUE");
1324 }
1325 }
1326 else
1327 {
|
1328 kumpf 1.14 // No value given; just return a null String value
|
1329 kumpf 1.60 }
1330 }
|
1331 mike 1.2
|
1332 kumpf 1.60 return(new CIMGetPropertyResponseMessage(
1333 messageId,
1334 cimException,
1335 QueueIdStack(),
1336 cimValue));
|
1337 mike 1.2 }
1338
1339 CIMSetPropertyResponseMessage* CIMOperationResponseDecoder::_decodeSetPropertyResponse(
|
1340 kumpf 1.60 XmlParser& parser,
1341 const String& messageId,
1342 Boolean isEmptyImethodresponseTag)
|
1343 mike 1.2 {
1344 XmlEntry entry;
|
1345 kumpf 1.12 CIMException cimException;
|
1346 mike 1.2
|
1347 kumpf 1.60 if (!isEmptyImethodresponseTag)
|
1348 mike 1.2 {
|
1349 kumpf 1.60 if (XmlReader::getErrorElement(parser, cimException))
1350 {
1351 return(new CIMSetPropertyResponseMessage(
1352 messageId,
1353 cimException,
1354 QueueIdStack()));
1355 }
1356
1357 if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
1358 {
1359 if (entry.type != XmlEntry::EMPTY_TAG)
1360 {
1361 XmlReader::expectEndTag(parser, "IRETURNVALUE");
1362 }
1363 }
|
1364 mike 1.2 }
|
1365 kumpf 1.60
1366 return(new CIMSetPropertyResponseMessage(
1367 messageId,
1368 cimException,
1369 QueueIdStack()));
|
1370 mike 1.2 }
1371
1372 CIMSetQualifierResponseMessage* CIMOperationResponseDecoder::_decodeSetQualifierResponse(
|
1373 kumpf 1.60 XmlParser& parser,
1374 const String& messageId,
1375 Boolean isEmptyImethodresponseTag)
|
1376 mike 1.2 {
1377 XmlEntry entry;
|
1378 kumpf 1.12 CIMException cimException;
|
1379 mike 1.2
|
1380 kumpf 1.60 if (!isEmptyImethodresponseTag)
|
1381 mike 1.2 {
|
1382 kumpf 1.60 if (XmlReader::getErrorElement(parser, cimException))
1383 {
1384 return(new CIMSetQualifierResponseMessage(
1385 messageId,
1386 cimException,
1387 QueueIdStack()));
1388 }
1389
1390 if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
1391 {
1392 if (entry.type != XmlEntry::EMPTY_TAG)
1393 {
1394 XmlReader::expectEndTag(parser, "IRETURNVALUE");
1395 }
1396 }
|
1397 mike 1.2 }
|
1398 kumpf 1.60
1399 return(new CIMSetQualifierResponseMessage(
1400 messageId,
1401 cimException,
1402 QueueIdStack()));
|
1403 mike 1.2 }
1404
1405 CIMGetQualifierResponseMessage* CIMOperationResponseDecoder::_decodeGetQualifierResponse(
|
1406 kumpf 1.60 XmlParser& parser,
1407 const String& messageId,
1408 Boolean isEmptyImethodresponseTag)
|
1409 mike 1.2 {
1410 XmlEntry entry;
|
1411 kumpf 1.12 CIMException cimException;
|
1412 mike 1.2
|
1413 kumpf 1.60 if (isEmptyImethodresponseTag)
1414 {
1415 MessageLoaderParms mlParms("Common.XmlReader.EXPECTED_OPEN",
1416 "Expected open of $0 element", "IMETHODRESPONSE");
1417 throw XmlValidationError(parser.getLine(), mlParms);
1418 }
1419 else if (XmlReader::getErrorElement(parser, cimException))
|
1420 mike 1.2 {
|
1421 kumpf 1.60 return(new CIMGetQualifierResponseMessage(
1422 messageId,
1423 cimException,
1424 QueueIdStack(),
1425 CIMQualifierDecl()));
|
1426 mike 1.2 }
1427 else if (XmlReader::testStartTag(parser, entry, "IRETURNVALUE"))
1428 {
|
1429 kumpf 1.60 CIMQualifierDecl qualifierDecl;
1430 XmlReader::getQualifierDeclElement(parser, qualifierDecl);
|
1431 mike 1.2
|
1432 kumpf 1.60 XmlReader::expectEndTag(parser, "IRETURNVALUE");
|
1433 mike 1.2
|
1434 kumpf 1.60 return(new CIMGetQualifierResponseMessage(
1435 messageId,
1436 cimException,
1437 QueueIdStack(),
1438 qualifierDecl));
|
1439 mike 1.2 }
1440 else
1441 {
|
1442 kumpf 1.60 // l10n
|
1443 humberto 1.43
|
1444 kumpf 1.60 // throw XmlValidationError(parser.getLine(),
1445 // "expected ERROR or IRETURNVALUE element");
|
1446 humberto 1.43
|
1447 kumpf 1.60 MessageLoaderParms mlParms("Client.CIMOperationResponseDecoder.EXPECTED_ERROR_OR_IRETURNVALUE_ELEMENT",
1448 "expected ERROR or IRETURNVALUE element");
|
1449 humberto 1.43
|
1450 kumpf 1.60 throw XmlValidationError(parser.getLine(), mlParms);
|
1451 mike 1.2 }
1452 }
1453
1454 CIMEnumerateQualifiersResponseMessage* CIMOperationResponseDecoder::_decodeEnumerateQualifiersResponse(
|
1455 kumpf 1.60 XmlParser& parser,
1456 const String& messageId,
1457 Boolean isEmptyImethodresponseTag)
|
1458 mike 1.2 {
1459 XmlEntry entry;
|
1460 kumpf 1.12 CIMException cimException;
|
1461 kumpf 1.60 Array<CIMQualifierDecl> qualifierDecls;
|
1462 mike 1.2
|
1463 kumpf 1.60 if (!isEmptyImethodresponseTag)
|
1464 mike 1.2 {
|
1465 kumpf 1.60 if (XmlReader::getErrorElement(parser, cimException))
1466 {
1467 return(new CIMEnumerateQualifiersResponseMessage(
1468 messageId,
1469 cimException,
1470 QueueIdStack(),
1471 Array<CIMQualifierDecl>()));
1472 }
1473
1474 if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
1475 {
1476 if (entry.type != XmlEntry::EMPTY_TAG)
1477 {
1478 CIMQualifierDecl qualifierDecl;
1479
1480 while (XmlReader::getQualifierDeclElement(
1481 parser, qualifierDecl))
1482 {
1483 qualifierDecls.append(qualifierDecl);
1484 }
1485
1486 kumpf 1.60 XmlReader::expectEndTag(parser, "IRETURNVALUE");
1487 }
1488 }
|
1489 mike 1.2 }
1490
|
1491 kumpf 1.60 return(new CIMEnumerateQualifiersResponseMessage(
1492 messageId,
1493 cimException,
1494 QueueIdStack(),
1495 qualifierDecls));
|
1496 mike 1.2 }
1497
1498 CIMDeleteQualifierResponseMessage* CIMOperationResponseDecoder::_decodeDeleteQualifierResponse(
|
1499 kumpf 1.60 XmlParser& parser,
1500 const String& messageId,
1501 Boolean isEmptyImethodresponseTag)
|
1502 mike 1.2 {
1503 XmlEntry entry;
|
1504 kumpf 1.12 CIMException cimException;
|
1505 mike 1.2
|
1506 kumpf 1.60 if (!isEmptyImethodresponseTag)
|
1507 mike 1.2 {
|
1508 kumpf 1.60 if (XmlReader::getErrorElement(parser, cimException))
1509 {
1510 return(new CIMDeleteQualifierResponseMessage(
1511 messageId,
1512 cimException,
1513 QueueIdStack()));
1514 }
1515
1516 if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
1517 {
1518 if (entry.type != XmlEntry::EMPTY_TAG)
1519 {
1520 XmlReader::expectEndTag(parser, "IRETURNVALUE");
1521 }
1522 }
|
1523 mike 1.2 }
|
1524 kumpf 1.60
1525 return(new CIMDeleteQualifierResponseMessage(
1526 messageId,
1527 cimException,
1528 QueueIdStack()));
|
1529 mike 1.2 }
1530
1531 CIMReferenceNamesResponseMessage* CIMOperationResponseDecoder::_decodeReferenceNamesResponse(
|
1532 kumpf 1.60 XmlParser& parser,
1533 const String& messageId,
1534 Boolean isEmptyImethodresponseTag)
|
1535 mike 1.2 {
1536 XmlEntry entry;
|
1537 kumpf 1.12 CIMException cimException;
|
1538 kumpf 1.60 Array<CIMObjectPath> objectPaths;
|
1539 mike 1.2
|
1540 kumpf 1.60 if (!isEmptyImethodresponseTag)
|
1541 mike 1.2 {
|
1542 kumpf 1.60 if (XmlReader::getErrorElement(parser, cimException))
1543 {
1544 return(new CIMReferenceNamesResponseMessage(
1545 messageId,
1546 cimException,
1547 QueueIdStack(),
1548 Array<CIMObjectPath>()));
1549 }
1550
1551 if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
1552 {
1553 if (entry.type != XmlEntry::EMPTY_TAG)
1554 {
1555 CIMObjectPath objectPath;
1556
1557 while (XmlReader::getObjectPathElement(parser, objectPath))
1558 objectPaths.append(objectPath);
1559
1560 XmlReader::expectEndTag(parser, "IRETURNVALUE");
1561 }
1562 }
|
1563 mike 1.2 }
1564
|
1565 kumpf 1.60 return(new CIMReferenceNamesResponseMessage(
1566 messageId,
1567 cimException,
1568 QueueIdStack(),
1569 objectPaths));
|
1570 mike 1.2 }
1571
1572 CIMReferencesResponseMessage* CIMOperationResponseDecoder::_decodeReferencesResponse(
|
1573 kumpf 1.60 XmlParser& parser,
1574 const String& messageId,
1575 Boolean isEmptyImethodresponseTag)
|
1576 mike 1.2 {
1577 XmlEntry entry;
|
1578 kumpf 1.12 CIMException cimException;
|
1579 kumpf 1.60 Array<CIMObject> objectWithPathArray;
|
1580 mike 1.2
|
1581 kumpf 1.60 if (!isEmptyImethodresponseTag)
|
1582 mike 1.2 {
|
1583 kumpf 1.60 if (XmlReader::getErrorElement(parser, cimException))
1584 {
1585 return(new CIMReferencesResponseMessage(
1586 messageId,
1587 cimException,
1588 QueueIdStack(),
1589 Array<CIMObject>()));
1590 }
1591
1592 if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
1593 {
1594 if (entry.type != XmlEntry::EMPTY_TAG)
1595 {
1596 CIMObject objectWithPath;
1597
1598 while (XmlReader::getValueObjectWithPathElement(
1599 parser, objectWithPath))
1600 {
1601 objectWithPathArray.append(objectWithPath);
1602 }
1603
1604 kumpf 1.60 XmlReader::expectEndTag(parser, "IRETURNVALUE");
1605 }
1606 }
|
1607 mike 1.2 }
1608
|
1609 kumpf 1.60 return(new CIMReferencesResponseMessage(
1610 messageId,
1611 cimException,
1612 QueueIdStack(),
1613 objectWithPathArray));
|
1614 mike 1.2 }
1615
1616 CIMAssociatorNamesResponseMessage* CIMOperationResponseDecoder::_decodeAssociatorNamesResponse(
|
1617 kumpf 1.60 XmlParser& parser,
1618 const String& messageId,
1619 Boolean isEmptyImethodresponseTag)
|
1620 mike 1.2 {
1621 XmlEntry entry;
|
1622 kumpf 1.12 CIMException cimException;
|
1623 kumpf 1.60 Array<CIMObjectPath> objectPaths;
|
1624 mike 1.2
|
1625 kumpf 1.60 if (!isEmptyImethodresponseTag)
|
1626 mike 1.2 {
|
1627 kumpf 1.60 if (XmlReader::getErrorElement(parser, cimException))
1628 {
1629 return(new CIMAssociatorNamesResponseMessage(
1630 messageId,
1631 cimException,
1632 QueueIdStack(),
1633 Array<CIMObjectPath>()));
1634 }
1635
1636 if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
1637 {
1638 if (entry.type != XmlEntry::EMPTY_TAG)
1639 {
1640 CIMObjectPath objectPath;
1641
1642 while (XmlReader::getObjectPathElement(parser, objectPath))
1643 objectPaths.append(objectPath);
1644
1645 XmlReader::expectEndTag(parser, "IRETURNVALUE");
1646 }
1647 }
|
1648 mike 1.2 }
1649
|
1650 kumpf 1.60 return(new CIMAssociatorNamesResponseMessage(
1651 messageId,
1652 cimException,
1653 QueueIdStack(),
1654 objectPaths));
|
1655 mike 1.2 }
1656
1657 CIMAssociatorsResponseMessage* CIMOperationResponseDecoder::_decodeAssociatorsResponse(
|
1658 kumpf 1.60 XmlParser& parser,
1659 const String& messageId,
1660 Boolean isEmptyImethodresponseTag)
|
1661 mike 1.2 {
1662 XmlEntry entry;
|
1663 kumpf 1.12 CIMException cimException;
|
1664 kumpf 1.60 Array<CIMObject> objectWithPathArray;
|
1665 mike 1.2
|
1666 kumpf 1.60 if (!isEmptyImethodresponseTag)
|
1667 mike 1.2 {
|
1668 kumpf 1.60 if (XmlReader::getErrorElement(parser, cimException))
1669 {
1670 return(new CIMAssociatorsResponseMessage(
1671 messageId,
1672 cimException,
1673 QueueIdStack(),
1674 Array<CIMObject>()));
1675 }
1676
1677 if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
1678 {
1679 if (entry.type != XmlEntry::EMPTY_TAG)
1680 {
1681 CIMObject objectWithPath;
1682
1683 while (XmlReader::getValueObjectWithPathElement(
1684 parser, objectWithPath))
1685 {
1686 objectWithPathArray.append(objectWithPath);
1687 }
1688
1689 kumpf 1.60 XmlReader::expectEndTag(parser, "IRETURNVALUE");
1690 }
1691 }
|
1692 mike 1.2 }
1693
|
1694 kumpf 1.60 return(new CIMAssociatorsResponseMessage(
1695 messageId,
1696 cimException,
1697 QueueIdStack(),
1698 objectWithPathArray));
|
1699 kumpf 1.10 }
1700
1701 CIMExecQueryResponseMessage* CIMOperationResponseDecoder::_decodeExecQueryResponse(
|
1702 kumpf 1.60 XmlParser& parser,
1703 const String& messageId,
1704 Boolean isEmptyImethodresponseTag)
|
1705 kumpf 1.10 {
1706 XmlEntry entry;
|
1707 kumpf 1.12 CIMException cimException;
|
1708 kumpf 1.60 Array<CIMObject> objectWithPathArray;
|
1709 kumpf 1.10
|
1710 kumpf 1.60 if (!isEmptyImethodresponseTag)
|
1711 kumpf 1.10 {
|
1712 kumpf 1.60 if (XmlReader::getErrorElement(parser, cimException))
1713 {
1714 return(new CIMExecQueryResponseMessage(
1715 messageId,
1716 cimException,
1717 QueueIdStack(),
1718 Array<CIMObject>()));
1719 }
|
1720 kumpf 1.10
|
1721 kumpf 1.60 if (XmlReader::testStartTagOrEmptyTag(parser, entry, "IRETURNVALUE"))
1722 {
1723 if (entry.type != XmlEntry::EMPTY_TAG)
1724 {
|
1725 kumpf 1.37 XmlReader::getObjectArray(parser, objectWithPathArray);
|
1726 kumpf 1.10
|
1727 kumpf 1.60 XmlReader::expectEndTag(parser, "IRETURNVALUE");
1728 }
1729 }
|
1730 mike 1.2 }
|
1731 kumpf 1.60
1732 return(new CIMExecQueryResponseMessage(
1733 messageId,
1734 cimException,
1735 QueueIdStack(),
1736 objectWithPathArray));
|
1737 mike 1.2 }
1738
1739 CIMInvokeMethodResponseMessage* CIMOperationResponseDecoder::_decodeInvokeMethodResponse(
|
1740 kumpf 1.60 XmlParser& parser,
1741 const String& messageId,
1742 const String& methodName,
1743 Boolean isEmptyMethodresponseTag)
|
1744 mike 1.2 {
|
1745 kumpf 1.12 CIMException cimException;
|
1746 mike 1.2
|
1747 kumpf 1.5 CIMParamValue paramValue;
1748 Array<CIMParamValue> outParameters;
|
1749 kumpf 1.6 CIMValue returnValue;
|
1750 mike 1.2
|
1751 kumpf 1.60 if (!isEmptyMethodresponseTag)
|
1752 mike 1.2 {
|
1753 kumpf 1.60 if (XmlReader::getErrorElement(parser, cimException))
1754 {
1755 return(new CIMInvokeMethodResponseMessage(
1756 messageId,
1757 cimException,
1758 QueueIdStack(),
1759 returnValue,
1760 outParameters,
1761 methodName));
1762 }
1763
|
1764 kumpf 1.4 Boolean isReturnValue = false;
1765 Boolean isParamValue = false;
1766 Boolean gotReturnValue = false;
1767
1768 while ((isReturnValue =
|
1769 kumpf 1.6 XmlReader::getReturnValueElement(parser, returnValue)) ||
|
1770 kumpf 1.5 (isParamValue =
|
1771 kumpf 1.60 XmlReader::getParamValueElement(parser, paramValue)))
|
1772 kumpf 1.4 {
1773 if (isReturnValue)
1774 {
1775 if (gotReturnValue)
1776 {
|
1777 kumpf 1.60 // l10n
|
1778 humberto 1.43
|
1779 kumpf 1.60 // throw XmlValidationError(parser.getLine(),
1780 // "unexpected RETURNVALUE element");
|
1781 humberto 1.43
|
1782 kumpf 1.60 MessageLoaderParms mlParms("Client.CIMOperationResponseDecoder.EXPECTED_RETURNVALUE_ELEMENT",
1783 "unexpected RETURNVALUE element");
|
1784 humberto 1.43
|
1785 kumpf 1.60 throw XmlValidationError(parser.getLine(), mlParms);
|
1786 kumpf 1.4 }
1787 gotReturnValue = true;
1788 }
1789 else // isParamValue == true
1790 {
|
1791 kumpf 1.60 outParameters.append(paramValue);
|
1792 kumpf 1.4 }
1793
1794 isReturnValue = false;
1795 isParamValue = false;
1796 }
|
1797 kumpf 1.60 }
|
1798 kumpf 1.4
|
1799 kumpf 1.60 return(new CIMInvokeMethodResponseMessage(
1800 messageId,
1801 cimException,
1802 QueueIdStack(),
1803 returnValue,
1804 outParameters,
1805 methodName));
|
1806 mike 1.2 }
1807
1808 PEGASUS_NAMESPACE_END
|