|
David, .NET is doing exactly what you’ve
told it to do. According to your WSDL, when invoking the getVersion
operation, the input message should have no parts (i.e., an empty SOAP Body),
as specified in your getVersionRequest message
definition: <wsdl:message name="getVersionRequest"> </wsdl:message> The fact that Axis has created a <getVersion> element for this request tells me that Axis
has a bug. (If you’re using the latest build, then please file a bug
report.) Doc/literal should never generate a method
name element for you – that only happens when using the RPC style. (either RPC/encoded or RPC/literal – although neither
Axis nor .NET supports RPC/literal). When using doc/literal, if you want the
client to send a <getVersion> element in the
SOAP Body, then you must define this element in your schema and specify this
element as a message part in your getVersionRequest
message: <wsdl:message name="getVersionRequest"> <wsdl:part name=”parameters”
element=”impl:getVersion” </wsdl:message> Note also that the “process”
operation isn’t valid doc/literal. If Axis generated this WSDL for you,
then this is also a bug. (Please file a bug report.) When defining a doc/literal
service, your input message must contain at most one body part. You’ve
defined three parts. If you’d like Axis and .NET to automatically marshal
your parameters for you, then you should use the wrapped style. But either way
(document or wrapped style) – you need to define a wrapper element for
your input message parameters. For wrapped style, you need to define an
element called “process”, which is a sequence of your input
parameters: <xsd:element name="process"> <xsd:complexType> <xsd:sequence> <xsd:element ref="impl:in0"/> <xsd:element ref="impl:in1"/> <xsd:element ref="impl:in2"/> </xsd:sequence> </xsd:complexType </xsd:element> And you need to define your input message
such that it contains only one part, referencing this wrapper element: <wsdl:message name="processRequest"> <wsdl:part element="impl:process" name="parameters"/> </wsdl:message> And you need to remove the parameterOrder attribute from your portType
operation definition. Anne From: David Thielen
[mailto: Hi; I have a case where I have created a java web service using
Axis setting the SOAP in doc/literal format. My java client can access it fine.
My C# client throws an exception. Also, as the SOAP packets below show –
two very weird things:
****************** The SOAP for the C# Request (sent by C# client): POST /axis/services/WindwardReports HTTP/1.1 VsDebuggerCausalityData: Aw{…lots of
A’s…}AA User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; MS Web
Services Client Protocol 1.1.4322.573) Content-Type: text/xml; charset=utf-8 SOAPAction: "" Content-Length: 236 Expect: 100-continue Connection: Keep-Alive Host: 127.0.0.1:1234 <?xml version="1.0"
encoding="utf-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <soap:Body /> </soap:Envelope> The SOAP for the C# Response (returned by java web service): HTTP/1.1 100 Continue HTTP/1.1 500 Internal Server Error Set-Cookie:
JSESSIONID=2A813F0FBC668645B9AD3F11E862B92D; Path=/axis Content-Type: text/xml;charset=utf-8 Transfer-Encoding: chunked Date: Sat, 17 Jul 2004 23:21:41 GMT Server: Apache-Coyote/1.1 Connection: close 1ec <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>
<soapenv:Fault><faultcode>soapenv:Server.userException</faultcode>
<faultstring>java.lang.ArrayIndexOutOfBoundsException: Array index out of
range: 0</faultstring>
<detail><ns1:hostname
xmlns:ns1="http://xml.apache.org/axis/">belle</ns1:hostname></detail>
</soapenv:Fault> </soapenv:Body> </soapenv:Envelope> 0 ****************** The SOAP for the java Request (sent by java client): POST /axis/services/WindwardReports HTTP/1.0 Content-Type: text/xml; charset=utf-8 Accept: application/soap+xml, application/dime,
multipart/related, text/* User-Agent: Axis/1.2beta2 Host: 127.0.0.1:1234 Cache-Control: no-cache Pragma: no-cache SOAPAction: "" Content-Length: 245 <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> <getVersion
xmlns=""/> </soapenv:Body> </soapenv:Envelope> The SOAP for the java Response (returned by java web
service): HTTP/1.1 200 OK Set-Cookie:
JSESSIONID=26C2F2A0CF2A7C201B9FE4916F9D4B78; Path=/axis Content-Type: text/xml;charset=utf-8 Date: Sat, 17 Jul 2004 23:34:58 GMT Server: Apache-Coyote/1.1 Connection: close <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> <getVersionReturn
xmlns="urn:windward.net">3.2.1</getVersionReturn> </soapenv:Body> </soapenv:Envelope> ****************** The exception thrown is: +
System.SystemException
{"java.lang.ArrayIndexOutOfBoundsException: Array index out of range:
0"}
System.SystemException It is happening on the call:
object[] results = this.Invoke("getVersion",
new object[0]); The code (with extra stuff removed) is:
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Web.Services.WebServiceBindingAttribute(Name="WindwardReportsSoapBinding",
Namespace="urn:windward.net")] public class CreateReportService :
System.Web.Services.Protocols.SoapHttpClientProtocol {
public CreateReportService()
{ this.Url = ""> }
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("",
Use=System.Web.Services.Description.SoapBindingUse.Literal,
ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Bare)] [return:
System.Xml.Serialization.XmlElementAttribute("getVersionReturn",
Namespace="urn:windward.net")] public string getVersion() {
object[] results = this.Invoke("getVersion",
new object[0]);
return ((string)(results[0])); } } Any ideas? Again, this works fine with a java client. Both
java server & client created with axis wsdl2java. C# code created with .net
wsdl.exe. Thanks - dave Ps – my wsdl is attached |
- [axis]: more on can't access java WS from .net David Thielen
- RE: [axis]: more on can't access java WS from .net Anne Thomas Manes
- RE: [axis]: more on can't access java WS from .net Anne Thomas Manes
- RE: [axis]: more on can't access java WS from .net David Thielen
