You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by "Robert Hook (JIRA)" <ax...@ws.apache.org> on 2005/01/24 04:25:31 UTC

[jira] Commented: (AXIS-1467) Serialisation errors in .NET client with Axis 1.2 rpc/enc service

     [ http://issues.apache.org/jira/browse/AXIS-1467?page=comments#action_57989 ]
     
Robert Hook commented on AXIS-1467:
-----------------------------------

While the additional "dotNetSoapEncFix" *may* resolve the problem, a variant of the problem exists currently with JBuilder 2005. This product is shipped with a version of Axis 1.2RC2, however I have strong reasons to believe that the version shipped is (a) a modified version, (b) not based on the build that includes support for this flag.

I will be posting an urgent issue with Borland to try to resolve this problem, as it is a show-stopper that definitely causes previously functional web services to break. However, I am also posting this here so that anyone else who stumbles across this problem knows they are not alone.

.Net 1.1 fails horribly for a web service that returns a string array. For example, the following simple service:

package au.com.hpa;
import java.util.*;
public class BasicService {
    public BasicService() {
    }
    public int GetSize() {
        return 42;
    }
    public String GetName() {
        return "Zarniwoop";
    }
    public String[] GetReasons() {
        return new String[] {"Madness", "Chaos", "Terror", "Coffee Depletion"};
    }

    public List GetReasonList() {
        ArrayList l = new ArrayList();
        String[] f = this.GetReasons();
        for (int i=0; i<f.length; i++)
            l.add(f[i]);
        return l;
    }
}

Causes .Net (I am testing with .NET WebSErvices Studio, but have replicated the behaviour with custom-built clients) to throw an exception when GetReasons() is invoked

System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.InvalidOperationException: There is an error in XML document (1, 312). ---> System.InvalidOperationException: The specified type was not recognized: name='string', namespace='http://schemas.xmlsoap.org/soap/encoding/', at <GetReasonsReturn xmlns=''>.
   at System.Xml.Serialization.XmlSerializationReader.GetPrimitiveType(XmlQualifiedName typeName, Boolean throwOnUnknown)
   at System.Xml.Serialization.XmlSerializationReader.ReadArray(String typeName, String typeNs)
   at System.Xml.Serialization.XmlSerializationReader.ReadReferencingElement(String name, String ns, Boolean elementCanBeType, String& fixupReference)
   at System.Xml.Serialization.XmlSerializationReader.ReadReferencingElement(String name, String ns, String& fixupReference)
   at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReader1.Read13_GetReasonsResponse()


The generated WSDL is:

<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions targetNamespace="http://hpa.com.au/" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://hpa.com.au/" xmlns:intf="http://hpa.com.au/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<!--WSDL created by Apache Axis version: 1.2RC2
Built on Dec 08, 2004 (12:13:10 PST)-->
 <wsdl:types>
  <schema targetNamespace="http://hpa.com.au/" xmlns="http://www.w3.org/2001/XMLSchema">
   <import namespace="http://xml.apache.org/xml-soap"/>
   <import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
   <complexType name="ArrayOf_soapenc_string">
    <complexContent>
     <restriction base="soapenc:Array">
      <attribute ref="soapenc:arrayType" wsdl:arrayType="soapenc:string[]"/>
     </restriction>
    </complexContent>
   </complexType>
   <complexType name="ArrayOf_xsd_anyType">
    <complexContent>
     <restriction base="soapenc:Array">
      <attribute ref="soapenc:arrayType" wsdl:arrayType="xsd:anyType[]"/>
     </restriction>
    </complexContent>
   </complexType>
  </schema>
  <schema targetNamespace="http://xml.apache.org/xml-soap" xmlns="http://www.w3.org/2001/XMLSchema">
   <import namespace="http://hpa.com.au/"/>
   <import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
   <complexType name="Vector">
    <sequence>
     <element maxOccurs="unbounded" minOccurs="0" name="item" type="xsd:anyType"/>
    </sequence>
   </complexType>
  </schema>
 </wsdl:types>
   <wsdl:message name="GetReasonsRequest">
   </wsdl:message>
   <wsdl:message name="GetSizeRequest">
   </wsdl:message>
   <wsdl:message name="GetSizeResponse">
      <wsdl:part name="GetSizeReturn" type="xsd:int"/>
   </wsdl:message>
   <wsdl:message name="GetNameRequest">
   </wsdl:message>
   <wsdl:message name="GetNameResponse">
      <wsdl:part name="GetNameReturn" type="soapenc:string"/>
   </wsdl:message>
   <wsdl:message name="GetReasonListResponse">
      <wsdl:part name="GetReasonListReturn" type="impl:ArrayOf_xsd_anyType"/>
   </wsdl:message>
   <wsdl:message name="GetReasonListRequest">
   </wsdl:message>
   <wsdl:message name="GetReasonsResponse">
      <wsdl:part name="GetReasonsReturn" type="impl:ArrayOf_soapenc_string"/>
   </wsdl:message>
   <wsdl:portType name="BasicService">
      <wsdl:operation name="GetSize">
         <wsdl:input message="impl:GetSizeRequest" name="GetSizeRequest"/>
         <wsdl:output message="impl:GetSizeResponse" name="GetSizeResponse"/>
      </wsdl:operation>
      <wsdl:operation name="GetName">
         <wsdl:input message="impl:GetNameRequest" name="GetNameRequest"/>
         <wsdl:output message="impl:GetNameResponse" name="GetNameResponse"/>
      </wsdl:operation>
      <wsdl:operation name="GetReasons">
         <wsdl:input message="impl:GetReasonsRequest" name="GetReasonsRequest"/>
         <wsdl:output message="impl:GetReasonsResponse" name="GetReasonsResponse"/>
      </wsdl:operation>
      <wsdl:operation name="GetReasonList">
         <wsdl:input message="impl:GetReasonListRequest" name="GetReasonListRequest"/>
         <wsdl:output message="impl:GetReasonListResponse" name="GetReasonListResponse"/>
      </wsdl:operation>
   </wsdl:portType>
   <wsdl:binding name="BasicServiceSoapBinding" type="impl:BasicService">
      <wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
      <wsdl:operation name="GetSize">
         <wsdlsoap:operation soapAction=""/>
         <wsdl:input name="GetSizeRequest">
            <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://hpa.com.au/" use="encoded"/>
         </wsdl:input>
         <wsdl:output name="GetSizeResponse">
            <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://hpa.com.au/" use="encoded"/>
         </wsdl:output>
      </wsdl:operation>
      <wsdl:operation name="GetName">
         <wsdlsoap:operation soapAction=""/>
         <wsdl:input name="GetNameRequest">
            <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://hpa.com.au/" use="encoded"/>
         </wsdl:input>
         <wsdl:output name="GetNameResponse">
            <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://hpa.com.au/" use="encoded"/>
         </wsdl:output>
      </wsdl:operation>
      <wsdl:operation name="GetReasons">
         <wsdlsoap:operation soapAction=""/>
         <wsdl:input name="GetReasonsRequest">
            <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://hpa.com.au/" use="encoded"/>
         </wsdl:input>
         <wsdl:output name="GetReasonsResponse">
            <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://hpa.com.au/" use="encoded"/>
         </wsdl:output>
      </wsdl:operation>
      <wsdl:operation name="GetReasonList">
         <wsdlsoap:operation soapAction=""/>
         <wsdl:input name="GetReasonListRequest">
            <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://hpa.com.au/" use="encoded"/>
         </wsdl:input>
         <wsdl:output name="GetReasonListResponse">
            <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://hpa.com.au/" use="encoded"/>
         </wsdl:output>
      </wsdl:operation>
   </wsdl:binding>
   <wsdl:service name="BasicServiceService">
      <wsdl:port binding="impl:BasicServiceSoapBinding" name="BasicService">
         <wsdlsoap:address location="http://localhost:8080/TestBaseService/services/BasicService"/>
      </wsdl:port>
   </wsdl:service>
</wsdl:definitions>


> Serialisation errors in .NET client with Axis 1.2 rpc/enc service
> -----------------------------------------------------------------
>
>          Key: AXIS-1467
>          URL: http://issues.apache.org/jira/browse/AXIS-1467
>      Project: Axis
>         Type: Bug
>   Components: Serialization/Deserialization
>     Versions: 1.2 Beta
>  Environment: VB .NET client on Win2000, Axis 1.2beta2 server inside JBoss/Jetty on Solaris.
>     Reporter: Anand Natrajan
>      Fix For: 1.2
>  Attachments: server-config.wsdd
>
> I'm seeing some client-side serialisation errors when I try to access
> my Axis 1.2 rpc/encoded service using a VB .NET client. This same
> combination worked in Axis 1.1, but fails with Axis 1.2. I have used
> the Axis 1.2 beta from June 14th as well as July 15th separately.
> Below is a complete trace of what I did and what the error is.
> I've shown
> - the signature of the Java service
> - the java2wsdl Ant task used to generate the WSDL
> - the wsdl2java Ant task used to generate deploy.wsdd
> - the VB .NET client
> - the SOAP request generated by the .NET client
> - the SOAP response when the service was deployed under Axis 1.1
> - the SOAP response when the service was deployed under Axis 1.2
> The items shown as ellipses have been elided because they're simply
> values irrelevant to the operation.
> The only difference between the two scenarios (1.1 vs. 1.2) is that
> I changed the Axis libraries (axis*.jar, commons*.jar, saaj.jar,
> wsdl4j.jar, jaxrpc.jar) and re-ran the procedure right from compiling
> the service and running java2wsdl and so on.
> What has changed between Axis 1.1 and 1.2 in this respect?
> <!-- Java signature of service -->
> import com.abc.api.common.MyPrincipal;
> public class MyAPIRpcEnc
> {
>     public String[] whoami(MyPrincipal principal)
>         throws RemoteException
> 	{
> 		...
> 	}
> }
> <!-- java2wsdl task -->
>         <axis-java2wsdl
>             classname="com.abc.ws.server.MyAPIRpcEnc"
>             style="rpc"
>             use="encoded"
>             namespace="urn:${apiName}"
> 			location="http://LOCAL_HOST:8080/axis/services/MyAPIRpcEnc"
> 			output="${basedir}/${wsdl.build.dir}/MyAPIRpcEnc.wsdl">
>             <classpath refid="classpath"/>
>             <mapping package="com.abc.api.common"
>                 namespace="urn:MyAPICommon"/>
> 		</axis-java2wsdl>
> <!-- wsdl2java task -->
>         <axis-wsdl2java
>             output="${outDir}"
>             url="${basedir}/${wsdl.build.dir}/MyAPIRpcEnc.wsdl"
>             serverside="true">
>             <mapping namespace="urn:MyAPIRpcEnc"
>                 package="com.abc.ws.stubs"/>
>             <mapping namespace="urn:MyAPICommon"
>                 package="com.abc.api.common"/>
>         </axis-wsdl2java>
>         <!-- Paste deploy.wsdd into server-config.wsdd -->
> <!-- VB .NET client call -->
> ...
> Private Sub actualTests()
> 	Dim principal As New MyAPIRpcEnc.MyPrincipal
> 	principal.name = "Administrator"
> 	principal.password = "Administrator"
> 	principal.authService = "DefaultAuthService"
> 	principal.authServiceType = "Grid"
> 	principal.domain = "mydomain.abc.com"
> 	Dim asdn As New MyAPIRpcEnc.MyAPIRpcEncService
> 	asdn.whoami(principal)
> End Sub
> ...
> <!-- VB .NET request -->
> <?xml version="1.0" encoding="utf-8"?>
> <soap:Envelope
> 	xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
> 	xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
> 	xmlns:tns="urn:MyAPIRpcEnc"
> 	xmlns:types="urn:MyAPIRpcEnc/encodedTypes"
> 	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> 	xmlns:xsd="http://www.w3.org/2001/XMLSchema">
> 	<soap:Body soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
> 		<tns:whoami>
> 			<principal href="#id1" />
> 		</tns:whoami>
> 		<q1:MyPrincipal id="id1"
> 			xsi:type="q1:MyPrincipal"
> 			xmlns:q1="urn:MyAPICommon">
> 			<authService xsi:type="xsd:string">DefaultAuthService</authService>
> 			<authServiceType xsi:type="xsd:string">Grid</authServiceType>
> 			<domain xsi:type="xsd:string">mydomain.abc.com</domain>
> 			<name xsi:type="xsd:string">Administrator</name>
> 			<password xsi:type="xsd:string">Administrator</password>
> 		</q1:MyPrincipal>
> 	</soap:Body>
> </soap:Envelope>
> <!-- Axis 1.1 response -->
> <?xml version="1.0" encoding="UTF-8"?>
> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
> 	xmlns:xsd="http://www.w3.org/2001/XMLSchema"
> 	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
> 	<soapenv:Body>
> 		<ns1:whoamiResponse
> 			soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
> 			xmlns:ns1="urn:MyAPIRpcEnc">
> 			<whoamiReturn soapenc:arrayType="xsd:string[9]"
> 				xsi:type="soapenc:Array"
> 				xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
> 				<item>...</item>
> 				<item>...</item>
> 				<item>...</item>
> 				<item>...</item>
> 				<item>...</item>
> 				<item>...</item>
> 				<item>...</item>
> 				<item>...</item>
> 				<item>...</item>
> 			</whoamiReturn>
> 		</ns1:whoamiResponse>
> 	</soapenv:Body>
> </soapenv:Envelope>
> <!-- Axis 1.2 beta response (June 14th and July 15th releases) -->
> <?xml version="1.0" encoding="utf-8"?>
> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
> 	xmlns:xsd="http://www.w3.org/2001/XMLSchema"
> 	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
> 	<soapenv:Body>
> 		<ns1:whoamiResponse
> 			soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
> 			xmlns:ns1="urn:MyAPIRpcEnc">
> 			<whoamiReturn soapenc:arrayType="soapenc:string[9]"
> 				xsi:type="ns1:ArrayOf_xsd_string"
> 				xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
> 				<item xsi:type="soapenc:string">...</item>
> 				<item xsi:type="soapenc:string">...</item>
> 				<item xsi:type="soapenc:string">...</item>
> 				<item xsi:type="soapenc:string">...</item>
> 				<item xsi:type="soapenc:string">...</item>
> 				<item xsi:type="soapenc:string">...</item>
> 				<item xsi:type="soapenc:string">...</item>
> 				<item xsi:type="soapenc:string">...</item>
> 				<item xsi:type="soapenc:string">...</item>
> 			</whoamiReturn>
> 		</ns1:whoamiResponse>
> 	</soapenv:Body>
> </soapenv:Envelope>
> <!-- VB .NET error -->
> Unhandled Exception: System.InvalidOperationException: There is an error in XML
> document (1, 308). ---> System.InvalidOperationException: The specified type was
>  not recognized: name='string', namespace='http://schemas.xmlsoap.org/soap/encoding/', at <whoamiReturn xmlns=''>.
>    at System.Xml.Serialization.XmlSerializationReader.GetPrimitiveType(XmlQualifiedName typeName, Boolean throwOnUnknown)
>    at System.Xml.Serialization.XmlSerializationReader.ReadArray(String typeName, String typeNs)
>    at System.Xml.Serialization.XmlSerializationReader.ReadReferencingElement(String name, String ns, Boolean elementCanBeType, String& fixupReference)
>    at System.Xml.Serialization.XmlSerializationReader.ReadReferencingElement(String name, String ns, String& fixupReference)
>    at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReader1.Read70_whoamiResponse()
>    --- End of inner exception stack trace ---
>    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 DotNetWSAPITest.MyAPIRpcEnc.MyAPIRpcEncService.whoami(MyPrincipal principal)
>    at DotNetWSAPITest.DotNetWSAPITest.actualTests(MyPrincipal principal)
>    at DotNetWSAPITest.DotNetWSAPITest.testMyWSAPI()
>    at DotNetWSAPITest.DotNetWSAPITest.Main()

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
If you want more information on JIRA, or have a bug to report see:
   http://www.atlassian.com/software/jira