Here is a revised version of your WSDL following the "wrapped" convention. Note that I have created wrapper elements for your request and response messages. The input wrapper elements have the same name as the operation. Each element is defined as a complex type with a sequence of elements (the tns:account element). The output wrapper elements have the same name as the operation appended with "Response". The wrapper elements must be defined using <xsd:sequence> and they may not contain attributes. The child elements of the wrapper element ( e.g., tns:account) may contain attributes.
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions name="urn:Account"
targetNamespace=" http://plm.marchex.com/service/account"
xmlns:tns="http://plm.marchex.com/service/account"
xmlns:typens=" http://plm.marchex.com/service/account"
xmlns:xsd="http://www.w3.org/1999/XMLSchema"
xmlns:soap=" http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
<wsdl:types>
<xsd:schema targetNamespace=" http://plm.marchex.com/services/account"
xmlns:xsd="http://www.w3.org/1999/XMLSchema">
<xsd:include schemaLocation="account.xsd"/>
<xsd:element name="createAccount">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="tns:account"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="createAccountResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="tns:account"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="updateAccount">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="tns:account"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="UpdateAccountResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="tns:account"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
</wsdl:types>
<!-- Use wsdl:import only to import WSDLs. Use xsd:import to import schemas.
<wsdl:import namespace="http://plm.marchex.com/service/account "
location="account.xsd"/>
-->
<wsdl:message name="createAccountRequest">
<wsdl:part name="parameters" element="tns:createAccount"/>
</wsdl:message>
<wsdl:message name="createAccountResponse">
<wsdl:part name="parameters" element="tns:createAccountResponse"/>
</wsdl:message>
<wsdl:message name="updateAccountRequest">
<wsdl:part name="parameters" element="tns:updateAccount"/>
</wsdl:message>
<wsdl:message name="updateAccountResponse">
<wsdl:part name="parameters" element="tns:updateAccountResponse"/>
</wsdl:message>
<wsdl:portType name="Account">
<wsdl:operation name="createAccount">
<wsdl:input message="tns:createAccountRequest"/>
<wsdl:output message="tns:createAccountResponse"/>
</wsdl:operation>
<wsdl:operation name="updateAccount">
<wsdl:input message="tns:updateAccountRequest"/>
<wsdl:output message="tns:updateAccountResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="AccountSOAPBinding" type="tns:Account">
<soap:binding style="document"
transport=" http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="createAccount">
<soap:operation soapAction="createAccount"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="updateAccount">
<soap:operation soapAction="updateAccount"/>
<wsdl:input>
<!-- <soap:body use="encoded"
namespace="http://plm.marchex.com/service/account"
encodingStyle=" http://schemas.xmlsoap.org/soap/encoding/"/>
-->
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="AccountService">
<!-- <wsdl:requestFlow> No such thing exists, this is just to remind me to
use a custom deploy.wsdd
<wsdl:handler
type="java:tufte.model.service.handlers.AuthenHandler"/>
</wsdl:requestFlow> -->
<wsdl:port name="Account" binding="tns:AccountSOAPBinding">
<soap:address
location="http://localhost:8080/axis/services/Account "/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
Anne
On 2/14/06, Dies Koper <
[EMAIL PROTECTED]> wrote:
Hello Scott,
In your wsdl:portType definition, you have the same message for the
operation's input and output. Therefore, the parts' names are the same.
So you are telling Axis that you want it to be an IN/OUT parameter and
it should use a Holder class as parameter.
If you do not want to use a Holder, you should point the operation's
output to another message, one with a different part name, in this case
referring to a ComplexType with no elements (void wrapper).
Something like:
<wsdl:message name="AccountDetails">
<wsdl:part name="account" element="tns:account"/>
</wsdl:message>
<wsdl:message name="empty">
<wsdl:part name="empty" element="tns:emptyElement"/>
</wsdl:message>
<wsdl:portType name="Account">
<wsdl:operation name="createAccount">
<wsdl:input message="tns:AccountDetails"/>
<wsdl:output message="tns:empty"/>
</wsdl:operation>
<wsdl:operation name="updateAccount">
<wsdl:input message="tns:AccountDetails"/>
<wsdl:output message="tns:empty"/>
</wsdl:operation>
</wsdl:portType>
With in your types section or XSD something like:
<xsd:element name="emptyElement">
<xsd:complexType>
<sequence/>
</xsd:complexType>
</xsd:element>
BTW: It is not recommended (WS-I BP1.0) to use wsdl:import to import XSD
files. Use the commented way (but with import) instead.
Regards,
Dies
Scott McCoy wrote:
> The attached WSDL and XSD are giving me this method signature.
>
> public class AccountSOAPBindingImpl implements
> tufte.model.service.account.Accou
> nt{
> public void createAccount(
> tufte.model.service.account.holders.AccountHolder account) throws
> java.rmi.RemoteException {
> }
>
> public void updateAccount(
> tufte.model.service.account.holders.AccountHolder account) throws
> java.rmi.RemoteException {
> }
>
> }
>
> I'm expecting:
>
> public void updateAccount(tufte.model.service.account.Account account)
> throws java.rmi.RemoteException { }
>
> Not this.
>
> Thanks!
> Scott S. McCoy
>
>
>
> ------------------------------------------------------------------------
>
> <?xml version="1.0" encoding="UTF-8"?>
>
> <wsdl:definitions name="urn:Account"
> targetNamespace=" http://plm.marchex.com/service/account"
> xmlns:tns="http://plm.marchex.com/service/account"
> xmlns:typens=" http://plm.marchex.com/service/account"
> xmlns:xsd="http://www.w3.org/1999/XMLSchema"
> xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
> xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/ ">
> <!--
> <wsdl:types>
> <xsd:schema targetNamespace="http://plm.marchex.com/services/account"
> xmlns:xsd=" http://www.w3.org/1999/XMLSchema">
> <xsd:include schemaLocation="account.xsd"/>
> </xsd:schema>
> </wsdl:types>
> -->
>
> <wsdl:import namespace="http://plm.marchex.com/service/account"
> location="account.xsd "/>
>
> <wsdl:message name="AccountDetails">
> <wsdl:part name="account" element="tns:account"/>
> </wsdl:message>
>
> <wsdl:portType name="Account">
> <wsdl:operation name="createAccount">
> <wsdl:input message="tns:AccountDetails"/>
> <wsdl:output message="tns:AccountDetails"/>
> </wsdl:operation>
>
> <wsdl:operation name="updateAccount">
> <wsdl:input message="tns:AccountDetails"/>
> <wsdl:output message="tns:AccountDetails"/>
> </wsdl:operation>
> </wsdl:portType>
>
> <wsdl:binding name="AccountSOAPBinding" type="tns:Account">
> <soap:binding style="document"
> transport="http://schemas.xmlsoap.org/soap/http"/>
>
> <wsdl:operation name="createAccount">
> <soap:operation soapAction="createAccount"/>
> <wsdl:input>
> <soap:body use="literal"/>
> </wsdl:input>
> <wsdl:output>
> <soap:body use="literal"/>
> </wsdl:output>
> </wsdl:operation>
>
> <wsdl:operation name="updateAccount">
> <soap:operation soapAction="createAccount"/>
> <wsdl:input>
> <!-- <soap:body use="encoded"
> namespace=" http://plm.marchex.com/service/account"
> encodingStyle="http://schemas.xmlsoap.org/soap/encoding/ "/>
> -->
> <soap:body use="literal"/>
> </wsdl:input>
> <wsdl:output>
> <soap:body use="literal"/>
> </wsdl:output>
> </wsdl:operation>
> </wsdl:binding>
>
> <wsdl:service name="AccountService">
> <!-- <wsdl:requestFlow> No such thing exists, this is just to remind me to
> use a custom deploy.wsdd
> <wsdl:handler
> type="java:tufte.model.service.handlers.AuthenHandler"/>
> </wsdl:requestFlow> -->
> <wsdl:port name="Account" binding="tns:AccountSOAPBinding">
> <soap:address
> location=" http://localhost:8080/axis/services/Account"/>
> </wsdl:port>
> </wsdl:service>
> </wsdl:definitions>
--
Dies KOPER < [EMAIL PROTECTED]> (changed on 1 July 2005)
Fujitsu Ltd - MWPF1 (changed from MWPF3 on 21 Nov 2005)
2-15-16, Shin-Yokohama, Kouhoku-ku, Yokohama, 222-0033, Japan
Tel. +81(45)-475-5605 (internal 7181-4217)
