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