Details
-
Bug
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
1.2 Beta
-
None
-
VB .NET client on Win2000, Axis 1.2beta2 server inside JBoss/Jetty on Solaris.
Description
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()