Hello,

Newbie question.

I want to access (as C++ client) a some WebService operations. On the server, 
these are implemented with AXIS; they return a HashMap, and AXIS generates for 
them an XML output composed of a (multiRef) sequence of key/value pairs, 
similar to this:
======
<ns1:myMethodNameResponse 
soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"; 
xmlns:ns1="http://myWebService";>
    <myMethodNameReturn soapenc:arrayType="xsd:anyType[1]" 
xsi:type="soapenc:Array" 
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/";>
        <myMethodNameReturn href="#id0"/>
    </myMethodNameReturn>
</ns1:myMethodNameResponse>
<multiRef id="id0" soapenc:root="0" 
soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"; 
xsi:type="ns2:Map" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"; 
xmlns:ns2="http://xml.apache.org/xml-soap";>
    <item>
        <key xsi:type="soapenc:string">requestedId</key>
        <value xsi:type="soapenc:int">5912342</value>
    </item>
</multiRef>
======

Since AXIS exports an "abstract" complex type for this kind of answers:
======
  <schema targetNamespace="http://myWebService/"; 
xmlns="http://www.w3.org/2001/XMLSchema";>
   <import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
   <complexType name="ArrayOf_xsd_anyType">
    <complexContent>
     <restriction base="soapenc:Array">
      <attribute ref="soapenc:arrayType" wsdl:arrayType="xsd:anyType[]"/>
     </restriction>
    </complexContent>
   </complexType>
  </schema>
======

wsdl2h by default proceeds to recognize these as "array of anyType":
======
/// SOAP encoded array of xs:anyType
class ArrayOf_USCORExsd_USCOREanyType : public xsd__anyType
{ public:
/// Pointer to array of xsd__anyType*.
    xsd__anyType*                       *__ptr                         ;
/// Size of the dynamic array.
    int                                  __size                        ;
/// Offset for partially transmitted arrays (uncomment only when required).
//  int                                  __offset                      ;
};
======

When keeping this code, the structure output by calling the request method 
contains an array of strings (the "anyType") with the raw XML in them, eg 
"<item><key>...</value></item>".

Of course, I would like to have wsdl2h expand that complex type as:
======
... {
std::vector<keyvalpair> item;
}

class keyvalpair {
public:
    xsd__string key;
    xsd__string value;
};
======

Is there a way to get typemap.dat to instruct wsdl2h towards that? I could not 
sort this out from the docs, and my blind attempts failed.

thanks!
Uwe

Reply via email to