Thank you for fast answer. Originally I thought that generated proxy stubs
should be the same independent on binding. Seems I need to learn more in
this area. Thanks again.


dkulp wrote:
> 
> 
> This is all correct.  Arrays/collections in "bare" mode really don't work 
> well.     Global elements in schema aren't allowed to have a "maxOccurs"
> on 
> them.  Since doc/lit has to point at an element, we have to generate a
> pseudo 
> element that points to a sequence with an element with the maxOccurs.  
> Kind 
> of a wrapped thing.  
> 
> Code generated from that would then generate a type for that wrapper type 
> thing and point at it.
> 
> Anyway, a bit strange, but is working properly.    For the most part
> though, 
> I'd recommend sticking to wrapped doc/lit for code first type things.
> 
> Dan
> 
> 
> 
> On Thursday 09 October 2008 7:12:49 am Libor Svehlak wrote:
>> I need to use document/literal/bare SOAP binding I'm little bit surprised
>> about difference of passing array parameters when using this SOAP binding
>> in oposite to document/literal/wrapped style.
>>
>> I have following simple interface:
>>
>> @WebService
>> @SOAPBinding(style=Style.DOCUMENT, use=Use.LITERAL, parameterStyle =
>> ParameterStyle.BARE)
>> public interface ITestWebService {
>>      public void testPassingArray(@WebParam(name = "arrayOfLongs") Long[]
>> arrayOfLongs);
>> }
>>
>> Auto-generated WSDL (by CXF version 2.1.2) looks like following:
>>
>> <?xml version="1.0" ?><wsdl:definitions
>> name="TestBareWebServiceImplService"
>> targetNamespace="http://testbare.webservice.com/";
>> xmlns:ns1="http://cxf.apache.org/bindings/xformat";
>> xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/";
>> xmlns:tns="http://testbare.webservice.com/";
>> xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/";
>> xmlns:xsd="http://www.w3.org/2001/XMLSchema";>
>>   <wsdl:types>
>> <xs:schema attributeFormDefault="unqualified"
>> elementFormDefault="unqualified"
>> targetNamespace="http://jaxb.dev.java.net/array";
>> xmlns="http://jaxb.dev.java.net/array";
>> xmlns:xs="http://www.w3.org/2001/XMLSchema";>
>>     <xs:complexType final="#all" name="longArray">
>>         <xs:sequence>
>>             <xs:element maxOccurs="unbounded" minOccurs="0" name="item"
>> nillable="true" type="xs:long"></xs:element>
>>         </xs:sequence>
>>     </xs:complexType>
>> </xs:schema>
>> <xsd:schema attributeFormDefault="unqualified"
>> elementFormDefault="qualified"
>> targetNamespace="http://testbare.webservice.com/";
>> xmlns:ns0="http://jaxb.dev.java.net/array";
>> xmlns:tns="http://testbare.webservice.com/";
>> xmlns:xsd="http://www.w3.org/2001/XMLSchema";>
>>     <xsd:import namespace="http://jaxb.dev.java.net/array";></xsd:import>
>>     <xsd:element name="arrayOfLongs" nillable="true"
>> type="ns0:longArray"></xsd:element>
>> </xsd:schema>
>>   </wsdl:types>
>>   <wsdl:message name="testPassingArray">
>>     <wsdl:part element="tns:arrayOfLongs" name="arrayOfLongs">
>>     </wsdl:part>
>>   </wsdl:message>
>>   <wsdl:message name="testPassingArrayResponse">
>>   </wsdl:message>
>>   <wsdl:portType name="ITestWebService">
>>     <wsdl:operation name="testPassingArray">
>>       <wsdl:input message="tns:testPassingArray" name="testPassingArray">
>>     </wsdl:input>
>>       <wsdl:output message="tns:testPassingArrayResponse"
>> name="testPassingArrayResponse">
>>     </wsdl:output>
>>     </wsdl:operation>
>>   </wsdl:portType>
>>   <wsdl:binding name="TestBareWebServiceImplServiceSoapBinding"
>> type="tns:ITestWebService">
>>     <soap:binding style="document"
>> transport="http://schemas.xmlsoap.org/soap/http";></soap:binding>
>>     <wsdl:operation name="testPassingArray">
>>       <soap:operation soapAction="" style="document"></soap:operation>
>>       <wsdl:input name="testPassingArray">
>>         <soap:body use="literal"></soap:body>
>>       </wsdl:input>
>>       <wsdl:output name="testPassingArrayResponse">
>>         <soap:body use="literal"></soap:body>
>>       </wsdl:output>
>>     </wsdl:operation>
>>   </wsdl:binding>
>>   <wsdl:service name="TestBareWebServiceImplService">
>>     <wsdl:port binding="tns:TestBareWebServiceImplServiceSoapBinding"
>> name="TestBareWebServiceImplPort">
>>       <soap:address
>> location="http://localhost:8080/ProwebWebServices/services/TestBareWebServi
>>ce"></soap:address> </wsdl:port>
>>   </wsdl:service>
>> </wsdl:definitions>
>>
>> When I generate Java client stubs from this WSDL generated interface
>> looks
>> like following:
>>
>> @WebService(targetNamespace = "http://testbare.webservice.com/";, name =
>> "ITestWebService")
>> @XmlSeeAlso({ObjectFactory.class})
>> @SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
>> public interface ITestWebService {
>>
>>     @WebMethod
>>     public void testPassingArray(
>>         @WebParam(partName = "arrayOfLongs", name = "arrayOfLongs",
>> targetNamespace = "http://testbare.webservice.com/";)
>>         LongArray arrayOfLongs
>>     );
>> }
>>
>> I'm surprised that array parameter is "wrapped" in generated class
>> LongArray through which I need to access internal list of items. I have
>> expected that generated method on the client side is something like
>> following:
>>
>>     @WebMethod
>>     public void testPassingArray(
>>         @WebParam(partName = "arrayOfLongs", name = "arrayOfLongs",
>> targetNamespace = "http://testbare.webservice.com/";)
>>         java.util.List<java.lang.Long> arrayOfLongs
>>     );
>>
>> When I'm using document/literal/wrapped SOAP binding then generated
>> client
>> stub interface is "more friendly and logical":
>>
>> @WebService(targetNamespace = "http://testbare.webservice.com/";, name =
>> "ITestWebService")
>> @XmlSeeAlso({ObjectFactory.class})
>> public interface ITestWebService {
>>
>>     @RequestWrapper(localName = "testPassingArray", targetNamespace =
>> "http://testbare.webservice.com/";, className =
>> "com.webservices.test.TestPassingArray")
>>     @ResponseWrapper(localName = "testPassingArrayResponse",
>> targetNamespace = "http://testbare.webservice.com/";, className =
>> "com.webservices.test.TestPassingArrayResponse")
>>     @WebMethod
>>     public void testPassingArray(
>>         @WebParam(name = "arrayOfLongs", targetNamespace = "")
>>         java.util.List<java.lang.Long> arrayOfLongs
>>     );
>> }
>>
>> Is this expected behavior when using document/literal/bare SOAP binding?
>> Originally I thought that when I switch from wrapped to bare client will
>> compile without any changes. But it seems that client stubs are different
>> and I need to adapt my client to the little bit different generated
>> interfaces.
>>
>> Can someone explain me if described behovior is correct or is it a bug?
>> Shouldn't be generated interfaces on the client side still the same
>> independent of which SOAP binding is currently used?
> 
> 
> 
> -- 
> Daniel Kulp
> [EMAIL PROTECTED]
> http://dankulp.com/blog
> 
> 

-- 
View this message in context: 
http://www.nabble.com/Passing-array-parameters-when-using-document-literal-bare-SOAP-binding-tp19896773p19949573.html
Sent from the cxf-user mailing list archive at Nabble.com.

Reply via email to