1 mike 1.2 //%/////////////////////////////////////////////////////////////////////////////
2 //
|
3 kumpf 1.25 // Copyright (c) 2000, 2001, 2002 BMC Software, Hewlett-Packard Company, IBM,
|
4 mike 1.2 // The Open Group, Tivoli Systems
5 //
6 // Permission is hereby granted, free of charge, to any person obtaining a copy
7 // of this software and associated documentation files (the "Software"), to
8 // deal in the Software without restriction, including without limitation the
9 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
10 // sell copies of the Software, and to permit persons to whom the Software is
11 // furnished to do so, subject to the following conditions:
|
12 kumpf 1.25 //
|
13 mike 1.2 // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
14 // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
15 // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
16 // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
17 // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
18 // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
19 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21 //
22 //==============================================================================
23 //
24 // Author: Mike Brasher (mbrasher@bmc.com)
25 //
26 // Modified By: Nitin Upasani, Hewlett-Packard Company (Nitin_Upasani@hp.com)
27 // Yi Zhou, Hewlett-Packard Company (yi_zhou@hp.com)
28 // Nag Boranna, Hewlett-Packard Company (nagaraja_boranna@hp.com)
29 // Roger Kumpf, Hewlett-Packard Company (roger_kumpf@hp.com)
|
30 kumpf 1.23 // Carol Ann Krug Graves, Hewlett-Packard Company
31 // (carolann_graves@hp.com)
|
32 mike 1.2 //
33 //%/////////////////////////////////////////////////////////////////////////////
34
35 #include <Pegasus/Common/Config.h>
36 #include <iostream>
|
37 kumpf 1.15 #include <Pegasus/Common/Constants.h>
|
38 mike 1.2 #include <Pegasus/Common/XmlParser.h>
39 #include <Pegasus/Common/XmlReader.h>
40 #include <Pegasus/Common/System.h>
41 #include <Pegasus/Common/XmlWriter.h>
42 #include <Pegasus/Common/HTTPMessage.h>
43 #include <Pegasus/Common/CIMMessage.h>
44 #include "CIMOperationResponseDecoder.h"
45
46 PEGASUS_USING_STD;
47
48 PEGASUS_NAMESPACE_BEGIN
49
50 CIMOperationResponseDecoder::CIMOperationResponseDecoder(
51 MessageQueue* outputQueue,
52 MessageQueue* encoderQueue,
53 ClientAuthenticator* authenticator)
54 :
|
55 kumpf 1.16 MessageQueue(PEGASUS_QUEUENAME_OPRESPDECODER),
|
56 mike 1.2 _outputQueue(outputQueue),
57 _encoderQueue(encoderQueue),
58 _authenticator(authenticator)
59 {
60
61 }
62
63 CIMOperationResponseDecoder::~CIMOperationResponseDecoder()
64 {
65
66 }
67
68 void CIMOperationResponseDecoder::setEncoderQueue(MessageQueue* encoderQueue)
69 {
70 _encoderQueue = encoderQueue;
71 }
72
73 void CIMOperationResponseDecoder::handleEnqueue()
74 {
75 Message* message = dequeue();
76
77 mike 1.2 if (!message)
78 return;
79
80 switch (message->getType())
81 {
82 case HTTP_MESSAGE:
83 {
|
84 mday 1.3
|
85 mike 1.2 HTTPMessage* httpMessage = (HTTPMessage*)message;
86 _handleHTTPMessage(httpMessage);
87 break;
88 }
89
90 default:
|
91 kumpf 1.17 PEGASUS_ASSERT(0);
|
92 mike 1.2 break;
93 }
94
95 delete message;
96 }
97
98 void CIMOperationResponseDecoder::_handleHTTPMessage(HTTPMessage* httpMessage)
99 {
100 //
101 // Parse the HTTP message:
102 //
103
104 String startLine;
105 Array<HTTPHeader> headers;
106 Sint8* content;
107 Uint32 contentLength;
108
|
109 kumpf 1.19 if (httpMessage->message.size() == 0)
110 {
|
111 kumpf 1.20 CIMClientMalformedHTTPException* malformedHTTPException =
112 new CIMClientMalformedHTTPException("Empty HTTP response message.");
|
113 kumpf 1.19 ClientExceptionMessage * response =
114 new ClientExceptionMessage(malformedHTTPException);
115
116 _outputQueue->enqueue(response);
117 return;
118 }
119
|
120 mike 1.2 httpMessage->parse(startLine, headers, contentLength);
121
|
122 kumpf 1.19 //
123 // Get the status line info
124 //
125
126 String httpVersion;
127 Uint32 statusCode;
128 String reasonPhrase;
129
130 Boolean parsableMessage = HTTPMessage::parseStatusLine(
131 startLine, httpVersion, statusCode, reasonPhrase);
132 if (!parsableMessage)
133 {
|
134 kumpf 1.20 CIMClientMalformedHTTPException* malformedHTTPException = new
135 CIMClientMalformedHTTPException("Malformed HTTP response message.");
|
136 kumpf 1.19 ClientExceptionMessage * response =
137 new ClientExceptionMessage(malformedHTTPException);
138
139 _outputQueue->enqueue(response);
140 return;
141 }
142
|
143 kumpf 1.8 try
|
144 mike 1.2 {
|
145 kumpf 1.8 if (_authenticator->checkResponseHeaderForChallenge(headers))
146 {
147 //
148 // Get the original request, put that in the encoder's queue for
149 // re-sending with authentication challenge response.
150 //
151 Message* reqMessage = _authenticator->getRequestMessage();
152 _encoderQueue->enqueue(reqMessage);
|
153 mike 1.2
|
154 kumpf 1.8 return;
155 }
156 else
157 {
158 //
159 // Received a valid/error response from the server.
160 // We do not need the original request message anymore, hence delete
161 // the request message by getting the handle from the ClientAuthenticator.
162 //
163 Message* reqMessage = _authenticator->getRequestMessage();
164 _authenticator->clearRequest();
165 if (reqMessage)
166 {
167 delete reqMessage;
168 }
169 }
|
170 mike 1.2 }
|
171 kumpf 1.8 catch(InvalidAuthHeader& e)
|
172 mike 1.2 {
|
173 kumpf 1.20 CIMClientMalformedHTTPException* malformedHTTPException =
174 new CIMClientMalformedHTTPException(e.getMessage());
|
175 kumpf 1.17 ClientExceptionMessage * response =
176 new ClientExceptionMessage(malformedHTTPException);
|
177 mike 1.2
|
178 kumpf 1.17 _outputQueue->enqueue(response);
|
179 kumpf 1.15 return;
180 }
|
181 kumpf 1.22 catch(UnauthorizedAccess& e)
182 {
|
183 kumpf 1.27 CannotConnectException* cannotConnectException =
184 new CannotConnectException(e.getMessage());
|
185 kumpf 1.22 ClientExceptionMessage * response =
|
186 kumpf 1.27 new ClientExceptionMessage(cannotConnectException);
|
187 kumpf 1.22
188 _outputQueue->enqueue(response);
189 return;
190 }
|
191 kumpf 1.15
192 //
193 // Check for a success (200 OK) response
194 //
|
195 kumpf 1.19
|
196 kumpf 1.17 if (statusCode != HTTP_STATUSCODE_OK)
|
197 kumpf 1.15 {
198 String cimError;
199 String pegasusError;
200
201 HTTPMessage::lookupHeader(headers, "CIMError", cimError);
202 HTTPMessage::lookupHeader(headers, PEGASUS_HTTPHEADERTAG_ERRORDETAIL, pegasusError);
203
|
204 kumpf 1.20 CIMClientHTTPError* httpError =
205 new CIMClientHTTPError(statusCode, cimError, pegasusError);
|
206 kumpf 1.17 ClientExceptionMessage * response =
207 new ClientExceptionMessage(httpError);
|
208 kumpf 1.15
209 _outputQueue->enqueue(response);
|
210 kumpf 1.8 return;
|
211 mike 1.2 }
212
213 //
214 // Search for "CIMOperation" header:
215 //
216
217 String cimOperation;
218
219 if (!HTTPMessage::lookupHeader(
|
220 kumpf 1.18 headers, "CIMOperation", cimOperation, true))
|
221 mike 1.2 {
|
222 kumpf 1.20 CIMClientMalformedHTTPException* malformedHTTPException = new
223 CIMClientMalformedHTTPException("Missing CIMOperation HTTP header");
|
224 kumpf 1.17 ClientExceptionMessage * response =
225 new ClientExceptionMessage(malformedHTTPException);
226
227 _outputQueue->enqueue(response);
228 return;
|
229 mike 1.2 }
230
231 //
232 // Zero-terminate the message:
233 //
234
235 httpMessage->message.append('\0');
236
237 // Calculate the beginning of the content from the message size and
238 // the content length. Subtract 1 to take into account the null
239 // character we just added to the end of the message.
240
241 content = (Sint8*) httpMessage->message.getData() +
242 httpMessage->message.size() - contentLength - 1;
243
244 //
245 // If it is a method response, then dispatch it to be handled:
246 //
247
248 if (!String::equalNoCase(cimOperation, "MethodResponse"))
249 {
|
250 kumpf 1.20 CIMClientMalformedHTTPException* malformedHTTPException =
251 new CIMClientMalformedHTTPException(
252 String("Received CIMOperation HTTP header value \"") +
|
253 kumpf 1.17 cimOperation + "\", expected \"MethodResponse\"");
254 ClientExceptionMessage * response =
255 new ClientExceptionMessage(malformedHTTPException);
256
257 _outputQueue->enqueue(response);
258 return;
|
259 mike 1.2 }
260
261 _handleMethodResponse(content);
262 }
263
264 void CIMOperationResponseDecoder::_handleMethodResponse(char* content)
265 {
266 Message* response = 0;
267
268 //
269 // Create and initialize XML parser:
270 //
271
272 XmlParser parser((char*)content);
273 XmlEntry entry;
274
275 try
276 {
277 //
278 // Process <?xml ... >
279 //
280 mike 1.2
|
281 kumpf 1.11 const char* xmlVersion = 0;
282 const char* xmlEncoding = 0;
283
284 XmlReader::getXmlDeclaration(parser, xmlVersion, xmlEncoding);
|
285 mike 1.2
286 //
287 // Process <CIM ... >
288 //
289
|
290 kumpf 1.9 const char* cimVersion = 0;
291 const char* dtdVersion = 0;
292
|
293 kumpf 1.17 // ATTN-RK-P3-20020416: Need to validate these versions?
|
294 kumpf 1.9 XmlReader::getCimStartTag(parser, cimVersion, dtdVersion);
|
295 mike 1.2
296 //
297 // Expect <MESSAGE ... >
298 //
299
300 String messageId;
|
301 kumpf 1.9 String protocolVersion;
|
302 mike 1.2
303 if (!XmlReader::getMessageStartTag(parser, messageId, protocolVersion))
304 throw XmlValidationError(
305 parser.getLine(), "expected MESSAGE element");
306
|
307 kumpf 1.9 if (!String::equalNoCase(protocolVersion, "1.0"))
|
308 mike 1.2 {
|
309 kumpf 1.20 CIMClientResponseException* responseException =
310 new CIMClientResponseException(
311 String("Received unsupported protocol version \"") +
|
312 kumpf 1.17 protocolVersion + "\", expected \"1.0\"");
313 ClientExceptionMessage * response =
314 new ClientExceptionMessage(responseException);
|
315 mike 1.2
|
316 kumpf 1.17 _outputQueue->enqueue(response);
317 return;
|
318 mike 1.2 }
319
320 //
321 // Expect <SIMPLERSP ... >
322 //
323
324 XmlReader::expectStartTag(parser, entry, "SIMPLERSP");
325
326 //
327 // Expect <IMETHODRESPONSE ... >
328 //
329
330 const char* iMethodResponseName = 0;
331
332 if (XmlReader::getIMethodResponseStartTag(parser, iMethodResponseName))
333 {
334 //
335 // Dispatch the method:
336 //
337
338 if (EqualNoCase(iMethodResponseName, "GetClass"))
339 mike 1.2 response = _decodeGetClassResponse(parser, messageId);
340 else if (EqualNoCase(iMethodResponseName, "GetInstance"))
341 response = _decodeGetInstanceResponse(parser, messageId);
342 else if (EqualNoCase(iMethodResponseName, "EnumerateClassNames"))
343 response = _decodeEnumerateClassNamesResponse(parser,messageId);
344 else if (EqualNoCase(iMethodResponseName, "References"))
345 response = _decodeReferencesResponse(parser, messageId);
346 else if (EqualNoCase(iMethodResponseName, "ReferenceNames"))
347 response = _decodeReferenceNamesResponse(parser, messageId);
348 else if (EqualNoCase(iMethodResponseName, "AssociatorNames"))
349 response = _decodeAssociatorNamesResponse(parser, messageId);
350 else if (EqualNoCase(iMethodResponseName, "Associators"))
351 response = _decodeAssociatorsResponse(parser, messageId);
352 else if (EqualNoCase(iMethodResponseName, "CreateInstance"))
353 response = _decodeCreateInstanceResponse(parser, messageId);
354 else if (EqualNoCase(iMethodResponseName,"EnumerateInstanceNames"))
355 response = _decodeEnumerateInstanceNamesResponse(
356 parser, messageId);
357 else if (EqualNoCase(iMethodResponseName,"EnumerateInstances"))
358 response = _decodeEnumerateInstancesResponse(parser, messageId);
359 else if (EqualNoCase(iMethodResponseName, "GetProperty"))
360 mike 1.2 response = _decodeGetPropertyResponse(parser, messageId);
361 else if (EqualNoCase(iMethodResponseName, "SetProperty"))
362 response = _decodeSetPropertyResponse(parser, messageId);
363 else if (EqualNoCase(iMethodResponseName, "DeleteQualifier"))
364 response = _decodeDeleteQualifierResponse(parser, messageId);
365 else if (EqualNoCase(iMethodResponseName, "GetQualifier"))
366 response = _decodeGetQualifierResponse(parser, messageId);
367 else if (EqualNoCase(iMethodResponseName, "SetQualifier"))
368 response = _decodeSetQualifierResponse(parser, messageId);
369 else if (EqualNoCase(iMethodResponseName, "EnumerateQualifiers"))
370 response = _decodeEnumerateQualifiersResponse(parser,messageId);
371 else if (EqualNoCase(iMethodResponseName, "EnumerateClasses"))
372 response = _decodeEnumerateClassesResponse(parser, messageId);
373 else if (EqualNoCase(iMethodResponseName, "CreateClass"))
374 response = _decodeCreateClassResponse(parser, messageId);
375 else if (EqualNoCase(iMethodResponseName, "ModifyClass"))
376 response = _decodeModifyClassResponse(parser, messageId);
377 else if (EqualNoCase(iMethodResponseName, "ModifyInstance"))
378 response = _decodeModifyInstanceResponse(parser, messageId);
379 else if (EqualNoCase(iMethodResponseName, "DeleteClass"))
380 response = _decodeDeleteClassResponse(parser, messageId);
381 mike 1.2 else if (EqualNoCase(iMethodResponseName, "DeleteInstance"))
382 response = _decodeDeleteInstanceResponse(parser, messageId);
|
383 kumpf 1.10 else if (EqualNoCase(iMethodResponseName, "ExecQuery"))
384 response = _decodeExecQueryResponse(parser, messageId);
|
385 mike 1.2 else
386 {
387 // Unrecognized IMethodResponse name attribute
388 throw XmlValidationError(parser.getLine(),
389 String("Unrecognized IMethodResponse name \"") +
390 iMethodResponseName + "\"");
391 }
392
393 //
394 // Handle end tag:
395 //
396
397 XmlReader::expectEndTag(parser, "IMETHODRESPONSE");
398 }
399 else if (XmlReader::getMethodResponseStartTag(parser,
400 iMethodResponseName))
401 {
402 response = _decodeInvokeMethodResponse(
403 parser, messageId, iMethodResponseName);
404
405 //
406 mike 1.2 // Handle end tag:
407 //
408 XmlReader::expectEndTag(parser, "METHODRESPONSE");
409 }
410 else
411 {
412 throw XmlValidationError(parser.getLine(),
413 "expected METHODRESPONSE or IMETHODRESPONSE element");
414 }
415
416 //
417 // Handle end tags:
418 //
419 XmlReader::expectEndTag(parser, "SIMPLERSP");
420 XmlReader::expectEndTag(parser, "MESSAGE");
421 XmlReader::expectEndTag(parser, "CIM");
422 }
|
423 kumpf 1.17 catch (XmlException& x)
424 {
425 if (response)
426 {
427 delete response;
428 }
429
430 response = new ClientExceptionMessage(
|
431 kumpf 1.20 new CIMClientXmlException(x.getMessage()));
|
432 kumpf 1.17 }
|
433 mike 1.2 catch (Exception& x)
434 {
|
435 kumpf 1.17 // Shouldn't ever get exceptions other than XmlExceptions.
436 PEGASUS_ASSERT(0);
437
438 if (response)
439 {
440 delete response;
441 }
|
442 mike 1.2
|
443 kumpf 1.17 response = new ClientExceptionMessage(
|
444 kumpf 1.20 new CIMClientException(x.getMessage()));
|
445 mike 1.2 }
446
447 _outputQueue->enqueue(response);
448 }
449
450 CIMCreateClassResponseMessage* CIMOperationResponseDecoder::_decodeCreateClassResponse(
451 XmlParser& parser,
452 const String& messageId)
453 {
454 XmlEntry entry;
|
455 kumpf 1.12 CIMException cimException;
|
456 mike 1.2
|
457 kumpf 1.12 if (XmlReader::getErrorElement(parser, cimException))
|
458 mike 1.2 {
459 return(new CIMCreateClassResponseMessage(
460 messageId,
|
461 kumpf 1.12 cimException,
|
462 mike 1.2 QueueIdStack()));
463
464 }
|
465 kumpf 1.14 else
|
466 mike 1.2 {
|
467 kumpf 1.14 if (XmlReader::testStartTag(parser, entry, "IRETURNVALUE"))
468 {
469 XmlReader::expectEndTag(parser, "IRETURNVALUE");
470 }
|
471 mike 1.2
472 return(new CIMCreateClassResponseMessage(
473 messageId,
|
474 kumpf 1.12 cimException,
|
475 mike 1.2 QueueIdStack()));
476 }
477 }
478
479 CIMGetClassResponseMessage* CIMOperationResponseDecoder::_decodeGetClassResponse(
480 XmlParser& parser, const String& messageId)
481 {
482 XmlEntry entry;
|
483 kumpf 1.12 CIMException cimException;
|
484 mike 1.2
|
485 kumpf 1.12 if (XmlReader::getErrorElement(parser, cimException))
|
486 mike 1.2 {
487 return(new CIMGetClassResponseMessage(
488 messageId,
|
489 kumpf 1.12 cimException,
|
490 mike 1.2 QueueIdStack(),
491 CIMClass()));
492 }
493 else if (XmlReader::testStartTag(parser, entry, "IRETURNVALUE"))
494 {
495 CIMClass cimClass;
496
497 if (!XmlReader::getClassElement(parser, cimClass))
498 throw XmlValidationError(parser.getLine(),"expected CLASS element");
499
500 XmlReader::testEndTag(parser, "IRETURNVALUE");
501
502 return(new CIMGetClassResponseMessage(
503 messageId,
|
504 kumpf 1.12 cimException,
|
505 mike 1.2 QueueIdStack(),
506 cimClass));
507 }
508 else
509 {
510 throw XmlValidationError(parser.getLine(),
511 "expected ERROR or IRETURNVALUE element");
512 }
513 }
514
515 CIMModifyClassResponseMessage* CIMOperationResponseDecoder::_decodeModifyClassResponse(
516 XmlParser& parser, const String& messageId)
517 {
518 XmlEntry entry;
|
519 kumpf 1.12 CIMException cimException;
|
520 mike 1.2
|
521 kumpf 1.12 if (XmlReader::getErrorElement(parser, cimException))
|
522 mike 1.2 {
523 return(new CIMModifyClassResponseMessage(
524 messageId,
|
525 kumpf 1.12 cimException,
|
526 mike 1.2 QueueIdStack()));
527 }
|
528 kumpf 1.14 else
|
529 mike 1.2 {
|
530 kumpf 1.14 if (XmlReader::testStartTag(parser, entry, "IRETURNVALUE"))
531 {
532 XmlReader::expectEndTag(parser, "IRETURNVALUE");
533 }
|
534 mike 1.2
535 return(new CIMModifyClassResponseMessage(
536 messageId,
|
537 kumpf 1.12 cimException,
|
538 mike 1.2 QueueIdStack()));
539 }
540 }
541
542 CIMEnumerateClassNamesResponseMessage* CIMOperationResponseDecoder::_decodeEnumerateClassNamesResponse(
543 XmlParser& parser, const String& messageId)
544 {
545 XmlEntry entry;
|
546 kumpf 1.12 CIMException cimException;
|
547 mike 1.2
|
548 kumpf 1.12 if (XmlReader::getErrorElement(parser, cimException))
|
549 mike 1.2 {
550 return(new CIMEnumerateClassNamesResponseMessage(
551 messageId,
|
552 kumpf 1.12 cimException,
|
553 mike 1.2 QueueIdStack(),
554 Array<String>()));
555 }
|
556 kumpf 1.14 else
|
557 mike 1.2 {
558 Array<String> classNames;
559
|
560 kumpf 1.14 if (XmlReader::testStartTag(parser, entry, "IRETURNVALUE"))
561 {
562 String className;
563
564 while (XmlReader::getClassNameElement(parser, className, false))
565 classNames.append(className);
|
566 mike 1.2
|
567 kumpf 1.14 XmlReader::expectEndTag(parser, "IRETURNVALUE");
568 }
|
569 mike 1.2
570 return(new CIMEnumerateClassNamesResponseMessage(
571 messageId,
|
572 kumpf 1.12 cimException,
|
573 mike 1.2 QueueIdStack(),
574 classNames));
575 }
576 }
577
578 CIMEnumerateClassesResponseMessage* CIMOperationResponseDecoder::_decodeEnumerateClassesResponse(
579 XmlParser& parser, const String& messageId)
580 {
581 XmlEntry entry;
|
582 kumpf 1.12 CIMException cimException;
|
583 mike 1.2
|
584 kumpf 1.12 if (XmlReader::getErrorElement(parser, cimException))
|
585 mike 1.2 {
586 return(new CIMEnumerateClassesResponseMessage(
587 messageId,
|
588 kumpf 1.12 cimException,
|
589 mike 1.2 QueueIdStack(),
590 Array<CIMClass>()));
591 }
|
592 kumpf 1.14 else
|
593 mike 1.2 {
594 Array<CIMClass> cimClasses;
595
|
596 kumpf 1.14 if (XmlReader::testStartTag(parser, entry, "IRETURNVALUE"))
597 {
598 CIMClass cimClass;
599
600 while (XmlReader::getClassElement(parser, cimClass))
601 cimClasses.append(cimClass);
|
602 mike 1.2
|
603 kumpf 1.14 XmlReader::expectEndTag(parser, "IRETURNVALUE");
604 }
|
605 mike 1.2
606 return(new CIMEnumerateClassesResponseMessage(
607 messageId,
|
608 kumpf 1.12 cimException,
|
609 mike 1.2 QueueIdStack(),
610 cimClasses));
611 }
612 }
613
614 CIMDeleteClassResponseMessage* CIMOperationResponseDecoder::_decodeDeleteClassResponse(
615 XmlParser& parser, const String& messageId)
616 {
617 XmlEntry entry;
|
618 kumpf 1.12 CIMException cimException;
|
619 mike 1.2
|
620 kumpf 1.12 if (XmlReader::getErrorElement(parser, cimException))
|
621 mike 1.2 {
622 return(new CIMDeleteClassResponseMessage(
623 messageId,
|
624 kumpf 1.12 cimException,
|
625 mike 1.2 QueueIdStack()));
626 }
|
627 kumpf 1.14 else
|
628 mike 1.2 {
|
629 kumpf 1.14 if (XmlReader::testStartTag(parser, entry, "IRETURNVALUE"))
630 {
631 XmlReader::expectEndTag(parser, "IRETURNVALUE");
632 }
|
633 mike 1.2
634 return(new CIMDeleteClassResponseMessage(
635 messageId,
|
636 kumpf 1.12 cimException,
|
637 mike 1.2 QueueIdStack()));
638 }
639 }
640
641 CIMCreateInstanceResponseMessage* CIMOperationResponseDecoder::_decodeCreateInstanceResponse(
642 XmlParser& parser, const String& messageId)
643 {
644 XmlEntry entry;
|
645 kumpf 1.12 CIMException cimException;
|
646 mike 1.2
|
647 kumpf 1.12 if (XmlReader::getErrorElement(parser, cimException))
|
648 mike 1.2 {
649 return(new CIMCreateInstanceResponseMessage(
650 messageId,
|
651 kumpf 1.12 cimException,
|
652 mike 1.2 QueueIdStack(),
|
653 kumpf 1.21 CIMObjectPath()));
|
654 mike 1.2 }
655 else if (XmlReader::testStartTag(parser, entry, "IRETURNVALUE"))
656 {
|
657 kumpf 1.21 CIMObjectPath instanceName;
|
658 mike 1.2 XmlReader::getInstanceNameElement(parser, instanceName);
659
660 XmlReader::testEndTag(parser, "IRETURNVALUE");
661
662 return(new CIMCreateInstanceResponseMessage(
663 messageId,
|
664 kumpf 1.12 cimException,
|
665 mike 1.2 QueueIdStack(),
666 instanceName));
667 }
668 else
669 {
670 throw XmlValidationError(parser.getLine(),
671 "expected ERROR or IRETURNVALUE element");
672 }
673 }
674
675 CIMGetInstanceResponseMessage* CIMOperationResponseDecoder::_decodeGetInstanceResponse(
676 XmlParser& parser, const String& messageId)
677 {
678 XmlEntry entry;
|
679 kumpf 1.12 CIMException cimException;
|
680 mike 1.2
|
681 kumpf 1.12 if (XmlReader::getErrorElement(parser, cimException))
|
682 mike 1.2 {
683 return(new CIMGetInstanceResponseMessage(
684 messageId,
|
685 kumpf 1.12 cimException,
|
686 mike 1.2 QueueIdStack(),
687 CIMInstance()));
688 }
689 else if (XmlReader::testStartTag(parser, entry, "IRETURNVALUE"))
690 {
691 CIMInstance cimInstance;
692
693 if (!XmlReader::getInstanceElement(parser, cimInstance))
694 {
695 throw XmlValidationError(
696 parser.getLine(), "expected INSTANCE element");
697 }
698
699 XmlReader::testEndTag(parser, "IRETURNVALUE");
700
701 return(new CIMGetInstanceResponseMessage(
702 messageId,
|
703 kumpf 1.12 cimException,
|
704 mike 1.2 QueueIdStack(),
705 cimInstance));
706 }
707 else
708 {
709 throw XmlValidationError(parser.getLine(),
710 "expected ERROR or IRETURNVALUE element");
711 }
712 }
713
714 CIMModifyInstanceResponseMessage* CIMOperationResponseDecoder::_decodeModifyInstanceResponse(
715 XmlParser& parser, const String& messageId)
716 {
717 XmlEntry entry;
|
718 kumpf 1.12 CIMException cimException;
|
719 mike 1.2
|
720 kumpf 1.12 if (XmlReader::getErrorElement(parser, cimException))
|
721 mike 1.2 {
722 return(new CIMModifyInstanceResponseMessage(
723 messageId,
|
724 kumpf 1.12 cimException,
|
725 mike 1.2 QueueIdStack()));
726 }
|
727 kumpf 1.14 else
|
728 mike 1.2 {
|
729 kumpf 1.14 if (XmlReader::testStartTag(parser, entry, "IRETURNVALUE"))
730 {
731 XmlReader::expectEndTag(parser, "IRETURNVALUE");
732 }
|
733 mike 1.2
734 return(new CIMModifyInstanceResponseMessage(
735 messageId,
|
736 kumpf 1.12 cimException,
|
737 mike 1.2 QueueIdStack()));
738 }
739 }
740
741 CIMEnumerateInstanceNamesResponseMessage* CIMOperationResponseDecoder::_decodeEnumerateInstanceNamesResponse(
742 XmlParser& parser, const String& messageId)
743 {
744 XmlEntry entry;
|
745 kumpf 1.12 CIMException cimException;
|
746 mike 1.2
|
747 kumpf 1.12 if (XmlReader::getErrorElement(parser, cimException))
|
748 mike 1.2 {
749 return(new CIMEnumerateInstanceNamesResponseMessage(
750 messageId,
|
751 kumpf 1.12 cimException,
|
752 mike 1.2 QueueIdStack(),
|
753 kumpf 1.21 Array<CIMObjectPath>()));
|
754 mike 1.2 }
|
755 kumpf 1.14 else
|
756 mike 1.2 {
|
757 kumpf 1.21 Array<CIMObjectPath> instanceNames;
|
758 mike 1.2
|
759 kumpf 1.14 if (XmlReader::testStartTag(parser, entry, "IRETURNVALUE"))
|
760 mike 1.2 {
|
761 kumpf 1.14 String className;
762 Array<KeyBinding> keyBindings;
763
764 while (XmlReader::getInstanceNameElement(
765 parser, className, keyBindings))
766 {
|
767 kumpf 1.21 CIMObjectPath r(
|
768 kumpf 1.14 String::EMPTY,
769 String::EMPTY,
770 className,
771 keyBindings);
772 instanceNames.append(r);
773 }
774
775 XmlReader::expectEndTag(parser, "IRETURNVALUE");
|
776 mike 1.2 }
777
778 return(new CIMEnumerateInstanceNamesResponseMessage(
779 messageId,
|
780 kumpf 1.12 cimException,
|
781 mike 1.2 QueueIdStack(),
782 instanceNames));
783 }
784 }
785
786 CIMEnumerateInstancesResponseMessage* CIMOperationResponseDecoder::_decodeEnumerateInstancesResponse(
787 XmlParser& parser, const String& messageId)
788 {
789 XmlEntry entry;
|
790 kumpf 1.12 CIMException cimException;
|
791 mike 1.2
|
792 kumpf 1.12 if (XmlReader::getErrorElement(parser, cimException))
|
793 mike 1.2 {
794 return(new CIMEnumerateInstancesResponseMessage(
795 messageId,
|
796 kumpf 1.12 cimException,
|
797 mike 1.2 QueueIdStack(),
|
798 kumpf 1.23 Array<CIMInstance>()));
|
799 mike 1.2 }
|
800 kumpf 1.14 else
|
801 mike 1.2 {
|
802 kumpf 1.23 Array<CIMInstance> namedInstances;
|
803 mike 1.2
|
804 kumpf 1.14 if (XmlReader::testStartTag(parser, entry, "IRETURNVALUE"))
805 {
|
806 kumpf 1.23 CIMInstance namedInstance;
|
807 mike 1.2
|
808 kumpf 1.14 while (XmlReader::getNamedInstanceElement(parser, namedInstance))
809 namedInstances.append(namedInstance);
810
811 XmlReader::expectEndTag(parser, "IRETURNVALUE");
812 }
|
813 mike 1.2
814 return(new CIMEnumerateInstancesResponseMessage(
815 messageId,
|
816 kumpf 1.12 cimException,
|
817 mike 1.2 QueueIdStack(),
818 namedInstances));
819 }
820 }
821
822 CIMDeleteInstanceResponseMessage* CIMOperationResponseDecoder::_decodeDeleteInstanceResponse(
823 XmlParser& parser, const String& messageId)
824 {
825 XmlEntry entry;
|
826 kumpf 1.12 CIMException cimException;
|
827 mike 1.2
|
828 kumpf 1.12 if (XmlReader::getErrorElement(parser, cimException))
|
829 mike 1.2 {
830 return(new CIMDeleteInstanceResponseMessage(
831 messageId,
|
832 kumpf 1.12 cimException,
|
833 mike 1.2 QueueIdStack()));
834 }
|
835 kumpf 1.14 else
|
836 mike 1.2 {
|
837 kumpf 1.14 if (XmlReader::testStartTag(parser, entry, "IRETURNVALUE"))
838 {
839 XmlReader::expectEndTag(parser, "IRETURNVALUE");
840 }
|
841 mike 1.2
842 return(new CIMDeleteInstanceResponseMessage(
843 messageId,
|
844 kumpf 1.12 cimException,
|
845 mike 1.2 QueueIdStack()));
846 }
847 }
848
849 CIMGetPropertyResponseMessage* CIMOperationResponseDecoder::_decodeGetPropertyResponse(
850 XmlParser& parser, const String& messageId)
851 {
852 XmlEntry entry;
|
853 kumpf 1.12 CIMException cimException;
|
854 mike 1.2
|
855 kumpf 1.12 if (XmlReader::getErrorElement(parser, cimException))
|
856 mike 1.2 {
857 return(new CIMGetPropertyResponseMessage(
858 messageId,
|
859 kumpf 1.12 cimException,
|
860 mike 1.2 QueueIdStack(),
861 CIMValue()));
862 }
|
863 kumpf 1.14 else
|
864 mike 1.2 {
|
865 kumpf 1.26 CIMValue cimValue(CIMTYPE_STRING, false);
|
866 kumpf 1.14
867 if (XmlReader::testStartTag(parser, entry, "IRETURNVALUE"))
868 {
869 if (!XmlReader::getPropertyValue(parser, cimValue))
870 {
871 // No value given; just return a null String value
872 }
873
874 XmlReader::expectEndTag(parser, "IRETURNVALUE");
875 }
876 else
|
877 mike 1.2 {
|
878 kumpf 1.14 // No value given; just return a null String value
|
879 mike 1.2 }
880
881 return(new CIMGetPropertyResponseMessage(
882 messageId,
|
883 kumpf 1.12 cimException,
|
884 mike 1.2 QueueIdStack(),
885 cimValue));
886 }
887 }
888
889 CIMSetPropertyResponseMessage* CIMOperationResponseDecoder::_decodeSetPropertyResponse(
890 XmlParser& parser, const String& messageId)
891 {
892 XmlEntry entry;
|
893 kumpf 1.12 CIMException cimException;
|
894 mike 1.2
|
895 kumpf 1.12 if (XmlReader::getErrorElement(parser, cimException))
|
896 mike 1.2 {
897 return(new CIMSetPropertyResponseMessage(
898 messageId,
|
899 kumpf 1.12 cimException,
|
900 mike 1.2 QueueIdStack()));
901 }
|
902 kumpf 1.14 else
|
903 mike 1.2 {
|
904 kumpf 1.14 if (XmlReader::testStartTag(parser, entry, "IRETURNVALUE"))
905 {
906 XmlReader::expectEndTag(parser, "IRETURNVALUE");
907 }
|
908 mike 1.2
909 return(new CIMSetPropertyResponseMessage(
910 messageId,
|
911 kumpf 1.12 cimException,
|
912 mike 1.2 QueueIdStack()));
913 }
914 }
915
916 CIMSetQualifierResponseMessage* CIMOperationResponseDecoder::_decodeSetQualifierResponse(
917 XmlParser& parser, const String& messageId)
918 {
919 XmlEntry entry;
|
920 kumpf 1.12 CIMException cimException;
|
921 mike 1.2
|
922 kumpf 1.12 if (XmlReader::getErrorElement(parser, cimException))
|
923 mike 1.2 {
924 return(new CIMSetQualifierResponseMessage(
925 messageId,
|
926 kumpf 1.12 cimException,
|
927 mike 1.2 QueueIdStack()));
928 }
|
929 kumpf 1.14 else
|
930 mike 1.2 {
|
931 kumpf 1.14 if (XmlReader::testStartTag(parser, entry, "IRETURNVALUE"))
932 {
933 XmlReader::expectEndTag(parser, "IRETURNVALUE");
934 }
|
935 mike 1.2
936 return(new CIMSetQualifierResponseMessage(
937 messageId,
|
938 kumpf 1.12 cimException,
|
939 mike 1.2 QueueIdStack()));
940 }
941 }
942
943 CIMGetQualifierResponseMessage* CIMOperationResponseDecoder::_decodeGetQualifierResponse(
944 XmlParser& parser, const String& messageId)
945 {
946 XmlEntry entry;
|
947 kumpf 1.12 CIMException cimException;
|
948 mike 1.2
|
949 kumpf 1.12 if (XmlReader::getErrorElement(parser, cimException))
|
950 mike 1.2 {
951 return(new CIMGetQualifierResponseMessage(
952 messageId,
|
953 kumpf 1.12 cimException,
|
954 mike 1.2 QueueIdStack(),
955 CIMQualifierDecl()));
956 }
957 else if (XmlReader::testStartTag(parser, entry, "IRETURNVALUE"))
958 {
959 CIMQualifierDecl qualifierDecl;
960 XmlReader::getQualifierDeclElement(parser, qualifierDecl);
961
962 XmlReader::testEndTag(parser, "IRETURNVALUE");
963
964 return(new CIMGetQualifierResponseMessage(
965 messageId,
|
966 kumpf 1.12 cimException,
|
967 mike 1.2 QueueIdStack(),
968 qualifierDecl));
969 }
970 else
971 {
972 throw XmlValidationError(parser.getLine(),
973 "expected ERROR or IRETURNVALUE element");
974 }
975 }
976
977 CIMEnumerateQualifiersResponseMessage* CIMOperationResponseDecoder::_decodeEnumerateQualifiersResponse(
978 XmlParser& parser, const String& messageId)
979 {
980 XmlEntry entry;
|
981 kumpf 1.12 CIMException cimException;
|
982 mike 1.2
|
983 kumpf 1.12 if (XmlReader::getErrorElement(parser, cimException))
|
984 mike 1.2 {
985 return(new CIMEnumerateQualifiersResponseMessage(
986 messageId,
|
987 kumpf 1.12 cimException,
|
988 mike 1.2 QueueIdStack(),
989 Array<CIMQualifierDecl>()));
990 }
|
991 kumpf 1.14 else
|
992 mike 1.2 {
993 Array<CIMQualifierDecl> qualifierDecls;
994
|
995 kumpf 1.14 if (XmlReader::testStartTag(parser, entry, "IRETURNVALUE"))
996 {
997 CIMQualifierDecl qualifierDecl;
998
999 while (XmlReader::getQualifierDeclElement(parser, qualifierDecl))
1000 qualifierDecls.append(qualifierDecl);
|
1001 mike 1.2
|
1002 kumpf 1.14 XmlReader::expectEndTag(parser, "IRETURNVALUE");
1003 }
|
1004 mike 1.2
1005 return(new CIMEnumerateQualifiersResponseMessage(
1006 messageId,
|
1007 kumpf 1.12 cimException,
|
1008 mike 1.2 QueueIdStack(),
1009 qualifierDecls));
1010 }
1011 }
1012
1013 CIMDeleteQualifierResponseMessage* CIMOperationResponseDecoder::_decodeDeleteQualifierResponse(
1014 XmlParser& parser, const String& messageId)
1015 {
1016 XmlEntry entry;
|
1017 kumpf 1.12 CIMException cimException;
|
1018 mike 1.2
|
1019 kumpf 1.12 if (XmlReader::getErrorElement(parser, cimException))
|
1020 mike 1.2 {
1021 return(new CIMDeleteQualifierResponseMessage(
1022 messageId,
|
1023 kumpf 1.12 cimException,
|
1024 mike 1.2 QueueIdStack()));
1025 }
|
1026 kumpf 1.14 else
|
1027 mike 1.2 {
|
1028 kumpf 1.14 if (XmlReader::testStartTag(parser, entry, "IRETURNVALUE"))
1029 {
1030 XmlReader::expectEndTag(parser, "IRETURNVALUE");
1031 }
|
1032 mike 1.2
1033 return(new CIMDeleteQualifierResponseMessage(
1034 messageId,
|
1035 kumpf 1.12 cimException,
|
1036 mike 1.2 QueueIdStack()));
1037 }
1038 }
1039
1040 //MEB:
1041
1042 CIMReferenceNamesResponseMessage* CIMOperationResponseDecoder::_decodeReferenceNamesResponse(
1043 XmlParser& parser, const String& messageId)
1044 {
1045 XmlEntry entry;
|
1046 kumpf 1.12 CIMException cimException;
|
1047 mike 1.2
|
1048 kumpf 1.12 if (XmlReader::getErrorElement(parser, cimException))
|
1049 mike 1.2 {
1050 return(new CIMReferenceNamesResponseMessage(
1051 messageId,
|
1052 kumpf 1.12 cimException,
|
1053 mike 1.2 QueueIdStack(),
|
1054 kumpf 1.21 Array<CIMObjectPath>()));
|
1055 mike 1.2 }
|
1056 kumpf 1.14 else
|
1057 mike 1.2 {
|
1058 kumpf 1.21 Array<CIMObjectPath> objectPaths;
|
1059 mike 1.2
|
1060 kumpf 1.14 if (XmlReader::testStartTag(parser, entry, "IRETURNVALUE"))
1061 {
|
1062 kumpf 1.21 CIMObjectPath objectPath;
|
1063 kumpf 1.14
1064 while (XmlReader::getObjectPathElement(parser, objectPath))
1065 objectPaths.append(objectPath);
|
1066 mike 1.2
|
1067 kumpf 1.14 XmlReader::expectEndTag(parser, "IRETURNVALUE");
1068 }
|
1069 mike 1.2
1070 return(new CIMReferenceNamesResponseMessage(
1071 messageId,
|
1072 kumpf 1.12 cimException,
|
1073 mike 1.2 QueueIdStack(),
1074 objectPaths));
1075 }
1076 }
1077
1078 CIMReferencesResponseMessage* CIMOperationResponseDecoder::_decodeReferencesResponse(
1079 XmlParser& parser, const String& messageId)
1080 {
1081 XmlEntry entry;
|
1082 kumpf 1.12 CIMException cimException;
|
1083 mike 1.2
|
1084 kumpf 1.12 if (XmlReader::getErrorElement(parser, cimException))
|
1085 mike 1.2 {
1086 return(new CIMReferencesResponseMessage(
1087 messageId,
|
1088 kumpf 1.12 cimException,
|
1089 mike 1.2 QueueIdStack(),
|
1090 kumpf 1.24 Array<CIMObject>()));
|
1091 mike 1.2 }
|
1092 kumpf 1.14 else
|
1093 mike 1.2 {
|
1094 kumpf 1.24 Array<CIMObject> objectWithPathArray;
|
1095 mike 1.2
|
1096 kumpf 1.14 if (XmlReader::testStartTag(parser, entry, "IRETURNVALUE"))
1097 {
|
1098 kumpf 1.24 CIMObject objectWithPath;
|
1099 kumpf 1.14
1100 while (XmlReader::getValueObjectWithPathElement(parser, objectWithPath))
1101 objectWithPathArray.append(objectWithPath);
|
1102 mike 1.2
|
1103 kumpf 1.14 XmlReader::expectEndTag(parser, "IRETURNVALUE");
1104 }
|
1105 mike 1.2
1106 return(new CIMReferencesResponseMessage(
1107 messageId,
|
1108 kumpf 1.12 cimException,
|
1109 mike 1.2 QueueIdStack(),
1110 objectWithPathArray));
1111 }
1112 }
1113
1114 CIMAssociatorNamesResponseMessage* CIMOperationResponseDecoder::_decodeAssociatorNamesResponse(
1115 XmlParser& parser, const String& messageId)
1116 {
1117 XmlEntry entry;
|
1118 kumpf 1.12 CIMException cimException;
|
1119 mike 1.2
|
1120 kumpf 1.12 if (XmlReader::getErrorElement(parser, cimException))
|
1121 mike 1.2 {
1122 return(new CIMAssociatorNamesResponseMessage(
1123 messageId,
|
1124 kumpf 1.12 cimException,
|
1125 mike 1.2 QueueIdStack(),
|
1126 kumpf 1.21 Array<CIMObjectPath>()));
|
1127 mike 1.2 }
|
1128 kumpf 1.14 else
|
1129 mike 1.2 {
|
1130 kumpf 1.21 Array<CIMObjectPath> objectPaths;
|
1131 mike 1.2
|
1132 kumpf 1.14 if (XmlReader::testStartTag(parser, entry, "IRETURNVALUE"))
1133 {
|
1134 kumpf 1.21 CIMObjectPath objectPath;
|
1135 kumpf 1.14
1136 while (XmlReader::getObjectPathElement(parser, objectPath))
1137 objectPaths.append(objectPath);
|
1138 mike 1.2
|
1139 kumpf 1.14 XmlReader::expectEndTag(parser, "IRETURNVALUE");
1140 }
|
1141 mike 1.2
1142 return(new CIMAssociatorNamesResponseMessage(
1143 messageId,
|
1144 kumpf 1.12 cimException,
|
1145 mike 1.2 QueueIdStack(),
1146 objectPaths));
1147 }
1148 }
1149
1150 CIMAssociatorsResponseMessage* CIMOperationResponseDecoder::_decodeAssociatorsResponse(
1151 XmlParser& parser, const String& messageId)
1152 {
1153 XmlEntry entry;
|
1154 kumpf 1.12 CIMException cimException;
|
1155 mike 1.2
|
1156 kumpf 1.12 if (XmlReader::getErrorElement(parser, cimException))
|
1157 mike 1.2 {
1158 return(new CIMAssociatorsResponseMessage(
1159 messageId,
|
1160 kumpf 1.12 cimException,
|
1161 mike 1.2 QueueIdStack(),
|
1162 kumpf 1.24 Array<CIMObject>()));
|
1163 mike 1.2 }
|
1164 kumpf 1.14 else
|
1165 mike 1.2 {
|
1166 kumpf 1.24 Array<CIMObject> objectWithPathArray;
|
1167 mike 1.2
|
1168 kumpf 1.14 if (XmlReader::testStartTag(parser, entry, "IRETURNVALUE"))
1169 {
|
1170 kumpf 1.24 CIMObject objectWithPath;
|
1171 mike 1.2
|
1172 kumpf 1.14 while (XmlReader::getValueObjectWithPathElement(parser, objectWithPath))
1173 objectWithPathArray.append(objectWithPath);
1174
1175 XmlReader::expectEndTag(parser, "IRETURNVALUE");
1176 }
|
1177 mike 1.2
1178 return(new CIMAssociatorsResponseMessage(
|
1179 kumpf 1.10 messageId,
|
1180 kumpf 1.12 cimException,
|
1181 kumpf 1.10 QueueIdStack(),
1182 objectWithPathArray));
1183 }
1184 }
1185
1186 CIMExecQueryResponseMessage* CIMOperationResponseDecoder::_decodeExecQueryResponse(
1187 XmlParser& parser, const String& messageId)
1188 {
1189 XmlEntry entry;
|
1190 kumpf 1.12 CIMException cimException;
|
1191 kumpf 1.10
|
1192 kumpf 1.12 if (XmlReader::getErrorElement(parser, cimException))
|
1193 kumpf 1.10 {
1194 return(new CIMExecQueryResponseMessage(
1195 messageId,
|
1196 kumpf 1.12 cimException,
|
1197 kumpf 1.10 QueueIdStack(),
|
1198 kumpf 1.24 Array<CIMObject>()));
|
1199 kumpf 1.10 }
|
1200 kumpf 1.14 else
|
1201 kumpf 1.10 {
|
1202 kumpf 1.24 Array<CIMObject> objectWithPathArray;
|
1203 kumpf 1.10
|
1204 kumpf 1.14 if (XmlReader::testStartTag(parser, entry, "IRETURNVALUE"))
1205 {
1206 XmlReader::getObjectArray(parser, objectWithPathArray);
|
1207 kumpf 1.10
|
1208 kumpf 1.14 XmlReader::expectEndTag(parser, "IRETURNVALUE");
1209 }
|
1210 kumpf 1.10
1211 return(new CIMExecQueryResponseMessage(
|
1212 mike 1.2 messageId,
|
1213 kumpf 1.12 cimException,
|
1214 mike 1.2 QueueIdStack(),
1215 objectWithPathArray));
1216 }
1217 }
1218
1219 CIMInvokeMethodResponseMessage* CIMOperationResponseDecoder::_decodeInvokeMethodResponse(
1220 XmlParser& parser, const String& messageId, const String& methodName)
1221 {
1222 XmlEntry entry;
|
1223 kumpf 1.12 CIMException cimException;
|
1224 mike 1.2
|
1225 kumpf 1.5 CIMParamValue paramValue;
1226 Array<CIMParamValue> outParameters;
|
1227 kumpf 1.6 CIMValue returnValue;
|
1228 mike 1.2 const char* paramName;
1229 String inValue;
1230
|
1231 kumpf 1.12 if (XmlReader::getErrorElement(parser, cimException))
|
1232 mike 1.2 {
1233 return(new CIMInvokeMethodResponseMessage(
1234 messageId,
|
1235 kumpf 1.12 cimException,
|
1236 mike 1.2 QueueIdStack(),
|
1237 kumpf 1.6 returnValue,
|
1238 mike 1.2 outParameters,
1239 methodName));
1240 }
|
1241 kumpf 1.4 else
|
1242 mike 1.2 {
|
1243 kumpf 1.4 Boolean isReturnValue = false;
1244 Boolean isParamValue = false;
1245 Boolean gotReturnValue = false;
1246
1247 while ((isReturnValue =
|
1248 kumpf 1.6 XmlReader::getReturnValueElement(parser, returnValue)) ||
|
1249 kumpf 1.5 (isParamValue =
1250 XmlReader::getParamValueElement(parser, paramValue)))
|
1251 kumpf 1.4 {
1252 if (isReturnValue)
1253 {
1254 if (gotReturnValue)
1255 {
1256 throw XmlValidationError(parser.getLine(),
1257 "unexpected RETURNVALUE element");
1258 }
1259 gotReturnValue = true;
1260 }
1261 else // isParamValue == true
1262 {
|
1263 kumpf 1.5 outParameters.append(paramValue);
|
1264 kumpf 1.4 }
1265
1266 isReturnValue = false;
1267 isParamValue = false;
1268 }
1269
|
1270 mike 1.2 return(new CIMInvokeMethodResponseMessage(
1271 messageId,
|
1272 kumpf 1.12 cimException,
|
1273 mike 1.2 QueueIdStack(),
|
1274 kumpf 1.6 returnValue,
|
1275 mike 1.2 outParameters,
1276 methodName));
1277 }
1278 }
1279
1280 PEGASUS_NAMESPACE_END
|