Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsFree MagazinesWhite PapersSubmit Content
Discussion GroupsASP.NETWindows FormsLanguages.NET FrameworkVisual Studio.NET
Articles.NET FrameworkASP.NETToolsWindows Forms
.NET DirectoryOpen Source ProjectsUser GroupsWeb Resources
Related Topics
Visual Basic 6SQL ServerMS AccessOther DB ProductsMS Server ProductsMore Topics ...

.NET Forum / ASP.NET / Web Services / June 2004

Tip: Looking for answers? Try searching our database.

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

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
umhlali - 27 May 2004 10:52 GMT
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: Nothin
   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(SoapClientMessage 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 4
  at ElectronicWallet.PayoutCommon.DoPayout(Int64 lngTransID, XmlDocument& oWSReq, XmlDocument& oWSResp) in C:\Projects\Gateway\ElectronicWallet\ElectronicWalletWebService\PayoutCommon.vb:line 22
  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: Nothin
   InnerException: Nothin
   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(String 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")> ResponseMode
       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 Functio

'<remarks/
   <System.Xml.Serialization.SoapTypeAttribute("ResponseModel", "http://somewebsite")>  
   Public Class ResponseMode
     
       '<remarks/
       Public ret1  As Strin
     
       '<remarks/
       Public ret2  As Strin
     
       '<remarks/
       Public ret 3 As Strin
     
       '<remarks/
       Public paymentItems() As PaymentIte
   End Clas
 
   '<remarks/
   <System.Xml.Serialization.SoapTypeAttribute("PaymentItem", "http://somewebsite")>  
   Public Class PaymentIte
     
       '<remarks/
       Public ret4 As Strin
     
       '<remarks/
       Public ret5 As Strin
       
       '<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/wsdl/" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="https://somewebsite/method1" xmlns:intf="https://somewebsite/method1" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns1="http://somewebsite" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" 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/encoding/"/>
            <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/encoding/"/>
            <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/encoding/" namespace="http://somewebsite" use="encoded"/>
            </wsdl:input>
            <wsdl:output name="method1Response">
                <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" 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
Dino Chiesa [Microsoft] - 01 Jun 2004 20:36 GMT
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

> 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."
>
[quoted text clipped - 5 lines]
>
>     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
[quoted text clipped - 5 lines]
>     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})
>
[quoted text clipped - 44 lines]
>
> <wsdl:definitions targetNamespace="https://somewebsite/method1" xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:apachesoap="http://xml.apache.org/xml-soap"
xmlns:impl="https://somewebsite/method1"
xmlns:intf="https://somewebsite/method1"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:tns1="http://somewebsite"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
> <wsdl:types>
> <schema targetNamespace="http://somewebsite" xmlns="http://www.w3.org/2001/XMLSchema">
[quoted text clipped - 57 lines]
> <wsdl:output name="method1Response">
> <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="https://somewebsite/method1" use="encoded"/>
> </wsdl:output>
> </wsdl:operation>
[quoted text clipped - 7 lines]
>
> ---

Rate this thread:







Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.