[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

microsoft.public.dotnet.framework.aspnet.webservices

Re: Serialization problem, VB.Net Client consuming Java Axis Web Service

Dino Chiesa [Microsoft]

6/1/2004 9:36:00 PM

the WSDL file - how did you generate this? Is it auto-generated by AXIS?

Can you try this: Wrap the array of objects in an object.
Eg, rather than a method signature like this:

MyObject[] WebServiceMethod(RequestMessage req)

Do this:

ResponseMessage WebServiceMethod(RequestMessage req)

where
public ResponseMessage {
MyObject[] ary;
}

-Dino

"umhlali" <andilem@-NOSPAM-mercantrade.com> wrote in message
news:ewvuFB9QEHA.3452@TK2MSFTNGP10.phx.gbl...
> I get the following exception when my VB.NET app calls a Java web service
that returns an array of objects. The same call works for a single object
though. So looks like there is no problem serializing the object but there
seems to be a problem serializing an array of objects. Any help will be
appreciated.
>
> "Cannot assign object of type System.Object[] to an object of type
ElectronicWallet.C2PTest.PaymentItem."
>
> [System.InvalidOperationException]: {System.InvalidOperationException}
> HelpLink: Nothing
> InnerException: {System.InvalidCastException}
> Message: "There is an error in XML document (12, 19)."
> Source: "System.Xml"
>
> StackTrace: " at
System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader,
String encodingStyle)
> at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader
xmlReader)
> at
System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClient
Message message, WebResponse response, Stream responseStream, Boolean
asyncCall)
> at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String
methodName, Object[] parameters)
> at ElectronicWallet.C2PTest.SOAPPaymentServiceService.method1(String
par1, String par2, String par3, Int64 par4, String par5, String par6,
Boolean par7, String par8, String par9, String par10, String par11) in
C:\Projects\Gateway\ElectronicWallet\ElectronicWalletWebService\Web
References\C2PTest\Reference.vb:line 43
> at ElectronicWallet.PayoutCommon.DoPayout(Int64 lngTransID,
XmlDocument& oWSReq, XmlDocument& oWSResp) in
C:\Projects\Gateway\ElectronicWallet\ElectronicWalletWebService\PayoutCommon
.vb:line 225
> at ElectronicWallet.Process.EWPayout(String s_Payout) in
C:\Projects\Gateway\ElectronicWallet\ElectronicWalletWebService\Process.asmx
.vb:line 153"
> TargetSite: {System.Reflection.RuntimeMethodInfo}
> ?ex.InnerException
> {System.InvalidCastException}
> [System.InvalidCastException]: {System.InvalidCastException}
> HelpLink: Nothing
> InnerException: Nothing
> Message: "Cannot assign object of type System.Object[] to an object of
type ElectronicWallet.C2PTest.PaymentItem[]."
> Source: "fqsomxwu"
> StackTrace: " at
Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReader1.Read3_
ResponsePar6l()
> at
System.Xml.Serialization.XmlSerializationReader.ReadReferencingElement(Strin
g name, String ns, Boolean elementCanBeType, String& fixupReference)
> at
System.Xml.Serialization.XmlSerializationReader.ReadReferencedElements()
> at
Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReader1.Read6_
method1Response()"
> TargetSite: {System.Reflection.RuntimeMethodInfo}
>
> Related code from .NET proxy class.............................
>
> '<remarks/>
> <System.Web.Services.Protocols.SoapRpcMethodAttribute("",
RequestNamespace:="http://somewebsite",
ResponseNamespace:="https://somewebsite/method1")> _
> Public Function method1(ByVal par1 As String, ByVal par2 As String, ByVal
par3 As String, ByVal par4 As Long, ByVal par5 As String, ByVal par6 As
String, ByVal par7 As Boolean, ByVal par8 As String, ByVal par9 As String,
ByVal par10 As String, ByVal par11 As String) As
<System.Xml.Serialization.SoapElementAttribute("method1Return")>
ResponseModel
> Dim results() As Object = Me.Invoke("method1", New Object() {par1,
par2, par3,_u97 ?mount, par5, par6, par7, par8, par9, par10, par11})
>
> Return CType(results(0),ResponseModel)
> End Function
>
> '<remarks/>
> <System.Xml.Serialization.SoapTypeAttribute("ResponseModel",
"http://somewebsite")> _
> Public Class ResponseModel
>
> '<remarks/>
> Public ret1 As String
>
> '<remarks/>
> Public ret2 As String
>
> '<remarks/>
> Public ret 3 As String
>
> '<remarks/>
> Public paymentItems() As PaymentItem
> End Class
>
> '<remarks/>
> <System.Xml.Serialization.SoapTypeAttribute("PaymentItem",
"http://somewebsite")> _
> Public Class PaymentItem
>
> '<remarks/>
> Public ret4 As String
>
> '<remarks/>
> Public ret5 As String
>
> '<remarks/>
> Public ret6 As String
> End Class
>
>
> Here is the VB.NET code.............................
>
> Dim SoapRequest As New C2PTest.SOAPPaymentServiceService
> Dim C2PResult As New C2PTest.ResponseModel
> Dim Dict As New Collections.Specialized.StringDictionary
> C2PResult = SoapRequest.method1(Dict("par1"), Dict("par2"), Dict("par3"),
Dict("par4"), _
> Dict("par5"), Dict("Par6"), Dict("par7"), Dict("par8"), Dict("par9"), _
> Dict("par10"), Dict("par11"))
>
>
> Here is the WSDL file.............................
>
> <wsdl:definitions targetNamespace="https://somewebsite/method1"
xmlns="http://schemas.xmlsoap.org/w...
xmlns:apachesoap="http://xml.apache.org/xml-...
xmlns:impl="https://somewebsite/method1"
xmlns:intf="https://somewebsite/method1"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encod...
xmlns:tns1="http://somewebsite"
xmlns:wsdl="http://schemas.xmlsoap.org/w...
xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/s...
xmlns:xsd="http://www.w3.org/2001/XMLSchema...
> <wsdl:types>
> <schema targetNamespace="http://somewebsite"
xmlns="http://www.w3.org/2001/XMLSchema...
> <import namespace="http://schemas.xmlsoap.org/soap/encod.../>
> <complexType name="PaymentItem">
> <sequence>
> <element name="ret4" nillable="true" type="xsd:string"/>
> <element name="ret5" nillable="true" type="xsd:string"/>
> <element name="ret6" nillable="true" type="xsd:string"/>
> </sequence>
> </complexType>
> <complexType name="ResponseModel">
> <sequence>
> <element name="ret1" nillable="true" type="xsd:string"/>
> <element name="ret2" nillable="true" type="xsd:string"/>
> <element name="ret3" nillable="true" type="xsd:string"/>
> <element name="paymentItems" nillable="true"
type="impl:ArrayOf_tns1_PaymentItem"/>
> </sequence>
> </complexType>
> </schema>
> <schema targetNamespace="https://somewebsite/method1"
xmlns="http://www.w3.org/2001/XMLSchema...
> <import namespace="http://schemas.xmlsoap.org/soap/encod.../>
> <complexType name="ArrayOf_tns1_PaymentItem">
> <complexContent>
> <restriction base="soapenc:Array">
> <attribute ref="soapenc:arrayType" wsdl:arrayType="tns1:PaymentItem[]"/>
> </restriction>
> </complexContent>
> </complexType>
> </schema>
> </wsdl:types>
> <wsdl:message name="method1Request">
> <wsdl:part name="par1" type="xsd:string"/>
> <wsdl:part name="par2" type="xsd:string"/>
> <wsdl:part name="par3" type="xsd:string"/>
> <wsdl:part name="par4" type="xsd:long"/>
> <wsdl:part name="par5" type="xsd:string"/>
> <wsdl:part name="par6" type="xsd:string"/>
> <wsdl:part name="par7" type="xsd:boolean"/>
> <wsdl:part name="par8" type="xsd:string"/>
> <wsdl:part name="par9" type="xsd:string"/>
> <wsdl:part name="par10" type="xsd:string"/>
> <wsdl:part name="par11" type="xsd:string"/>
> </wsdl:message>
> <wsdl:message name="method1Response">
> <wsdl:part name="method1Return" type="tns1:ResponseModel"/>
> </wsdl:message>
> <wsdl:portType name="SOAPPaymentService">
> <wsdl:operation name="method1" parameterOrder="par1 par2 par3 par4 par5
par6 par7 par8 par9 par10 par11">
> <wsdl:input message="impl:method1Request" name="method1Request"/>
> <wsdl:output message="impl:method1Response" name="method1Response"/>
> </wsdl:operation>
> </wsdl:portType>
> <wsdl:binding name="method1SoapBinding" type="impl:SOAPPaymentService">
> <wsdlsoap:binding style="rpc"
transport="http://schemas.xmlsoap.org/soap/http&...
> <wsdl:operation name="method1">
> <wsdlsoap:operation soapAction=""/>
> <wsdl:input name="method1Request">
> <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encod...
namespace="http://somewebsite" use="encoded"/>
> </wsdl:input>
> <wsdl:output name="method1Response">
> <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encod...
namespace="https://somewebsite/method1" use="encoded"/>
> </wsdl:output>
> </wsdl:operation>
> </wsdl:binding>
> <wsdl:service name="SOAPPaymentServiceService">
> <wsdl:port binding="impl:method1SoapBinding" name="method1">
> <wsdlsoap:address location="https://somewebsite/method1"/>
> </wsdl:port>
> </wsdl:service>
> </wsdl:definitions>
>
>
>
>
> ---
> Posted using Wimdows.net Newsgroups - http://www.wimdows.net/n...