I havn´t solve the problem. Perhaps I need another Deployment-descriptor for invoking with ms-soap-high-level-client. Please have a look on it.
Thanks
Oliver
I´ve written a soap-server with apache-soap and a want to invoke it via
a ms-high-level-soap-client.
Invocation of methods String dummy(String string) works fine but
invocation of String[] dummy1(String[] stringArray) produces an error:
Type conversion failure for element arg0.Please help. I don´t know what to.
best regards
Oliver
Here´s wsdl:
<?xml version="1.0" encoding='UTF-8'?>
<definitions name='urn:KlickBlick'
targetNamespace='urn:KlickBlickOperator'
xmlns:tns='urn:xml-klickblick'
xmlns:xsd='http://www.w3.org/2001/XMLSchema'
xmlns:soap='http://schemas.xmlsoap.org/wsdl/soap/'
xmlns='http://schemas.xmlsoap.org/wsdl/'><types>
<xsd:schema targetNamespace='urn:xml-klickblick'xmlns:SOAP-ENC='http://schemas.xmlsoap.org/soap/encoding/'
xmlns:wsdl='http:/schemas.xmlsoap.org/wsdl/soap/'
elementFormDefault='qualified'>
<xsd:complexType name='ArrayOfstring'>
<xsd:complexContent>
<xsd:restriction base='SOAP-ENC:Array'>
<xsd:attribute ref="SOAP-ENC:arrayType"
wsdl:arrayType='xsd:string[]'/>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>
</xsd:schema>
</types><!-- message declns -->
<message name='stringResponse'>
<part name='Result' type='xsd:string'/>
</message>
<message name='stringArrayRequest'>
<part name='arg0' type='tns:ArrayOfstring'/>
</message>
<message name='stringArrayResponse'>
<part name='arg0' type='tns:ArrayOfstring'/>
</message><!-- port type declns -->
<portType name='KlickBlickPortType'>
<operation name='dummy1'>
<input message='stringArrayRequest'/>
<output message='stringArrayResponse'/>
</operation>
<operation name='dummy2'>
<input message='stringArrayRequest'/>
<output message='stringResponse'/>
</operation>
</portType>
<!-- binding declns -->
<binding name='KlickBlickSOAPBinding' type='KlickBlickPortType'>
<soap:binding style='rpc'
transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name='dummy1'>
<soap:operation soapAction=''/>
<input>
<soap:body use='encoded'
namespace='urn:KlickBlickOperator'encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
</input>
<output>
<soap:body use='encoded'
namespace='urn:KlickBlickOperator'encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
</output>
</operation>
<operation name='dummy2'>
<soap:operation soapAction=''/>
<input>
<soap:body use='encoded'
namespace='urn:KlickBlickOperator'encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
</input>
<output>
<soap:body use='encoded'
namespace='urn:KlickBlickOperator'encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
</output>
</operation>
</binding><!-- service decln -->
<service name='KlickBlickService'>
<port name='KlickBlickPortType' binding='KlickBlickSOAPBinding'>
<soap:address
location='http://server1.klickblick.de:8080/soap/servlet/rpcrouter'/>
</port>
</service></definitions>
Here´s the deployment-descriptor:
<isd:service xmlns:isd="http://xml.apache.org/xml-soap/deployment"
id="urn:KlickBlickOperator">
<isd:provider type="java"
scope="Application"
methods="dummy1 dummy2">
<isd:java class="KlickBlick.Soap.KlickBlickSoapService"
static="false"/>
</isd:provider><isd:faultListener>org.apache.soap.server.DOMFaultListener</isd:faultListener>
<isd:mappings>
<isd:map encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:tns="urn:xml-klickblick" qname="tns:ArrayOfstring"java2XMLClassName="org.apache.soap.encoding.soapenc.ArraySerializer"
xml2JavaClassName="org.apache.soap.encoding.soapenc.ArraySerializer"/>
</isd:mappings></isd:service>
ms-client-Code:
void CCalcCliRpcCppDlg::Execute_dummyarray()
{
OLECHAR *pMethodName = L"dummy1";if(Connect())
{
HRESULT hr;
DISPID dispid;
DISPPARAMS parms;
VARIANT pRef[1];
VARIANT pArg[1];
VARIANT result;
VARIANT vb;
EXCEPINFO ExceptInfo;
SAFEARRAY * pSA1;
SAFEARRAYBOUND sabound[1];
LONG index;
BSTR data1 = 0;
BSTR data2 = 0;
VARTYPE vtype = VT_BSTR;hr = m_pSoapClient->GetIDsOfNames(IID_NULL,
&pMethodName, 1,
LOCALE_SYSTEM_DEFAULT, &dispid);
if(FAILED(hr))
{
DisplayHResult(_T("Cannot get dispatch id of
dummy
(array) method."),
hr);
return;
}sabound[0].lLbound = 0;
sabound[0].cElements = 2;parms.cArgs = 1;
parms.cNamedArgs = 0;
parms.rgdispidNamedArgs = 0;
parms.rgvarg = pRef;::VariantInit(&vb);
::VariantInit(&pArg[0]);
::VariantInit(&pRef[0]);pSA1 = SafeArrayCreate(vtype,1,sabound);
index = 0;
data1 = ::SysAllocString(L"ABCD");
data2 = ::SysAllocString(L"AA");hr = SafeArrayPutElement(pSA1,&index,data1);
index ++;
hr = SafeArrayPutElement(pSA1,&index,data2);V_ARRAY(&pArg[0]) = pSA1;
V_VT(&pArg[0]) = VT_ARRAY | vtype;V_VT(&pRef[0]) = V_VT(&pArg[0]) | VT_BYREF;
V_ARRAYREF(&pRef[0]) = &pArg[0].parray;::VariantInit(&result);
hr = m_pSoapClient->Invoke(dispid, IID_NULL,
LOCALE_SYSTEM_DEFAULT,
DISPATCH_METHOD, &parms, &result, &ExceptInfo, NULL);
if(FAILED(hr))
{
DisplayFault(_T("Invoke of dummy (array) method
failed."));
}
else
{
VariantChangeType(&result, &result, 0, VT_BSTR);m_ResultCtl.SetWindowText(CString(result.bstrVal));
}VariantClear(&result);
if(pSA1 != NULL)
hr = SafeArrayDestroy(pSA1);
}
}
begin:vcard n:Rettig;Oliver tel;fax:0721/38489606 tel;home:0721/9662896 tel;work:0721/38489600 x-mozilla-html:FALSE org:ORAT Software-Entwicklung adr:;;Steinstr. 23;Karlsruhe;;76133; version:2.1 email;internet:[EMAIL PROTECTED] title:Dipl.Phys. x-mozilla-cpt:;6688 fn:Oliver Rettig end:vcard
