[ 3286489 ] getInstance does not return key/value through XML
diff --git a/ChangeLog b/ChangeLog
index fbb635d..49f2981 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2011-05-27  Chris Buccella  <buccella@linux.vnet.ibm.com>
+
+	* backend/cimxml/grammar.c, backend/cimxml/cimXmlParser.h, 
+	  backend/cimxml/cimXmlParser.c, backend/cimxml/instance.c,
+	  backend/cimxml/objectpath.c, frontend/sfcc/native.h:
+	[ 3286489 ] getInstance does not return key/value through XML
+	(patch originated by Josef Moellers)
+
 2011-04-07  Chris Buccella  <buccella@linux.vnet.ibm.com>
 
 	* backend/cimxml/grammar.c:
diff --git a/NEWS b/NEWS
index cf0a070..7b4d810 100644
--- a/NEWS
+++ b/NEWS
@@ -1,5 +1,11 @@
 Small Footprint CIM Client Library NEWS
 
+Changes in 2.2.3
+================
+
+Bugs:
+- 3286489: getInstance does not return key/value through XML
+
 Changes in 2.2.2
 ================
 
diff --git a/backend/cimxml/cimXmlParser.c b/backend/cimxml/cimXmlParser.c
index 3e0baef..c6a0908 100644
--- a/backend/cimxml/cimXmlParser.c
+++ b/backend/cimxml/cimXmlParser.c
@@ -1386,9 +1386,7 @@
 
    control.respHdr.rvArray=newCMPIArray(0,0,NULL);
 
-   if(cop) {
-       control.da_nameSpace=(char*)getNameSpaceChars(cop);
-   }
+   control.requestObjectPath = cop;
 
    control.heap = parser_heap_init();
 
@@ -1531,9 +1529,7 @@
    
    local_enmp->data = control.respHdr.rvArray ;
    
-   if(cop) {
-       control.da_nameSpace=(char*)getNameSpaceChars(cop);
-   }
+   control.requestObjectPath = cop;
 
    control.heap = parser_heap_init();
 
diff --git a/backend/cimxml/cimXmlParser.h b/backend/cimxml/cimXmlParser.h
index 191fa52..f34d36b 100644
--- a/backend/cimxml/cimXmlParser.h
+++ b/backend/cimxml/cimXmlParser.h
@@ -426,7 +426,7 @@
 typedef struct parser_control {
    XmlBuffer *xmb;
    ResponseHdr respHdr;
-   char *da_nameSpace;
+   CMPIObjectPath *requestObjectPath;
    ParserHeap *heap;
 #ifdef LARGE_VOL_SUPPORT
    CMCIConnection * econ ; /* enumeration connection */
diff --git a/backend/cimxml/grammar.c b/backend/cimxml/grammar.c
index 871c58a..8fb5f91 100644
--- a/backend/cimxml/grammar.c
+++ b/backend/cimxml/grammar.c
@@ -193,7 +193,7 @@
 			dontLex = 1;
 			instance(parm, (parseUnion*)&lvalp.xtokInstance);
 			inst = native_new_CMPIInstance(NULL,NULL);
-			setInstNsAndCn(inst,parm->da_nameSpace,lvalp.xtokInstance.className);
+			setInstNsAndCn(inst,getNameSpaceChars(parm->requestObjectPath),lvalp.xtokInstance.className);
 			setInstProperties(inst, &lvalp.xtokInstance.properties);
 			simpleArrayAdd(parm->respHdr.rvArray,(CMPIValue*)&inst,CMPI_instance);
 		}
@@ -295,7 +295,7 @@
 		else if(stateUnion->xtokReturnValue.data.value.type == typeValue_Instance) {
 			t = CMPI_instance;
 			inst = native_new_CMPIInstance(NULL,NULL);
-			setInstNsAndCn(inst,parm->da_nameSpace,stateUnion->xtokReturnValue.data.value.data.inst->className);
+			setInstNsAndCn(inst,getNameSpaceChars(parm->requestObjectPath),stateUnion->xtokReturnValue.data.value.data.inst->className);
 			setInstProperties(inst, &stateUnion->xtokReturnValue.data.value.data.inst->properties);
 			val.inst = inst;
 		}
@@ -452,8 +452,7 @@
 		do {
 			dontLex = 1;
 			instance(parm, (parseUnion*)&lvalp.xtokInstance);
-			inst = native_new_CMPIInstance(NULL,NULL);
-			setInstNsAndCn(inst,parm->da_nameSpace,lvalp.xtokInstance.className);
+			inst = native_new_CMPIInstance(parm->requestObjectPath,NULL);
 			setInstProperties(inst, &lvalp.xtokInstance.properties);
 			simpleArrayAdd(parm->respHdr.rvArray,(CMPIValue*)&inst,CMPI_instance);
 			ct = localLex(&lvalp, parm);
@@ -477,7 +476,7 @@
 			dontLex = 1;
 			valueNamedInstance(parm, (parseUnion*)&lvalp.xtokNamedInstance);
 			createPath(&op,&(lvalp.xtokNamedInstance.path));
-			CMSetNameSpace(op, parm->da_nameSpace);
+			CMSetNameSpace(op, getNameSpaceChars(parm->requestObjectPath));
 			inst = native_new_CMPIInstance(op,NULL);
 			//setInstQualifiers(inst, &lvalp.xtokNamedInstance.instance.qualifiers);
 			setInstProperties(inst, &lvalp.xtokNamedInstance.instance.properties);
diff --git a/backend/cimxml/instance.c b/backend/cimxml/instance.c
index 43df5a4..72f034b 100644
--- a/backend/cimxml/instance.c
+++ b/backend/cimxml/instance.c
@@ -375,7 +375,7 @@
 	return (CMPIInstance *) instance;
 }
 
-void setInstNsAndCn(CMPIInstance *ci, char *ns, char *cn)
+void setInstNsAndCn(CMPIInstance *ci, const char *ns, char *cn)
 {
    struct native_instance * i = (struct native_instance *) ci;
    
diff --git a/backend/cimxml/objectpath.c b/backend/cimxml/objectpath.c
index 09d0cd9..2e4df1e 100644
--- a/backend/cimxml/objectpath.c
+++ b/backend/cimxml/objectpath.c
@@ -438,6 +438,8 @@
 
 const char *getNameSpaceChars(CMPIObjectPath * cop)
 {
+   if (cop == NULL) return NULL;
+
 	struct native_cop * o = (struct native_cop *) cop;
    return o->nameSpace;
 }
diff --git a/frontend/sfcc/native.h b/frontend/sfcc/native.h
index cb1b5a7..2b14ab9 100644
--- a/frontend/sfcc/native.h
+++ b/frontend/sfcc/native.h
@@ -225,7 +225,7 @@
 
 struct xtokValueReference;
 CMPIValue str2CMPIValue(CMPIType type, char *val, struct xtokValueReference *ref);
-void setInstNsAndCn(CMPIInstance *ci, char *ns, char *cn);
+void setInstNsAndCn(CMPIInstance *ci, const char *ns, char *cn);
 CMPIStatus simpleArrayAdd(CMPIArray * array, CMPIValue * val, CMPIType type);
 const char *getNameSpaceChars(CMPIObjectPath * cop);
 CMPIValue *getKeyValueTypePtr(char *type, char *value, struct xtokValueReference *ref,