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