This is a combined back port of the following upstream commits:

commit 62f7ba8945ed2ec5d5cdd621394458030b24a94d
Author: Michael Chase-Salerno <bratac@linux.vnet.ibm.com>
Date:   Thu Aug 19 17:32:48 2010 -0400

    3048960 method array types not filled in
    Test provider

commit 8c6bc2ca2916dc7597304d56f9f5fd86f5725014
Author: Michael Chase-Salerno <bratac@linux.vnet.ibm.com>
Date:   Thu Aug 19 18:38:09 2010 -0400

    3048960 method array types not filled in

commit a0685711ddb6400bcd6aba98470023c5f6af627c
Author: Michael Chase-Salerno <bratac@linux.vnet.ibm.com>
Date:   Fri Aug 20 14:34:05 2010 -0400

    3048960 method array types not filled in

commit ac34cc2841b5349e008dd17ba7e59f23a49b9830
Author: Michael Chase-Salerno <bratac@linux.vnet.ibm.com>
Date:   Fri Aug 20 15:26:21 2010 -0400

    [ 3048960 ] method array types not filled in
    Testcase

commit d5ba84af01a2154aad56e7ff7c261748e5ad8ae4
Author: Michael Chase-Salerno <bratac@linux.vnet.ibm.com>
Date:   Fri Aug 20 17:53:04 2010 -0400

    [ 3048960 ] method array types not filled in

Index: sblim-sfcb-1.3.7/test/TestProviders/cmpiTestMethodProvider.c
===================================================================
--- sblim-sfcb-1.3.7.orig/test/TestProviders/cmpiTestMethodProvider.c
+++ sblim-sfcb-1.3.7/test/TestProviders/cmpiTestMethodProvider.c
@@ -7,7 +7,45 @@ static const CMPIBroker *_broker;
 
 #define _ClassName "Sample_Method"
 
-
+static char *paramType(CMPIType type)
+{
+   switch (type & ~CMPI_ARRAY) {
+   case CMPI_chars:
+   case CMPI_string:
+   case CMPI_instance:
+      return "string";
+   case CMPI_sint64:
+      return "sint64";
+   case CMPI_uint64:
+      return "uint64";
+   case CMPI_sint32:
+      return "sint32";
+   case CMPI_uint32:
+      return "uint32";
+   case CMPI_sint16:
+      return "sint16";
+   case CMPI_uint16:
+      return "uint16";
+   case CMPI_uint8:
+      return "uint8";
+   case CMPI_sint8:
+      return "sint8";
+   case CMPI_boolean:
+      return "boolean";
+   case CMPI_char16:
+      return "char16";
+   case CMPI_real32:
+      return "real32";
+   case CMPI_real64:
+      return "real64";
+   case CMPI_dateTime:
+      return "datetime";
+   case CMPI_ref:
+      return "reference";
+   }
+   printf("Invalid data type %d %x\n",(int) type, (int) type);
+   return "*??*";
+}
 
 CMPIStatus TestMethodProviderMethodCleanup (
     CMPIMethodMI * mi,
@@ -36,6 +74,7 @@ CMPIStatus TestMethodProviderInvokeMetho
     CMPIString * str1;
     CMPIString * str2;
     CMPIValue val1, val2;
+
     /* get the class name from object-path */
     className = CMGetClassName(ref, &rc);
     /* get a pointer to a C char* representation of this String. */
@@ -72,6 +111,12 @@ CMPIStatus TestMethodProviderInvokeMetho
             val2.string = str2;
             /* Adds a value of str2 string to out array argument */
             rc = CMAddArg(out, argName, &val2, CMPI_string);
+        } else if (!strcmp("CheckArrayNoType", methodName)) {
+            data = CMGetArg(in, "IntArray", &rc);
+            CMPIType atype=data.value.array->ft->getSimpleType(data.value.array,&rc);
+            sprintf(result,"Datatype is %s",paramType(atype));
+            str1 = CMNewString(_broker, result, &rc);
+            val1.string = str1;
         }
     }
     CMReturnData (rslt, (CMPIValue *) &val1, CMPI_string);
Index: sblim-sfcb-1.3.7/test/schema/root/cimv2/Test_Method.mof
===================================================================
--- sblim-sfcb-1.3.7.orig/test/schema/root/cimv2/Test_Method.mof
+++ sblim-sfcb-1.3.7/test/schema/root/cimv2/Test_Method.mof
@@ -1,4 +1,5 @@
 class Sample_Method
 {
         string SayHello( [IN] string Name, [OUT] string Message);
+        string CheckArrayNoType( [IN] uint32 IntArray[], [OUT] string Message);
 };
Index: sblim-sfcb-1.3.7/cimXmlRequest.c
===================================================================
--- sblim-sfcb-1.3.7.orig/cimXmlRequest.c
+++ sblim-sfcb-1.3.7/cimXmlRequest.c
@@ -2027,7 +2027,7 @@ int updateMethodParamTypes(RequestHdr *h
       if (isEI) continue;
     }
 
-    if (ptok->type==0) {
+    if ((ptok->type == 0) || (ptok->type == CMPI_ARRAY)) {
       /* Type was unknown, fill it in */
       // printf("parameter %s missing type, using %s\n", sname, paramType(pdata.type));
       ptok->type = pdata.type;
@@ -2076,7 +2076,7 @@ static RespSegments invokeMethod(CimXmlR
 
    for (p = req->paramValues.first; p; p = p->next) {
      /* Update untyped params (p->type==0) and verify those that were specified */
-     if (p->type==0 || vmpt) {
+     if (p->type == 0 || p->type == CMPI_ARRAY || vmpt) {
        rc = updateMethodParamTypes(hdr);
 
        if (rc != CMPI_RC_OK) {
Index: sblim-sfcb-1.3.7/test/TestProviders/tests/CheckArrayNoType.OK
===================================================================
--- /dev/null
+++ sblim-sfcb-1.3.7/test/TestProviders/tests/CheckArrayNoType.OK
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<CIM CIMVERSION="2.0" DTDVERSION="2.0">
+<MESSAGE ID="87872" PROTOCOLVERSION="1.0">
+<SIMPLERSP>
+<METHODRESPONSE NAME="CheckArrayNoType">
+<RETURNVALUE PARAMTYPE="string">
+<VALUE>Datatype is uint32</VALUE>
+</RETURNVALUE>
+</METHODRESPONSE>
+</SIMPLERSP>
+</MESSAGE>
+</CIM>
Index: sblim-sfcb-1.3.7/test/TestProviders/tests/CheckArrayNoType.xml
===================================================================
--- /dev/null
+++ sblim-sfcb-1.3.7/test/TestProviders/tests/CheckArrayNoType.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<CIM CIMVERSION="2.0" DTDVERSION="2.0">
+ <MESSAGE ID="87872" PROTOCOLVERSION="1.0">
+  <SIMPLEREQ>
+    <METHODCALL NAME="CheckArrayNoType">
+      <LOCALCLASSPATH>
+        <LOCALNAMESPACEPATH>
+          <NAMESPACE NAME="root"/>
+          <NAMESPACE NAME="cimv2"/>
+        </LOCALNAMESPACEPATH>
+        <CLASSNAME NAME="Sample_Method"/>
+       </LOCALCLASSPATH>
+       <PARAMVALUE NAME="IntArray">
+        <VALUE.ARRAY><VALUE>4</VALUE></VALUE.ARRAY>
+       </PARAMVALUE>
+     </METHODCALL>
+   </SIMPLEREQ>
+ </MESSAGE>
+</CIM>
+
