You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-user@axis.apache.org by Greg Adams <ga...@gmail.com> on 2005/11/18 21:07:42 UTC

WSDL2Java and wrapped vs document style

Given the following WSDL:

<?xml version="1.0" encoding="utf-8"?>
<wsdl:definitions
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:tns="urn:WidgetPrice"
xmlns:s="http://www.w3.org/2001/XMLSchema"
xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
targetNamespace="urn:WidgetPrice"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
<wsdl:types>
<s:schema elementFormDefault="qualified" targetNamespace="urn:WidgetPrice">
<s:element name="StateIdentifier">
<s:complexType>
<s:all>
<s:element name="userContextId" type="s:string" />
<s:element name="convId" type="s:string" />
</s:all>
</s:complexType>
</s:element>
<s:element name="setWidgetPrice">
<s:complexType>
<s:sequence>
<s:element name="name" type="s:string" />
<s:element name="price" type="s:float" />
</s:sequence>
</s:complexType>
</s:element>
<s:element name="setWidgetPriceResponse">
<s:complexType />
</s:element>
<s:element name="getWidgetPrice">
<s:complexType>
<s:sequence>
<s:element name="name" type="s:string" />
</s:sequence>
</s:complexType>
</s:element>
<s:element name="getWidgetPriceResponse">
<s:complexType>
<s:sequence>
<s:element name="getWidgetPriceResult" type="s:float" />
</s:sequence>
</s:complexType>
</s:element>
</s:schema>
</wsdl:types>

<wsdl:message name="setWidgetPriceRequest">
<wsdl:part name="state_header" element="tns:StateIdentifier" />
<wsdl:part name="parameters" element="tns:setWidgetPrice" />
</wsdl:message>
<wsdl:message name="setWidgetPriceResponse">
<wsdl:part name="parameters" element="tns:setWidgetPriceResponse" />
</wsdl:message>
<wsdl:message name="getWidgetPriceRequest">
<wsdl:part name="state_header" element="tns:StateIdentifier" />
<wsdl:part name="parameters" element="tns:getWidgetPrice" />
</wsdl:message>
<wsdl:message name="getWidgetPriceResponse">
<wsdl:part name="parameters" element="tns:getWidgetPriceResponse" />
</wsdl:message>

<wsdl:portType name="WidgetPriceSoap">
<wsdl:operation name="setWidgetPrice">
<wsdl:input message="tns:setWidgetPriceRequest" />
<wsdl:output message="tns:setWidgetPriceResponse" />
</wsdl:operation>
<wsdl:operation name="getWidgetPrice">
<wsdl:input message="tns:getWidgetPriceRequest" />
<wsdl:output message="tns:getWidgetPriceResponse" />
</wsdl:operation>
</wsdl:portType>

<wsdl:binding name="WidgetPriceSoapBinding" type="tns:WidgetPriceSoap">
<soap:binding style="document" transport="
http://schemas.xmlsoap.org/soap/http" />
<wsdl:operation name="setWidgetPrice">
<soap:operation soapAction="urn:WidgetPrice/setWidgetPrice"
style="document"/>
<wsdl:input name="setWidgetPriceRequest">
<soap:body parts="parameters" use="literal" />
<soap:header message="tns:setWidgetPriceRequest" part="state_header"
use="literal" />
</wsdl:input>
<wsdl:output name="setWidgetPriceResponse">
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="getWidgetPrice">
<soap:operation soapAction="urn:WidgetPrice/getWidgetPrice" style="document"
/>
<wsdl:input name="getWidgetPriceRequest">
<soap:body parts="parameters" use="literal" />
<soap:header message="tns:getWidgetPriceSoapIn" part="state_header"
use="literal" />
</wsdl:input>
<wsdl:output name="getWidgetPriceResponse">
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="WidgetPrice">
<wsdl:port name="WidgetPriceSoap" binding="tns:WidgetPriceSoapBinding">
<soap:address location="http://localhost:2892/NetWidgetPrice/Service.asmx"
/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>


Why does WSDL2Java automatically create a "document" style service, when
what I want is a "wrapped" style service?

Greg

Re: WSDL2Java and wrapped vs document style

Posted by Anne Thomas Manes <at...@gmail.com>.
I suspect that Axis's ability to recognize the wrapped convention isn't
sophisticated enough to deal with header parts. Please submit an enhancement
request.

Anne

On 11/18/05, Greg Adams <ga...@gmail.com> wrote:
>
> Well, what I mean is that the deploy.wsdd created by WSDL2Java from the
> WSDL below has a service element like this:
>
> <service name="WidgetPriceSoap" provider="java:RPC" style="document"
> use="literal">
>
> when what I want is this:
>
> <service name="WidgetPriceSoap" provider="java:RPC" style="wrapped"
> use="literal">
>
> It also generates wrapper classes for each request and response message...
>
> The extra part in the message is bound to the header in the
> soap:binding... Can't Axis use a wrapped convention in the service interface
> like this:
>
> public void setWidgetPrice(StateIdentifier state_header, String name,
> String price);
>
> ??
>
>
> On 11/18/05, Ravi Krishnamurthy <ra...@savvion.com> wrote:
> >
> > Greg:
> > guess you mean document/literal and not wrapped.
> >
> > May be because the message contains more than one part and the wrapped
> > convention needs only one part with name as parameters.
> >
> > regards,
> > ravi
> >
> > Greg Adams wrote:
> >
> > > Given the following WSDL:
> > >
> > > <?xml version="1.0" encoding="utf-8"?>
> > > <wsdl:definitions
> > > xmlns:soap=" http://schemas.xmlsoap.org/wsdl/soap/"
> > > xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
> > > xmlns:tns="urn:WidgetPrice"
> > > xmlns:s="http://www.w3.org/2001/XMLSchema"
> > > xmlns:http="http://schemas.xmlsoap.org/wsdl/http/ "
> > > targetNamespace="urn:WidgetPrice"
> > > xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
> > > <wsdl:types>
> > > <s:schema elementFormDefault="qualified"
> > > targetNamespace="urn:WidgetPrice">
> > > <s:element name="StateIdentifier">
> > > <s:complexType>
> > > <s:all>
> > > <s:element name="userContextId" type="s:string" />
> > > <s:element name="convId" type="s:string" />
> > > </s:all>
> > > </s:complexType>
> > > </s:element>
> > > <s:element name="setWidgetPrice">
> > > <s:complexType>
> > > <s:sequence>
> > > <s:element name="name" type="s:string" />
> > > <s:element name="price" type="s:float" />
> > > </s:sequence>
> > > </s:complexType>
> > > </s:element>
> > > <s:element name="setWidgetPriceResponse">
> > > <s:complexType />
> > > </s:element>
> > > <s:element name="getWidgetPrice">
> > > <s:complexType>
> > > <s:sequence>
> > > <s:element name="name" type="s:string" />
> > > </s:sequence>
> > > </s:complexType>
> > > </s:element>
> > > <s:element name="getWidgetPriceResponse">
> > > <s:complexType>
> > > <s:sequence>
> > > <s:element name="getWidgetPriceResult"
> > > type="s:float" />
> > > </s:sequence>
> > > </s:complexType>
> > > </s:element>
> > > </s:schema>
> > > </wsdl:types>
> > >
> > > <wsdl:message name="setWidgetPriceRequest">
> > > <wsdl:part name="state_header" element="tns:StateIdentifier" />
> > > <wsdl:part name="parameters" element="tns:setWidgetPrice" />
> > > </wsdl:message>
> > > <wsdl:message name="setWidgetPriceResponse">
> > > <wsdl:part name="parameters"
> > > element="tns:setWidgetPriceResponse" />
> > > </wsdl:message>
> > > <wsdl:message name="getWidgetPriceRequest">
> > > <wsdl:part name="state_header" element="tns:StateIdentifier" />
> > > <wsdl:part name="parameters" element="tns:getWidgetPrice" />
> > > </wsdl:message>
> > > <wsdl:message name="getWidgetPriceResponse">
> > > <wsdl:part name="parameters"
> > > element="tns:getWidgetPriceResponse" />
> > > </wsdl:message>
> > >
> > > <wsdl:portType name="WidgetPriceSoap">
> > > <wsdl:operation name="setWidgetPrice">
> > > <wsdl:input message="tns:setWidgetPriceRequest" />
> > > <wsdl:output message="tns:setWidgetPriceResponse" />
> > > </wsdl:operation>
> > > <wsdl:operation name="getWidgetPrice">
> > > <wsdl:input message="tns:getWidgetPriceRequest" />
> > > <wsdl:output message="tns:getWidgetPriceResponse" />
> > > </wsdl:operation>
> > > </wsdl:portType>
> > >
> > > <wsdl:binding name="WidgetPriceSoapBinding"
> > > type="tns:WidgetPriceSoap">
> > > <soap:binding style="document"
> > > transport="http://schemas.xmlsoap.org/soap/http " />
> > > <wsdl:operation name="setWidgetPrice">
> > > <soap:operation
> > > soapAction="urn:WidgetPrice/setWidgetPrice" style="document"/>
> > > <wsdl:input name="setWidgetPriceRequest">
> > > <soap:body parts="parameters" use="literal" />
> > > <soap:header message="tns:setWidgetPriceRequest"
> > > part="state_header" use="literal" />
> > > </wsdl:input>
> > > <wsdl:output name="setWidgetPriceResponse">
> > > <soap:body use="literal" />
> > > </wsdl:output>
> > > </wsdl:operation>
> > > <wsdl:operation name="getWidgetPrice">
> > > <soap:operation
> > > soapAction="urn:WidgetPrice/getWidgetPrice" style="document" />
> > > <wsdl:input name="getWidgetPriceRequest">
> > > <soap:body parts="parameters" use="literal" />
> > > <soap:header message="tns:getWidgetPriceSoapIn"
> > > part="state_header" use="literal" />
> > > </wsdl:input>
> > > <wsdl:output name="getWidgetPriceResponse">
> > > <soap:body use="literal" />
> > > </wsdl:output>
> > > </wsdl:operation>
> > > </wsdl:binding>
> > > <wsdl:service name="WidgetPrice">
> > > <wsdl:port name="WidgetPriceSoap"
> > > binding="tns:WidgetPriceSoapBinding">
> > > <soap:address
> > > location=" http://localhost:2892/NetWidgetPrice/Service.asmx" />
> > > </wsdl:port>
> > > </wsdl:service>
> > > </wsdl:definitions>
> > >
> > >
> > > Why does WSDL2Java automatically create a "document" style service,
> > > when what I want is a "wrapped" style service?
> > >
> > > Greg
> >
> >
> >
> >
>

Re: WSDL2Java and wrapped vs document style

Posted by Greg Adams <ga...@gmail.com>.
Well, what I mean is that the deploy.wsdd created by WSDL2Java from the WSDL
below has a service element like this:

<service name="WidgetPriceSoap" provider="java:RPC" style="document"
use="literal">

when what I want is this:

<service name="WidgetPriceSoap" provider="java:RPC" style="wrapped"
use="literal">

It also generates wrapper classes for each request and response message...

The extra part in the message is bound to the header in the soap:binding...
Can't Axis use a wrapped convention in the service interface like this:

public void setWidgetPrice(StateIdentifier state_header, String name, String
price);

??


On 11/18/05, Ravi Krishnamurthy <ra...@savvion.com> wrote:
>
> Greg:
> guess you mean document/literal and not wrapped.
>
> May be because the message contains more than one part and the wrapped
> convention needs only one part with name as parameters.
>
> regards,
> ravi
>
> Greg Adams wrote:
>
> > Given the following WSDL:
> >
> > <?xml version="1.0" encoding="utf-8"?>
> > <wsdl:definitions
> > xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
> > xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
> > xmlns:tns="urn:WidgetPrice"
> > xmlns:s="http://www.w3.org/2001/XMLSchema"
> > xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
> > targetNamespace="urn:WidgetPrice"
> > xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
> > <wsdl:types>
> > <s:schema elementFormDefault="qualified"
> > targetNamespace="urn:WidgetPrice">
> > <s:element name="StateIdentifier">
> > <s:complexType>
> > <s:all>
> > <s:element name="userContextId" type="s:string" />
> > <s:element name="convId" type="s:string" />
> > </s:all>
> > </s:complexType>
> > </s:element>
> > <s:element name="setWidgetPrice">
> > <s:complexType>
> > <s:sequence>
> > <s:element name="name" type="s:string" />
> > <s:element name="price" type="s:float" />
> > </s:sequence>
> > </s:complexType>
> > </s:element>
> > <s:element name="setWidgetPriceResponse">
> > <s:complexType />
> > </s:element>
> > <s:element name="getWidgetPrice">
> > <s:complexType>
> > <s:sequence>
> > <s:element name="name" type="s:string" />
> > </s:sequence>
> > </s:complexType>
> > </s:element>
> > <s:element name="getWidgetPriceResponse">
> > <s:complexType>
> > <s:sequence>
> > <s:element name="getWidgetPriceResult"
> > type="s:float" />
> > </s:sequence>
> > </s:complexType>
> > </s:element>
> > </s:schema>
> > </wsdl:types>
> >
> > <wsdl:message name="setWidgetPriceRequest">
> > <wsdl:part name="state_header" element="tns:StateIdentifier" />
> > <wsdl:part name="parameters" element="tns:setWidgetPrice" />
> > </wsdl:message>
> > <wsdl:message name="setWidgetPriceResponse">
> > <wsdl:part name="parameters"
> > element="tns:setWidgetPriceResponse" />
> > </wsdl:message>
> > <wsdl:message name="getWidgetPriceRequest">
> > <wsdl:part name="state_header" element="tns:StateIdentifier" />
> > <wsdl:part name="parameters" element="tns:getWidgetPrice" />
> > </wsdl:message>
> > <wsdl:message name="getWidgetPriceResponse">
> > <wsdl:part name="parameters"
> > element="tns:getWidgetPriceResponse" />
> > </wsdl:message>
> >
> > <wsdl:portType name="WidgetPriceSoap">
> > <wsdl:operation name="setWidgetPrice">
> > <wsdl:input message="tns:setWidgetPriceRequest" />
> > <wsdl:output message="tns:setWidgetPriceResponse" />
> > </wsdl:operation>
> > <wsdl:operation name="getWidgetPrice">
> > <wsdl:input message="tns:getWidgetPriceRequest" />
> > <wsdl:output message="tns:getWidgetPriceResponse" />
> > </wsdl:operation>
> > </wsdl:portType>
> >
> > <wsdl:binding name="WidgetPriceSoapBinding"
> > type="tns:WidgetPriceSoap">
> > <soap:binding style="document"
> > transport="http://schemas.xmlsoap.org/soap/http" />
> > <wsdl:operation name="setWidgetPrice">
> > <soap:operation
> > soapAction="urn:WidgetPrice/setWidgetPrice" style="document"/>
> > <wsdl:input name="setWidgetPriceRequest">
> > <soap:body parts="parameters" use="literal" />
> > <soap:header message="tns:setWidgetPriceRequest"
> > part="state_header" use="literal" />
> > </wsdl:input>
> > <wsdl:output name="setWidgetPriceResponse">
> > <soap:body use="literal" />
> > </wsdl:output>
> > </wsdl:operation>
> > <wsdl:operation name="getWidgetPrice">
> > <soap:operation
> > soapAction="urn:WidgetPrice/getWidgetPrice" style="document" />
> > <wsdl:input name="getWidgetPriceRequest">
> > <soap:body parts="parameters" use="literal" />
> > <soap:header message="tns:getWidgetPriceSoapIn"
> > part="state_header" use="literal" />
> > </wsdl:input>
> > <wsdl:output name="getWidgetPriceResponse">
> > <soap:body use="literal" />
> > </wsdl:output>
> > </wsdl:operation>
> > </wsdl:binding>
> > <wsdl:service name="WidgetPrice">
> > <wsdl:port name="WidgetPriceSoap"
> > binding="tns:WidgetPriceSoapBinding">
> > <soap:address
> > location="http://localhost:2892/NetWidgetPrice/Service.asmx" />
> > </wsdl:port>
> > </wsdl:service>
> > </wsdl:definitions>
> >
> >
> > Why does WSDL2Java automatically create a "document" style service,
> > when what I want is a "wrapped" style service?
> >
> > Greg
>
>
>
>

Re: WSDL2Java and wrapped vs document style

Posted by Ravi Krishnamurthy <ra...@savvion.com>.
Greg:
guess you mean document/literal and not wrapped.

May be because the message contains more than one part and the wrapped 
convention needs only one part with name as parameters.

regards,
ravi

Greg Adams wrote:

> Given the following WSDL:
>
> <?xml version="1.0" encoding="utf-8"?>
> <wsdl:definitions
>     xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
>     xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
>     xmlns:tns="urn:WidgetPrice"
>     xmlns:s="http://www.w3.org/2001/XMLSchema"
>     xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
>     targetNamespace="urn:WidgetPrice"
>     xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
>     <wsdl:types>
>         <s:schema elementFormDefault="qualified" 
> targetNamespace="urn:WidgetPrice">
>             <s:element name="StateIdentifier">
>                 <s:complexType>
>                     <s:all>
>                         <s:element name="userContextId" type="s:string" />
>                         <s:element name="convId" type="s:string" />
>                     </s:all>
>                 </s:complexType>
>             </s:element>
>             <s:element name="setWidgetPrice">
>                 <s:complexType>
>                     <s:sequence>
>                         <s:element name="name" type="s:string" />
>                         <s:element name="price" type="s:float" />
>                     </s:sequence>
>                 </s:complexType>
>             </s:element>
>             <s:element name="setWidgetPriceResponse">
>                 <s:complexType />
>             </s:element>
>             <s:element name="getWidgetPrice">
>                 <s:complexType>
>                     <s:sequence>
>                         <s:element name="name" type="s:string" />
>                     </s:sequence>
>                 </s:complexType>
>             </s:element>
>             <s:element name="getWidgetPriceResponse">
>                 <s:complexType>
>                     <s:sequence>
>                         <s:element name="getWidgetPriceResult" 
> type="s:float" />
>                     </s:sequence>
>                 </s:complexType>
>             </s:element>
>         </s:schema>
>     </wsdl:types>
>    
>     <wsdl:message name="setWidgetPriceRequest">
>         <wsdl:part name="state_header" element="tns:StateIdentifier" />
>         <wsdl:part name="parameters" element="tns:setWidgetPrice" />
>     </wsdl:message>
>     <wsdl:message name="setWidgetPriceResponse">
>         <wsdl:part name="parameters" 
> element="tns:setWidgetPriceResponse" />
>     </wsdl:message>
>     <wsdl:message name="getWidgetPriceRequest">
>         <wsdl:part name="state_header" element="tns:StateIdentifier" />
>         <wsdl:part name="parameters" element="tns:getWidgetPrice" />
>     </wsdl:message>
>     <wsdl:message name="getWidgetPriceResponse">
>         <wsdl:part name="parameters" 
> element="tns:getWidgetPriceResponse" />
>     </wsdl:message>
>    
>     <wsdl:portType name="WidgetPriceSoap">
>         <wsdl:operation name="setWidgetPrice">
>             <wsdl:input message="tns:setWidgetPriceRequest" />
>             <wsdl:output message="tns:setWidgetPriceResponse" />
>         </wsdl:operation>
>         <wsdl:operation name="getWidgetPrice">
>             <wsdl:input message="tns:getWidgetPriceRequest" />
>             <wsdl:output message="tns:getWidgetPriceResponse" />
>         </wsdl:operation>
>     </wsdl:portType>
>    
>     <wsdl:binding name="WidgetPriceSoapBinding" 
> type="tns:WidgetPriceSoap">
>         <soap:binding style="document" 
> transport="http://schemas.xmlsoap.org/soap/http" />
>         <wsdl:operation name="setWidgetPrice">
>             <soap:operation 
> soapAction="urn:WidgetPrice/setWidgetPrice" style="document"/>
>             <wsdl:input name="setWidgetPriceRequest">
>                 <soap:body parts="parameters" use="literal" />
>                 <soap:header message="tns:setWidgetPriceRequest" 
> part="state_header" use="literal" />
>             </wsdl:input>
>             <wsdl:output name="setWidgetPriceResponse">
>                 <soap:body use="literal" />
>             </wsdl:output>
>         </wsdl:operation>
>         <wsdl:operation name="getWidgetPrice">
>             <soap:operation 
> soapAction="urn:WidgetPrice/getWidgetPrice" style="document" />
>             <wsdl:input name="getWidgetPriceRequest">
>                 <soap:body parts="parameters" use="literal" />
>                 <soap:header message="tns:getWidgetPriceSoapIn" 
> part="state_header" use="literal" />
>             </wsdl:input>
>             <wsdl:output name="getWidgetPriceResponse">
>                 <soap:body use="literal" />
>             </wsdl:output>
>         </wsdl:operation>
>     </wsdl:binding>
>     <wsdl:service name="WidgetPrice">
>         <wsdl:port name="WidgetPriceSoap" 
> binding="tns:WidgetPriceSoapBinding">
>             <soap:address 
> location="http://localhost:2892/NetWidgetPrice/Service.asmx" />
>         </wsdl:port>
>     </wsdl:service>
> </wsdl:definitions>
>
>
> Why does WSDL2Java automatically create a "document" style service, 
> when what I want is a "wrapped" style service?
>
> Greg