Keying,

This is how I would expect Axis to work. Axis processes only the first child element of the <soapenv:body>. It ignores all subsequent child elements. When using doc/literal, you want to wrap your input parameters into a single element. In other words, your input <message> definition should contain only one <part>. I recommend that you change your WSDL to the following:

<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions targetNamespace="
http://companya.com xmlns="<http://schemas.xmlsoap.org/wsdl/>" xmlns:apachesoap="<http://xml.apache.org/xml-soap>" xmlns:impl="<http://companya.com>" xmlns:intf="http://companya.com" 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:types>
<schema targetNamespace="
http://companya.com" xmlns="<http://www.w3.org/2001/XMLSchema>">
<element name="authenticate" type="impl:authenticate"/>
<complexType name="authenticate">
   <sequence>
         <element name="in0" type="xsd:string"/>
         <element name="in1" type="xsd:string"/>
         <element name="in2" type="xsd:string"/>
         <element name="in3" type="xsd:string"/>
   </sequence>
</complexType>
<complexType name="ErrorMessage">
<sequence>
<element name="errorText" nillable="true" type="xsd:string"/>
<element name="errorCode" nillable="true" type="xsd:string"/>
</sequence>
</complexType>
<complexType name="ArrayOfErrorMessage">
<complexContent>
<restriction base="soapenc:Array">
<attribute ref="soapenc:arrayType" wsdl:arrayType="impl:ErrorMessage[]"/>
</restriction>
</complexContent>
</complexType>
<complexType name="User">
<sequence>
<element name="id" nillable="true" type="xsd:string"/>
<element name="errors" nillable="true" type="impl:ArrayOfErrorMessage"/>
</sequence>
</complexType>
<element name="authenticateReturn" type="impl:User"/>
</schema>
</wsdl:types>
<wsdl:message name="authenticateRequest">
<wsdl:part element="impl:authenticate" name="authenticeRequest"/>
</wsdl:message>
<wsdl:message name="authenticateResponse">
<wsdl:part element="intf:authenticateReturn" name="authenticateReturn"/>
</wsdl:message>
<wsdl:portType name="Authenticator">
<wsdl:operation name="authenticate">
<wsdl:input message="intf:authenticateRequest" name="authenticateRequest"/>
<wsdl:output message="intf:authenticateResponse" name="authenticateResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="AuthenticatorSoapBinding" type="intf:Authenticator">
<wsdlsoap:binding style="document" transport="
http://schemas.xmlsoap.org/soap/http">
<wsdl:operation name="authenticate">
<wsdlsoap:operation soapAction=""/>
<wsdl:input name="authenticateRequest">
<wsdlsoap:body namespace="
http://companya.com" use="literal"/>
</wsdl:input>
<wsdl:output name="authenticateResponse">
<wsdlsoap:body namespace="
http://companya.com" use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="AuthenticatorService">
<wsdl:port binding="intf:AuthenticatorSoapBinding" name="Authenticator">
<wsdlsoap:address location="
http://localhost:8011/axis/services/Authenticator">
</wsdl:port>
</wsdl:service>
</wsdl:definitions>


At 09:42 AM 8/13/2003 -0400, Xi, Keying wrote:

Hi all,
I have a document style web service. I used wsdl2java and java2wsdl tools and the service is deployed OK. The service only has one method that takes four parameters.

But when I call the service, it didn't work. I found out that only the first parameter is deserialized by looking at the log. It really baffled me.  Is there anything wrong with my wsdl?

Has anyone had that happen before? Here is my wsdl:
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions targetNamespace="
http://companya.com xmlns="<http://schemas.xmlsoap.org/wsdl/>" xmlns:apachesoap="<http://xml.apache.org/xml-soap>" xmlns:impl="<http://companya.com>" xmlns:intf="http://companya.com" 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:types>
<schema targetNamespace="
http://companya.com" xmlns="<http://www.w3.org/2001/XMLSchema>">
<element name="in0" type="xsd:string"/>
<element name="in1" type="xsd:string"/>
<element name="in2" type="xsd:string"/>
<element name="in3" type="xsd:string"/>
<complexType name="ErrorMessage">
<sequence>
<element name="errorText" nillable="true" type="xsd:string"/>
<element name="errorCode" nillable="true" type="xsd:string"/>
</sequence>
</complexType>
<complexType name="ArrayOfErrorMessage">
<complexContent>
<restriction base="soapenc:Array">
<attribute ref="soapenc:arrayType" wsdl:arrayType="impl:ErrorMessage[]"/>
</restriction>
</complexContent>
</complexType>
<complexType name="User">
<sequence>
<element name="id" nillable="true" type="xsd:string"/>
<element name="errors" nillable="true" type="impl:ArrayOfErrorMessage"/>
</sequence>
</complexType>
<element name="authenticateReturn" type="impl:User"/>
</schema>
</wsdl:types>

<wsdl:message name="authenticateRequest">
<wsdl:part element="intf:in0" name="in0"/>
<wsdl:part element="intf:in1" name="in1"/>
<wsdl:part element="intf:in2" name="in2"/>
<wsdl:part element="intf:in3" name="in3"/>
</wsdl:message>
<wsdl:message name="authenticateResponse">
<wsdl:part element="intf:authenticateReturn" name="authenticateReturn"/>
</wsdl:message>
<wsdl:portType name="Authenticator">
<wsdl:operation name="authenticate" parameterOrder="in0 in1 in2 in3">
<wsdl:input message="intf:authenticateRequest" name="authenticateRequest"/>
<wsdl:output message="intf:authenticateResponse" name="authenticateResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="AuthenticatorSoapBinding" type="intf:Authenticator">
<wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/ <http://schemas.xmlsoap.org/soap/http>>

<wsdl:operation name="authenticate">
<wsdlsoap:operation soapAction=""/>
<wsdl:input name="authenticateRequest">
<wsdlsoap:body namespace="http://companya.com" use="literal"/>
</wsdl:input>
<wsdl:output name="authenticateResponse">
<wsdlsoap:body namespace="http://companya.com" use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="AuthenticatorService">
<wsdl:port binding="intf:AuthenticatorSoapBinding" name="Authenticator">
<wsdlsoap:address location="http://localhost:8011/axis/services/Authenticator"/ <http://localhost:8011/axis/services/Authenticator>>

</wsdl:port>
</wsdl:service>
</wsdl:definitions>



Reply via email to